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.