🛠 Monter un projet Zephyr complet avec PlatformIO
Pourquoi PlatformIO ?
PlatformIO encapsule toute la chaîne (GCC Arm, GDB, pyOCD, framework Zephyr) pour la carte nrf52840_mdk de la plateforme nordicnrf52. La fiche officielle de la carte indique la sonde embarquée et la mention « IS READY for debugging » ; les protocoles d'upload disponibles sont cmsis-dap (défaut, la sonde DAPLink de la carte), blackmagic, jlink, mbed, nrfjprog et stlink.
Étape 1 — Installer PlatformIO
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py -o get-platformio.py
python3 get-platformio.py
# ou plus simple : pip install platformio
pio --version
Étape 2 — Squelette du projet
mkdir mdk-zephyr && cd mdk-zephyr
pio project init --board nrf52840_mdk
Puis le platformio.ini recommandé par la fiche Board Manager :
[env:nrf52840_mdk]
platform = nordicnrf52
board = nrf52840_mdk
framework = zephyr
; la sonde DAPLink embarquée parle CMSIS-DAP (défaut) ;
; une sonde externe fonctionne aussi : jlink / nrfjprog / mbed
upload_protocol = cmsis-dap
; rappels du manifeste de carte (déjà cohérents par défaut)
board_build.mcu = nrf52840
board_build.f_cpu = 64000000L
Étape 3 — Le source
Dans src/main.c, le devicetree de la carte fournit l'alias led0 (LED RGB) et button0 (bouton utilisateur) :
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);
int main(void)
{
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
while (1) {
gpio_pin_toggle_dt(&led);
k_msleep(500);
}
}
Un fichier prj.conf vide suffit pour ce sample ; c'est là que s'ajoutent CONFIG_BT=y etc. ensuite.
Étape 4 — Build, flash, console
pio run # compile
pio run -t upload # flashe via cmsis-dap
pio device monitor # console CDC du DAPLink
Débogage
debug_tool = cmsis-dap dans l'environnement active les points d'arrêt depuis VS Code. À éviter : OpenOCD avec la sonde embarquée — le mainteneur du BSP Rust n'a jamais réussi avec l'OpenOCD d'Ubuntu 18.04 et est passé à J-Link ; PlatformIO utilise pyOCD, ce qui fonctionne.
Pièges
- Le framework déclaré au manifeste est Zephyr ; les vieux scripts de test du dépôt MakerDiary sont cassés (issue #42) et ses samples ne suivent pas Zephyr 3.5+ (issue #55) — basez-vous sur l'arbre Zephyr courant.
- Si l'upload CMSIS-DAP échoue, rebranchez la carte (le hub USB peut rater l'énumération, issues #53/#37).