Guten Tag, Habr Community!
Es ist also Zeit für Studenten an technischen Universitäten. Es ist also Zeit für Heimprojekte und die Eroberung neuer Höhen der Mikroelektroniktechnologie. 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 geringem Stromverbrauch und der NRF51822-Chip ist keine Ausnahme. Aber wir werden uns nicht vom Thema ablenken lassen. Reden wir über Eisen.
Erstellen eines Debug-Stands
Bereits im Oktober wurden yj-14015-nrf51822- Boards für Experimente mit Bluetoth bestellt. Es war eine schlechte Idee, Platinen ohne Verkabelung mit den Stiftsteckern für Standardkabel für Elektronikliebhaber zu kaufen.
Der Abstand zwischen den Kontakten von weniger als 1 mm bereitete mir, einer Person mit einer äußerst bescheidenen Löterfahrung, große Schwierigkeiten. Die Ausgänge auf der Platine waren nicht zum Löten an Drähten vorgesehen und ließen sich leicht abreißen. Dieses Schicksal traf das einzige Netzteil VDD. Mit Hilfe der Bemühungen des Nachbarn war es jedoch möglich, den Draht an den Kondensatoranschluss auf der Platine anzulöten. Zusammen wurden die GND-, SWDIO-, SWCLK- und einige andere GPIO-Ausgänge verlötet. Das Ergebnis sieht ähnlich aus wie Frankenstein:
Wir werden unser Gerät mit ST-Link V2 debuggen und flashen. Das Verbindungsdiagramm ist äußerst einfach und logisch:
ST-Link V2 | nrf51822 |
---|
3,3V | Vdd |
GND | GND |
SWDIO | SWDIO |
SWDCLK | SCLK |
Im Gegensatz zu Frankenstein reichte eine einzige Stromentladung nicht aus, um dieses Modul wiederzubeleben. Zunächst habe ich versucht, den Speicher von nrf51822 mit dem Dienstprogramm STM32 ST-LINK zu lesen. Mit einigen Einschränkungen funktionierte dies mit STM32-Boards, jedoch nicht mit nrf. In diesem Zusammenhang wurde meine Arbeit mit dem Vorstand 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. Günstige Lösungen sind sehr wichtig, wenn Sie ein armer Schüler sind :).
SDK lernen
Wenn Sie die Bluetooth-Funktionalität nutzen möchten, Das ist ziemlich logisch für einen Bluetooth-Chip. Sie müssen das sogenannte "Softdevice" am Anfang des programmierbaren Speichers nrf5 platzieren. Es kommt in Form von Firmware und enthält Bluetooth-Funktionalität. Der Rest des Speichers wird in Ihre Firmware geschrieben. Daraus können Sie Softdevice-Prozeduren aufrufen, um Bluetooth zu konfigurieren.
Es gibt verschiedene Softgeräte. 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 Softdevice 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 seitdem auf SDK 10.0.0 aufhören Es unterstützt s110 und s130.
Konfigurieren Sie OpenOCD
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 ST-Link V2 flashen. Stattdessen verwenden wir das coole OpenOCD- Programm, das für Windows heruntergeladen wird . Es ermöglicht Ihnen das Flashen und Debuggen tuevu huchu eine große Anzahl verschiedener Platinen und Mikroschaltungen. Es gibt eine Konfiguration für den nrf51-Chip. Um OpenOCD zum Flashen unserer Karte zu zwingen, müssen Sie den Befehl des unten angegebenen Formats ausführen (nachdem Sie den Ordner OpenOCD / bin zu Path 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 <PATH_TO_HEX> <OFFSET>" ^ -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 des Mikroschaltkreises (in einigen Fällen hilft es, einen Firmware-Download-Fehler zu vermeiden).
- Anstelle von <PATH_TO_HEX> müssen Sie den Pfad zur Hex-Datei ersetzen
- <OFFSET> legt den Offset der Firmware-Schreibadresse fest. Dieser Parameter ist nützlich, wenn Sie Ihre Firmware getrennt von softdevice flashen möchten. Wenn Sie Firmware ab dem Anfang des Speichers (ab Adresse 0x0) schreiben möchten, können Sie diesen Parameter verwerfen
- Zurücksetzen setzt den Chip zurück, damit er mit der neuen Firmware funktioniert
Das SDK enthält Hex-Dateien für Softdevices. Um s130 auf der Karte zu füllen, können Sie die folgende Befehlsfolge verwenden:
set file=<nRF5_SDK>/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 die "nrf51 mass_erase 0" entfernen, damit das Softgerät nicht gelöscht wird. Und vergessen Sie auch nicht den Offset. Für s130 beträgt der Offset 0x1c000 und für s110 0x18000. Diese Werte finden Sie in den Spezifikationen für s130 und s110 .
set file=<PATH_TO_HEX> 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 im Programmspeicher nrf51822 sollte die Softdevice-Firmware und unsere liegen. Für Tests habe ich ein Beispiel aus dem Ordner <nRF5_SDK> / examples / ble_peripheral / ble_app_beacon und eine Android-Anwendung namens "nRF Connect" verwendet. Nachdem ich die Befehle ausgeführt hatte, sah ich ein Gerät namens nRF. Das haben wir gesucht.
Einrichten eines CLion-Projekts
Das nrf51 SDK enthält Beispiele, die auf Makefiles basieren. Um mit CLion arbeiten zu können, muss die Projektassembly mithilfe von CMake-Dateien beschrieben werden. Googeln hat gezeigt, dass das CMake-Projekt für nrf51 bereits auf dem Github ist. Es wurde für die Verwendung mit dem 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 neu schreiben. Das Ergebnis meiner Arbeit finden Sie auf dem Github . In der Readme-Datei werden Anweisungen zum Einrichten eines Projekts und zum Debuggen in CLion beschrieben.
PS
Viele technische Details zu den Funktionen von nrf51822 entzogen sich meiner Erzählung. Ich hoffe, dass ich eines Tages die Lücken füllen kann, indem ich einen Artikel hinzufüge oder einen neuen schreibe.