🛠 Projet firmware complet avec PlatformIO et la sonde J-Link embarquée
Pourquoi PlatformIO ici ?
PlatformIO déclare la carte nrf52833_dk dans sa plateforme nordicnrf52, avec J-Link comme méthode d'upload par défaut — exactement ce que fournit le MCU d'interface J-Link OB du kit : aucun programmateur externe à acheter. La fiche officielle de la carte documente ce comportement. PlatformIO encapsule GCC Arm, GDB et nrfjprog, et s'intègre à VS Code.
Étape 1 — Installer et initialiser
pip install platformio
mkdir dk-projet && cd dk-projet
pio project init --board nrf52833_dk
Étape 2 — Le 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
Le framework Zephyr de PlatformIO cible la même définition de carte que Zephyr amont (nrf52833dk) ; pour le SDK officiel Nordic (NCS), gardez plutôt le flux west — PlatformIO reste parfait pour les projets bare-metal/nrfx et Zephyr.
Étape 3 — Le code, avec les spécificités du PCB
Deux faits du User Guide conditionnent chaque projet GPIO sur ce kit : les LED sont actives au niveau bas (P0.13-P0.16), et les boutons (P0.11, P0.12, P0.24, P0.25) n'ont aucune pull-up externe — il faut activer la pull-up interne, sinon l'entrée flotte et vous verrez des appuis fantômes.
#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 */
}
}
Étape 4 — Build, upload, console
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
Le port COM virtuel du J-Link OB route les broches série du SoC (P0.05-P0.08, jusqu'à 1 Mbit/s, handshake matériel). Si la console reste muette : vérifiez que votre terminal assertit DTR — sans ça les lignes UART restent en tri-state (comportement documenté au User Guide). Et pour le débogage, debug_tool = jlink active points d'arrêt et inspection mémoire dans VS Code.
Pièges et limites
- Le framework Zephyr de PlatformIO peut être en retard sur l'arbre amont : pour les derniers samples Bluetooth, préférez west + NCS.
- Les broches P0.09/P0.10 restent NFC par défaut et P0.18 est reset par défaut côté Nordic : en framework Zephyr le devicetree de la carte tranche, en nrfx il faut les Kconfig dédiés (voir le tuto sonde externe).
- N'utilisez pas le connecteur J3 (USB natif du SoC) pour l'upload : l'interface de programmation, c'est J2.
Autres tutoriels pour cette carte
- 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