Arbeiten Sie mit nRF51822 unter Verwendung von ST-Link und Clion + OpenOCD

Guten Tag, Habr Gemeinde!


Es ist also Zeit für Studierende an technischen Hochschulen. Es ist also Zeit für Heimprojekte und die Eroberung neuer Höhen der Mikroelektronik. Heute werde ich über meine Forschung mit Boards sprechen, die auf dem NRF51822-Chip basieren, einem etwas veralteten Bluetooth-Modul von Nordic Semiconductor. Dieses Unternehmen ist bekannt für seine Funkmodule mit niedrigem Stromverbrauch und der NRF51822-Chip ist keine Ausnahme. Aber lassen wir uns nicht vom Thema ablenken. Reden wir über Eisen.


Einen Debug-Stand erstellen


Bereits im Oktober wurden die Boards yj-14015-nrf51822 für Experimente mit Bluetoth bestellt. Es war eine schlechte Idee, für Elektronikliebhaber Boards ohne Verdrahtung zu den Steckern für Standarddrähte zu kaufen.


yj-14015-nrf51822

yj-14015-nrf51822


Der Abstand zwischen den Kontakten von weniger als 1 mm bereitete mir, einer Person mit äußerst bescheidener Löterfahrung, große Schwierigkeiten. Die Ausgänge auf der Platine waren nicht zum Anlöten von Drähten vorgesehen und ließen sich leicht abreißen. Dieses Schicksal traf die einzige Ausgangsleistung VDD. Mit Hilfe der Bemühungen des Nachbarn war es jedoch möglich, den Draht mit dem Ausgang des Kondensators auf der Platine zu verlöten. Zusammen wurden die GND-, SWDIO-, SWCLK- und einige andere GPIO-Ausgänge verlötet. Das Ergebnis sieht ungefähr so ​​aus wie Frankenstein:


Gelötete Platine

Gelötete Platine


Wir werden unser Gerät mit ST-Link V2 debuggen und flashen. Das Anschlussdiagramm ist äußerst einfach und logisch:


ST-Link V2nrf51822
3,3 VVdd
GNDGND
SWDIOSWDIO
SWDCLKSCLK

Im Gegensatz zu Frankenstein reichte eine einzige Stromentladung nicht aus, um dieses Modul wiederzubeleben. Zunächst habe ich versucht, den Speicher nrf51822 mit dem Dienstprogramm STM32 ST-LINK zu lesen . Mit einigen Einschränkungen funktionierte dies mit STM32-Karten, aber nicht mit NRF. Daraufhin wurde meine Arbeit mit dem Board vorübergehend eingestellt. Wenig später fand ich Artikel 1 und Artikel 2 über die Arbeit mit nrf51822. Es enthielt Links zum SDK und eine detaillierte Beschreibung der Organisation des nrf-Speichers. Der Autor der Artikel verwendete im Gegensatz zu uns den teureren JLink-Debugger. Preiswerte Lösungen sind sehr wichtig, wenn Sie ein armer Student sind :).


SDK lernen


Wenn Sie die Bluetooth-Funktionalität nutzen möchten, was für einen Bluetooth-Chip ganz logisch ist,Sie müssen das sogenannte "softdevice" an den Anfang des programmierbaren Speichers von nrf5 stellen. Es kommt in Form von Firmware und enthält Bluetooth-Funktionalität. Der Rest des Speichers wird in Ihre Firmware geschrieben. Von dort aus können Sie Softdevice-Prozeduren aufrufen, um Bluetooth zu konfigurieren.


Es gibt verschiedene Softdevices. Für nrf51 können Sie s110 (für Serveranwendungen) und s130 (für Server- und Clientanwendungen) verwenden. Um die Kompatibilität von SDK-Versionen und Softdevices zu verstehen, gibt es eine Kompatibilitätsmatrix . Es ist ersichtlich, dass SDKs bis Version 12.3.0 für unser Board geeignet sind. Aber wir werden auf SDK 10.0.0 da aufhören Es unterstützt S110 und S130.


OpenOCD konfigurieren


