🛠 Projet firmware complet avec PlatformIO et la sonde J-Link embarquée
¿Por qué PlatformIO aquí?
PlatformIO declara la placa nrf52833_dk en su plataforma nordicnrf52, con J-Link como método de carga por defecto — exactamente lo que proporciona el MCU de interfaz J-Link OB del kit: no hace falta comprar un programador externo. La ficha oficial de la placa documenta este comportamiento. PlatformIO encapsula GCC Arm, GDB y nrfjprog, y se integra con VS Code.
Paso 1 — Instalar e inicializar
pip install platformio
mkdir dk-projet && cd dk-projet
pio project init --board nrf52833_dk
Paso 2 — El platformio.ini
[env:nrf52833_dk]
platform = nordicnrf52
board = nrf52833_dk
framework = zephyr
; upload par le J-Link OB embarqué (défaut de la carte)
upload_protocol = jlink
monitor_speed = 115200
El framework Zephyr de PlatformIO apunta a la misma definición de placa que Zephyr upstream (nrf52833dk); para el SDK oficial de Nordic (NCS), mantenga mejor el flujo west — PlatformIO sigue siendo perfecto para proyectos bare-metal/nrfx y Zephyr.
Paso 3 — El código, con las particularidades del PCB
Dos hechos del User Guide condicionan cada proyecto GPIO en este kit: los LED son activos a nivel bajo (P0.13-P0.16), y los botones (P0.11, P0.12, P0.24, P0.25) no tienen ninguna pull-up externa — hay que activar la pull-up interna, si no la entrada queda flotante y verá pulsaciones fantasma.
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
static const struct gpio_dt_spec led =
GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);
static const struct gpio_dt_spec btn =
GPIO_DT_SPEC_GET(DT_ALIAS(sw0), gpios);
int main(void)
{
gpio_pin_configure_dt(&led, GPIO_OUTPUT_INACTIVE);
/* le devicetree prévoit déjà GPIO_PULL_UP sur sw0 */
gpio_pin_configure_dt(&btn, GPIO_INPUT);
while (1) {
/* bouton actif-bas : enfoncé => 0 */
gpio_pin_set_dt(&led, gpio_pin_get_dt(&btn) == 1);
k_msleep(20); /* anti-rebond grossier */
}
}
Paso 4 — Compilar, cargar, consola
pio run # compile
pio run -t upload # flashe via le J-Link OB (câble sur J2)
pio device monitor # console sur le port COM virtuel
El puerto COM virtual del J-Link OB enruta los pines serie del SoC (P0.05-P0.08, hasta 1 Mbit/s, handshake por hardware). Si la consola sigue muda: verifique que su terminal aserta DTR — sin eso las líneas UART quedan en tri-state (comportamiento documentado en el User Guide). Y para la depuración, debug_tool = jlink activa puntos de interrupción e inspección de memoria en VS Code.
Trampas y limitaciones
- El framework Zephyr de PlatformIO puede ir retrasado respecto al árbol upstream: para los últimos ejemplos de Bluetooth, prefiera west + NCS.
- Los pines P0.09/P0.10 permanecen como NFC por defecto y P0.18 es reset por defecto en el lado Nordic: en el framework Zephyr el devicetree de la placa decide, en nrfx hacen falta los Kconfig dedicados (vea el tutorial de sonda externa).
- No utilice el conector J3 (USB nativo del SoC) para la carga: la interfaz de programación es J2.
Otros tutoriales para esta placa
- Premier blinky Zephyr sur le nRF52833-DK
- Flasher un .hex sans rien installer : MSD et nRF Connect Programmer
- CircuitPython sur le kit Nordic : le prototypage sans C
- Premier périphérique BLE avec le nRF Connect SDK
- Utiliser le DK comme sonde J-Link pour une cible externe
- Réseau Thread / 802.15.4 avec OpenThread sur le nRF52833