🛠 Monter un projet Zephyr complet avec PlatformIO
¿Por qué PlatformIO?
PlatformIO encapsula toda la cadena (GCC Arm, GDB, pyOCD, framework Zephyr) para la placa nrf52840_mdk de la plataforma nordicnrf52. La ficha oficial de la placa indica la sonda integrada y la mención « IS READY for debugging »; los protocolos de subida disponibles son cmsis-dap (predeterminado, la sonda DAPLink de la placa), blackmagic, jlink, mbed, nrfjprog y stlink.
Paso 1 — Instalar 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
Paso 2 — Esqueleto del proyecto
mkdir mdk-zephyr && cd mdk-zephyr
pio project init --board nrf52840_mdk
Luego el platformio.ini recomendado por la ficha de 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
Paso 3 — El código fuente
En src/main.c, el devicetree de la placa proporciona el alias led0 (LED RGB) y button0 (botón de usuario):
#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 archivo prj.conf vacío es suficiente para este ejemplo; es aquí donde se añaden CONFIG_BT=y, etc. posteriormente.
Paso 4 — Compilación, grabación y consola
pio run # compile
pio run -t upload # flashe via cmsis-dap
pio device monitor # console CDC du DAPLink
Depuración
debug_tool = cmsis-dap en el entorno habilita los puntos de interrupción desde VS Code. Evitar: OpenOCD con la sonda integrada — el mantenedor del BSP Rust nunca logró hacerlo funcionar con OpenOCD de Ubuntu 18.04 y cambió a J-Link; PlatformIO utiliza pyOCD, lo cual funciona.
Trampas
- El framework declarado en el manifiesto es Zephyr; los antiguos scripts de prueba del repositorio MakerDiary están rotos (issue #42) y sus ejemplos no siguen Zephyr 3.5+ (issue #55) — base su trabajo en el árbol Zephyr actual.
- Si la subida CMSIS-DAP falla, vuelva a conectar la placa (el hub USB puede fallar en la enumeración, issues #53/#37).