nRF51822 flashen mit ST-Link V2 und OpenOCD

Um einen nRF51822 Chip mit mit OpenOCD und ST-Link V2 unter Windows 10 zu flashen verwende ich einen ST-Link V2 als Programmer und OpenOCD um das Hex File auf den Chip zu flashen.

Für den ST-Link V2 braucht man keine Treiber installieren. Einfach per USB verbinden und schon wird das Geräte im Geräte-Manager unter „USB-Geräte“->“STM32 STLink“ angezeigt. So gefällt mir das 🙂

Nun noch den ST-Link mit dem NRF Chip über JTag verbinden und schon kann das flashen der HEX Datei starten.

Eine hervorragende Video-Serie zu dem Thema gibt es z.B. hier:

Da ich keine lokale Entwicklungsumgebung benutze und mit der online IDE „Arm Keil Studio Cloud“ arbeite benötige ich nur OpenOCD um die HEX-Datei zu flashen. Das geht einfach mit folgendem Befehl, den ich einfach in ein kleines Shell-Skript gesteckt habe und dann mit run.sh aufrufen kann.

bin/openocd.exe -f share/openocd/scripts/interface/stlink.cfg -f share/openocd/scripts/target/nrf51.cfg  -c "init; halt; nrf51 mass_erase; program NRF51822.hex; reset; exit;"

Der Befehl startet OpenOCD mit der Konfiguration für den ST-Link und dem NRF51 Chip. Danach werden folgende Befehle nacheinander aufgerufen.

  • init
    Initialisierung
  • halt
    Programmausführung auf NRF51 Chip anhalten
  • nrf51 mass_erase
    Löscht den Speicher des NRF51822
  • program NRF51822.hex
    Schreibt die Datei NRF51822.hex in den Flash des Chips
  • reset
    Reset des NRF51822 (Startet das Programm)
  • exit
    Beendet OpenOCD

Wichtig ist, dass die Datei NRF51822.hex im aktuellen Verzeichnis zu finden ist. Alternativ kann man auch einen relativen oder absoluten Pfad mit angeben. Das ganze sieht dann in der Konsole wie folgt aus.

$ ./run.sh
Open On-Chip Debugger 0.11.0 (2021-11-18) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : clock speed 1000 kHz
Info : STLINK V2J29S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.244622
Info : nrf51.cpu: Cortex-M0 r0p0 processor detected
Info : nrf51.cpu: target has 4 breakpoints, 2 watchpoints
Info : starting gdb server for nrf51.cpu on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x00002fa0 msp: 0x20003f50
Info : nRF51822-QFAA(build code: H0) 256kB Flash, 16kB RAM
Info : Mass erase completed.
Info : A reset or power cycle is required if the flash was protected before.
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0xfffffffe msp: 0xfffffffc
** Programming Started **
Info : Flash write discontinued at 0x000007c0, next section at 0x00001000
Warn : Adding extra erase range, 0x000007c0 .. 0x000007ff
Info : Flash write discontinued at 0x0001b4d8, next section at 0x0001c000
Warn : Adding extra erase range, 0x0001b4d8 .. 0x0001b7ff
Warn : Adding extra erase range, 0x00026810 .. 0x00026bff
** Programming Finished **

Das wars auch schon 🙂

Und die Hardware?

Ich verwende hier ein CJMCU-8223 Board. Das enthält den NRF51822 und ein LIS3DH Beschleunigungssensor. Das komplette Board inclusive einer Antenne kann für ca. 6-7$ bei Aliexpress erstanden werden. Man kann aber auch jedes andere NRF51 Board verwenden bei dem die Pins SWDIO, SWCLK, VDD und GND erreichbar sind.

Und woher bekomme ich die HEX Datei

Die Cloud Entwicklungsumgebung Arm Keil Studio Cloud ist sehr gut geeignet um für den NRF51 Programme zu schreiben. Es muss nichts installiert werden und es funktioniert einfach.

Die Doku zu Keil Studio kann man unter https://developer.arm.com/documentation/102497/1-5/Arm-Keil-Studio finden.