Kúpa Nordic Semiconductor nRF52840 Dongle ma veľmi sklamala. Mylne som si myslel, že ide o pekný malý USB 2.0 zapojiteľný modul na vstup do vývoja s nízkopríkonovým Bluetoothom, no čím viac som sa do toho ponáral, tým viac som zisťoval, že z neho v aktuálnom stave je takmer nemožné vytlačiť akúkoľvek užitočnú hodnotu.
Prvá vec, ktorú som skúšal, bol softvér nRF Connect for Desktop a ten s
doskou samotnou fungoval, no len v obmedzenej kapacite - konkrétne ako
nástroj na zobrazenie RSSI. Sekcia Quick Start, ktorá by podľa mňa mala byť
tá najprínosnejšia, zobrazuje dosť sklamujúcu správu: Not supported yet.

Platformio ako východiskový bod #
S dongulom zapojeným som spustil “Hello World!” platformio projekt - to, čo zvyčajne funguje na náhodnej vývojovej doske, ktorá skončí na mojom stole. Spomedzi troch podporovaných frameworkov Adruino Wiring, MBED a Zephyr som intuitívne zvolil Adruino, keďže ho poznám najlepšie. Program sa skompiluje, ale nedá sa flashovať:
AVAILABLE: blackmagic, cmsis-dap, jlink, mbed, nrfjprog, stlink
CURRENT: upload_protocol = jlink
JLinkExe -device nRF52840_xxAA -speed 4000 -if swd -autoconnect 1 -NoGui 1 -CommanderScript "xxx/upload.jlink"
SEGGER J-Link Commander V8.12f (Compiled Feb 12 2025 12:13:07)
DLL version V8.12f, compiled Feb 12 2025 12:12:09
J-Link Command File read successfully.
Processing script file...
J-Link>h
J-Link connection not established yet but required for command.
Connecting to J-Link via USB...FAILED: Cannot connect to J-Link.
J-Link>loadbin .pio/build/nrf52840_dk/firmware.hex,0x0
J-Link connection not established yet but required for command.
Connecting to J-Link via USB...FAILED: Cannot connect to J-Link.
J-Link>r
J-Link connection not established yet but required for command.
Connecting to J-Link via USB...FAILED: Cannot connect to J-Link.
J-Link>q
Script processing completed.
Bez ohľadu na to, čo som skúšal - na Macu, Linuxe alebo Windows - ako odporúča dokumentácia, správa bola vždy rovnaká:
Connecting to J-Link via USB...FAILED: Cannot connect to J-Link.
Prepnutie protokolu z predvoleného jlink na nrfjprog prinieslo podobne
sklamujúci výsledok. Kód sa skompiluje, ale pri flashovaní sa zasekne:
nrfjprog --chiperase --reset --program .pio/build/nrf52840_dk/firmware.hex
Zephyr ako ďalší krok #
Ďalšia vec, ktorú som skúšal, bola táto odpoveď, ktorá vyzerala presne ako to, čo som hľadal: konkrétny spôsob použitia platformio na flashovanie nRF52840 Dongle. Využíva ručne vytvorený python skript na flashovanie, čo je v poriadku, ale tiež využíva niečo, s čím som nebol oboznámený - Zephyr framework.
No pri prehľadávaní internetu mnoho zdrojov naznačuje, že Nordic a Zephyr idú spolu dobre a dokumentácia je skvelá. Chcel som aspoň nájsť spôsob, ako tú zatratenú vec flashovať vlastným kódom, tak som to skúsil. Výsledky boli opäť neuspokojivé.
Compiling .pio/build/nrf52840_dongle/offsets/zephyr/arch/arm/core/offsets/offsets.c.o
In file included from /Users/peterbabic/.platformio/packages/framework-zephyr/include/kernel_includes.h:41,
from /Users/peterbabic/.platformio/packages/framework-zephyr/include/kernel.h:17,
from /Users/peterbabic/.platformio/packages/framework-zephyr/arch/arm/core/offsets/offsets_aarch32.c:28,
from /Users/peterbabic/.platformio/packages/framework-zephyr/arch/arm/core/offsets/offsets.c:9:
/Users/peterbabic/.platformio/packages/framework-zephyr/include/sys/kobject.h:36:10: fatal error: kobj-types-enum.h: No such file or directory
*******************************************************************************
* Looking for kobj-types-enum.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:kobj-types-enum.h"
* Web > https://registry.platformio.org/search?q=header:%1B%5Bm%1B%5BKkobj-types-enum.h
*
*******************************************************************************
#include <kobj-types-enum.h>
^~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [.pio/build/nrf52840_dongle/offsets/zephyr/arch/arm/core/offsets/offsets.c.o] Error 1
Hľadanie ma priviedlo k ďalšej
odpovedi,
ktorá v kroku 5 uvádza, že Python 3.12 a vyšší už neobsahuje nainštalovaný
setuptools.
brew install python-setuptools
Spustenie platformio teraz opäť úspešne zlyháva:
Compiling .pio/build/nrf52840_dongle/src/main.o
Archiving .pio/build/nrf52840_dongle/zephyr/kernel/libkernel.a
Indexing .pio/build/nrf52840_dongle/zephyr/kernel/libkernel.a
src/main.cpp:1:10: fatal error: zephyr/kernel.h: No such file or directory
#include <zephyr/kernel.h>
^~~~~~~~~~~~~~~~~
compilation terminated.
Archiving .pio/build/nrf52840_dongle/zephyr/libzephyr.a
*** [.pio/build/nrf52840_dongle/src/main.o] Error 1
Indexing .pio/build/nrf52840_dongle/zephyr/libzephyr.a
Skúsil som upraviť zdrojový kód odstránením predpony zephyr/ takto:
-#include <zephyr/kernel.h>
+#include <kernel.h>
A to napriek tejto odpovedi. Chybová správa sa zmenila, ale ani tak sa to neskompilovalo:
Compiling .pio/build/nrf52840_dongle/src/main.o
src/main.cpp: In function 'int main()':
src/main.cpp:15:10: error: 'gpio_is_ready_dt' was not declared in this scope
if (!gpio_is_ready_dt(&led)) {
^~~~~~~~~~~~~~~~
src/main.cpp:15:10: note: suggested alternative: 'gpio_pin_set_dt'
if (!gpio_is_ready_dt(&led)) {
^~~~~~~~~~~~~~~~
gpio_pin_set_dt
*** [.pio/build/nrf52840_dongle/src/main.o] Error 1
To bol pre mňa tvrdý stop, keďže ani Google ani Claude 4 neponúkli ďalšie náznaky, ako pokračovať, a samozrejme niečo bolo kompletne zle s mojím nastavením, ak oficiálne podporovaná metóda z dokumentácie Zephyr nie je v kóde dostupná.
Manuálne použitie nrfutil #
Pohľad na
tabuľku
ukazuje, že nRF52840 Dongle je jedinou doskou z 10+ tam uvedených, ktorá
výlučne používa metódu Programming with Nordic Secure DFU. Ach jaj.
Vyššie uvedené potvrdzuje aj správa:
Poznámka: Toto je primárna metóda programovania pre nRF52840 Dongle. Programovanie nRF52840 Dongle vyžaduje inštaláciu ovládača nrf-device-lib.
Dobre, nainštaloval som všetky nástroje a pokúsil sa manuálne flashovať firmvér, ktorý vygenerovalo platformio:
nrfutil device program --firmware .pio/build/nrf52840_dk/firmware.hex --serial-number DC22853847E1
Samozrejme to nefungovalo:
[00:00:00] ------ 0% [DC22853847E1] Failed, Firmware file extension .hex is not supported
Error: One or more program tasks failed:
* DC22853847E1: Firmware file extension .hex is not supported (Argument)
Konverzia .hex firmvéru na niečo podporované by podľa tohto
návodu
mala byť možná cez nrfutil pkg, ale nrfutil search pkg nič nenájde.
$ nrfutil pkg
Error: nrfutil command `pkg` not found. See `nrfutil list` for full list of installed commands, `nrfutil search` for installable commands, and `nrfutil install` for installation of new commands.
Caused by:
Subcommand nrfutil-pkg not found
$ nrfutil search pkg
Found 0 installable command(s)
Nechápem. Len pre referenciu, tu uvádzam verziu:
nrfutil 8.0.0 (54d8087 2025-01-07)
commit-hash: 54d8087a38b73b6e56942fb1b024b62365f06731
commit-date: 2025-01-07
host: aarch64-apple-darwin
build-timestamp: 2025-01-07T14:24:48.421941000Z
classification: nrf-external
Moje možnosti sa tenčia.
Použitie GUI programátora #
Podľa tohto
návodu
by mal byť možný aj flash firmvéru cez nRF Connect GUI Programmer, no ani
to mi nefungovalo:

Ako vidíte, tlačidlo “Write” je zošednuté. Nemám tušenia prečo.
Samostatný Zephyr #
V tomto reddit vlákne sa objavuje viac varovaní pred možnosťou ľahkého soft-brickovania nRF52840 Dongle, ktoré by vyžadovalo skutočnú vývojovú dosku nRF52840 na odbrickovanie. Zatiaľ sa mi ho však zabrickovať nepodarilo, keďže sa mi nepodarilo naprogramovať do neho žiadny kód.
Existuje však jeden komplikovaný návod ako postupovať. Zahŕňa inštaláciu celého Zephyr prostredia a úplne obchádza Platformio. Ale návod skutočne fungoval. Dongle mi začal blikať.
$ nrfutil nrf5sdk-tools dfu usb-serial -pkg blinky.zip -p /dev/cu.usbmodemDC22853847E11
[####################################] 100%
Device programmed.
Záver pre môjho budúceho ja zo všetkého tohto je nasledovný: Ak si kúpite nRF52840, nainštalujte Zephyr podľa oficiálnej dokumentácie a Platformio vôbec nepoužívajte. Užívajte!
Odkazy #
- https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/installation/install_ncs.html
- https://docs.platformio.org/en/stable/boards/nordicnrf52/nrf52840_dk.html
- https://eclipse-embed-cdt.github.io/debug/jlink/install/
- https://forum.microchip.com/s/topic/a5C3l000000BqMCEA0/t391591
- https://kb.segger.com/J-Link_Commander