🛠 Faire clignoter la LED RGB avec Zephyr
¿Por qué empezar por aquí?
El nRF52840-MDK de MakerDiary (~30 €) se basa en el SoC Nordic nRF52840: Arm Cortex-M4F @ 64 MHz, 1 MB de flash, 256 KB de RAM, radio multiprotocolo de 2,4 GHz (BLE, Bluetooth Mesh, Thread, Zigbee, ANT). Su gran ventaja: un depurador DAPLink integrado (unidad USB + puerto COM virtual + CMSIS-DAP) — no se necesita ningún programador externo. La placa está referenciada en el repositorio principal de Zephyr con el nombre nrf52840_mdk.
Paso 1 — Instalar la cadena de herramientas Zephyr
Siga la Guía de inicio oficial de Zephyr para su sistema operativo (CMake, Ninja, Python 3, toolchain para Cortex-M, y luego west):
python3 -m venv .venv && source .venv/bin/activate # .venv\Scripts\activate sous Windows
pip install west
west init zephyrproject
cd zephyrproject && west update
Paso 2 — Conectar la placa
Conecte la placa por USB. Se enumera como un hub USB 2.0 con dos puertos: uno hacia el DAPLink (aparece la unidad extraíble DAPLINK, además de un puerto serie CDC), y el otro hacia el USB nativo del nRF52840. Si la unidad DAPLINK no aparece (problemas conocidos #53 y #37, especialmente en Mac), cambie de cable, de puerto o de host.
Paso 3 — Compilar y flashear
west build -b nrf52840_mdk samples/basic/blinky
west flash
west flash se comunica con la sonda CMSIS-DAP integrada. Alternativa sin ninguna herramienta: copie build/zephyr.hex en la unidad DAPLINK y luego pulse el botón Boot/Reset.
Paso 4 — Entender el código
El devicetree de la placa define el alias led0, de ahí que el ejemplo estándar funcione sin modificaciones:
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
int main(void)
{
if (!gpio_is_ready_dt(&led)) {
return -1;
}
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
while (1) {
gpio_pin_toggle_dt(&led);
k_msleep(1000);
}
}
El LED RGB está conectado a pines P0 convencionales: para la asignación exacta, consulte el diagrama de pines oficial en PDF en lugar de codificar números de pin fijos.
Problemas conocidos
- Los ejemplos antiguos del repositorio de MakerDiary ya no compilan con Zephyr 3.5+ (issue #55): utilice los samples actualizados del repositorio principal.
- En Windows anterior a 10, se requiere el controlador de serie Arm Mbed para el puerto CDC.