Demande d'aide sur l'utilisation du module LoRa avec Zephyr sur Zest_core_mtxdot

Bonjour,

Pour le projet COCOS4, nous devons utiliser le module LoRa intégrer dans le zest_core_mtxdot qui est connecté en SPI.
Zephyr propose un exemple de mise en œuvre de LoRa. Le problème étant qu’il faut créer un fichier app.overlay afin de spécifier les Pins reliant le microcontrôleur STM32L151CCU6 au module LoRa SX1272, ainsi que certaines propriétés spécifiées dans le fichier sx1272-base.yaml.

Erreurs de compilation

J’obtiens les erreurs de compilation suivantes :

CMakeFiles/loramac-node.dir/sx127x.c.obj -MF zephyr/drivers/lora/CMakeFiles/loramac-node.dir/sx127x.c.obj.d -o zephyr/drivers/lora/CMakeFiles/loramac-node.dir/sx127x.c.obj -c /home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c
In file included from /home/a/ale.gairaud/6tron-workspace/zephyr/include/zephyr/toolchain.h:50,
                 from /home/a/ale.gairaud/6tron-workspace/zephyr/include/zephyr/sys/__assert.h:11,
                 from /home/a/ale.gairaud/6tron-workspace/zephyr/include/zephyr/drivers/gpio.h:20,
                 from /home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:8:
/home/a/ale.gairaud/6tron-workspace/zephyr/include/zephyr/toolchain/gcc.h:87:36: error: static assertion failed: "None of rfo-enable-gpios, pa-boost-enable-gpios and power-amplifier-output has been specified. Look at semtech,sx127x-base.yaml to fix that."
   87 | #define BUILD_ASSERT(EXPR, MSG...) _Static_assert((EXPR), "" MSG)
      |                                    ^~~~~~~~~~~~~~
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:125:1: note: in expansion of macro 'BUILD_ASSERT'
  125 | BUILD_ASSERT(0, "None of rfo-enable-gpios, pa-boost-enable-gpios and "

Après analyse, il semble que l’erreur provienne d’une assertion qui est levée.

D’autres erreurs de compilation sont également présentes :

/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:303:21: warning: implicit declaration of function 'SX127X_PA_OUTPUT'; did you mean 'SX127X_PA_BOOST'? [-Wimplicit-function-declaration]
  303 |                 if (SX127X_PA_OUTPUT(dev_data.tx_power) == SX127X_PA_BOOST) {
      |                     ^~~~~~~~~~~~~~~~
      |                     SX127X_PA_BOOST
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:303:46: error: 'struct sx127x_data' has no member named 'tx_power'
  303 |                 if (SX127X_PA_OUTPUT(dev_data.tx_power) == SX127X_PA_BOOST) {
      |                                              ^
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c: In function 'SX1272Reset':
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:323:36: error: 'const struct sx127x_config' has no member named 'reset'
  323 |         gpio_pin_set_dt(&dev_config.reset, 1);
      |                                    ^
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:327:36: error: 'const struct sx127x_config' has no member named 'reset'
  327 |         gpio_pin_set_dt(&dev_config.reset, 0);
      |                                    ^
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c: In function 'sx127x_transceive':
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:413:53: error: 'const struct sx127x_config' has no member named 'bus'
  413 |                 return spi_transceive_dt(&dev_config.bus, &tx, &rx);
      |                                                     ^
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:416:40: error: 'const struct sx127x_config' has no member named 'bus'
  416 |         return spi_write_dt(&dev_config.bus, &tx);
      |                                        ^
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c: In function 'sx127x_lora_init':
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:585:41: error: 'const struct sx127x_config' has no member named 'bus'
  585 |         if (!spi_is_ready_dt(&dev_config.bus)) {
      |                                         ^
/home/a/ale.gairaud/6tron-workspace/zephyr/drivers/lora/sx127x.c:602:36: error: 'const struct sx127x_config' has no member named 'reset'
  602 |         gpio_pin_set_dt(&dev_config.reset, 0);

Analyse du problème

Il semble que des macros vérifient si notre fichier app.overlay contient les propriétés du fichier sx1272-base.yaml. Néanmoins, les macros ne semblent pas bien détecter

ci-dessous, le fichier zest_core_mtxdot.overlay que nous avons créé

/ {
	aliases {
		lora0 = &lora0;
	};

	// Déclaration du noeud LoRa
	lora0: lora@0 {
		compatible = "semtech,sx1272"; // Utilisation du driver SX1272
		reg = <0x0 0x1000>; // Adresse du périphérique SPI (address = 0x0, size = 0x1000)
		spi-max-frequency = <1000000>; // Fréquence SPI maximale

		// Configuration des broches LoRa
		dio0-gpios = <&gpioa 6 GPIO_ACTIVE_HIGH>; // PA6 -> LORA_DIO0
		dio1-gpios = <&gpioa 7 GPIO_ACTIVE_HIGH>; // PA7 -> LORA_DIO1
		dio2-gpios = <&gpioa 8 GPIO_ACTIVE_HIGH>; // PA8 -> LORA_DIO2
		dio3-gpios = <&gpiob 1 GPIO_ACTIVE_HIGH>; // PB1 -> LORA_DIO3
		dio4-gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; // PC13 -> LORA_DIO4

		reset-gpios = <&gpioa 1 GPIO_ACTIVE_LOW>; // PA1 -> LORA_RESET
		nss-gpios = <&gpioa 15 GPIO_ACTIVE_LOW>; // PA15 -> LORA_NSS

		// Configuration des broches SPI
		spi-max-frequency = <8000000>;
		spi-cs-gpios = <&gpioa 4 GPIO_ACTIVE_LOW>;
		miso-gpios = <&gpiob 4 GPIO_ACTIVE_HIGH>; // PB4 -> LORA_MISO
		mosi-gpios = <&gpiob 5 GPIO_ACTIVE_HIGH>; // PB5 -> LORA_MOSI
		sck-gpios = <&gpiob 3 GPIO_ACTIVE_HIGH>; // PB3 -> LORA_SCK

		// GPIOs d'alimentation et d'amplification
		rfo-enable-gpios = <&gpioa 11 GPIO_ACTIVE_HIGH>;
		pa-boost-enable-gpios = <&gpioa 12 GPIO_ACTIVE_HIGH>;
		power-amplifier-output = "rfo";

		// GPIO pour alimenter le TCXO
		// tcxo-power-gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>; // Alimentation TCXO
	};
};

Demande

Avez-vous déjà réalisé un exemple d’utilisation du module LoRa de la MTXDOT sous Zephyr ?
Si oui, pourriez-vous nous le fournir ?

Merci d’avance pour votre aide.

Bonjour,

Je regarde ça tout de suite et je pense que notre solution sera d’embarquer la définition du device sx1272 dans le board.dts

Je te préviens dès que le problème sera réglé.

Bonjour,

Le problème a été corrigé et le sx1272 a été tester sur le sample de zephyrs-os 3.7.
Le sample en question est le suivant:

─ zephyr
 └─ samples
   └─ driver
     └─ lora
       ├─ receive
       └─ send

Le dépot de la Zest_Core_MTXDOT est à jours avec la correction.
Attention toute fois à l’utilisation d’une antenne externe sur le connecteur UFL (voir README.md)

N’hésite pas à revenir vers nous si tu as d’autre problèmes.

Bonjour,
La mise à jour a bien régler le problème de compilation.
Merci beaucoup