In den Beispielen aus dem SDK und in den Artikeln wird das Dienstprogramm nrfjprog für die Firmware über JLink verwendet, und wir müssen durch ST-Link V2 flashen. Stattdessen verwenden wir das coole OpenOCD- Programm , das für Windows heruntergeladen wird . Es erlaubt Ihnen zu flashen und zu debuggenTuevu Huchueine große Anzahl von verschiedenen Platinen und Mikroschaltungen. Es gibt eine Konfiguration für den nrf51-Chip. Um OpenOCD zu zwingen, unser Board zu flashen, müssen Sie den Befehl des folgenden Formats ausführen (nachdem Sie den OpenOCD / bin-Ordner zum Pfad hinzugefügt haben). Weitere Informationen zu OpenOCD-Befehlen finden Sie in der Dokumentation .


openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^
-c "nrf51 mass_erase 0" -c "flash write_image " ^ 
-c reset -c exit

Der Teufel steckt wie immer im Detail:


  • "reset halt" sendet einen Chip-Reset-Befehl und stoppt das Gerät. In diesem Zustand kann die Firmware gelöscht / geschrieben werden
  • "nrf51 mass_erase 0" ermöglicht das Schreiben in den Bootloader-Bereich und löscht den gesamten programmierbaren Speicher der Mikroschaltung (dies hilft in einigen Fällen, einen Firmware-Download-Fehler zu vermeiden)
  • statt müssen den Pfad zur Hex-Datei ersetzen
  • Legt die Offset-Adresse des Firmware-Eintrags fest. Dieser Parameter ist nützlich, wenn Sie Ihre Firmware getrennt von Softdevice flashen möchten. Wenn Sie die Firmware ab dem Beginn des Speichers (ab Adresse 0x0) schreiben möchten, können Sie diesen Parameter verwerfen
  • reset setzt den Chip zurück, damit er mit der neuen Firmware funktioniert

Das SDK enthält hexadezimale Softdevice-Dateien. Um s130 auf der Tafel zu füllen, können Sie die folgende Befehlsfolge verwenden:


set file=/components/softdevice/s130/hex/s130_nrf51_1.0.0_softdevice.hex
openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^
-c "nrf51 mass_erase 0" -c "flash write_image %file%" -c reset -c exit

Dann können Sie unsere Firmware hochladen. Es ist wichtig, dass Sie "nrf51 mass_erase 0" entfernen, damit das Softdevice nicht gelöscht wird. Und auch den Offset nicht vergessen. Für S130 ist der Offset 0x1c000 und für S110 0x18000. Diese Werte finden Sie in den technischen Daten für S130 und S110 .


set file=
openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^
-c "flash write_image %file% 0x1c000" -c reset -c exit

Jetzt sollte im Programmspeicher nrf51822 die Softdevice-Firmware und unsere liegen. Für Tests habe ich ein Beispiel aus dem Ordner verwendet/ examples / ble_peripheral / ble_app_beacon und eine Android-App namens "nRF Connect". Nachdem ich die Befehle ausgeführt hatte, sah ich ein Gerät namens nRF. Das haben wir gesucht.


Einrichten des CLion-Projekts


Das nrf51 SDK enthält Beispiele, die auf Makefiles basieren. Um mit CLion arbeiten zu können, müssen Sie die Assembly des Projekts mithilfe von CMake-Dateien beschreiben. Googeln hat gezeigt, dass sich das CMake-Projekt für nrf51 bereits auf dem Github befindet. Es wurde für die Verwendung mit SDK 12.XX geschrieben. Aus diesem Grund haben sich einige Dateipfade für unser SDK 10.0.0 als falsch herausgestellt. Darüber hinaus wird im Projekt auch das Dienstprogramm nrfjprog verwendet. Daher musste ich an den Projekteinstellungen basteln und die Firmware-Ziele mit OpenOCD umschreiben. Das Ergebnis meiner Arbeit ist auf dem Github zu finden . Die Readme-Datei enthält Anweisungen zum Einrichten eines Projekts und zum Debuggen in CLion.


PS


Viele technische Details in Bezug auf die Funktionen von nrf51822 entzogen sich meiner Darstellung. Ich hoffe, dass ich eines Tages die Lücken füllen werde, indem ich einen Artikel hinzufüge oder einen neuen schreibe.


Jetzt auch beliebt: