Warum?
In der Ära von Arduino UNO und Atmega328 habe ich ganz auf einen Programmierer verzichtet und den Mikrocontroller zuerst mit dem Arduino-Bootloader über einen anderen Arduino (Arduino als ISP) und dann über eine reguläre serielle Schnittstelle und erst nach Arduino-Unterstützung für Module auf Basis von Nordic Semiconductor nrf51822 und nrf52832 für mich geflasht Zum ersten Mal wurde die Anwesenheit eines SWD-Programmierers relevant, da Sie die Firmware auf keine andere Weise in ein nacktes chinesisches Modul füllen können.
Der De-facto-Standard in diesem Bereich sind die Jlink-Programmierer des deutschen Unternehmens Segger Microcontroller System, die nicht nur für ihre hervorragenden Leistungseigenschaften, sondern auch für den himmelhohen Preis (ca. 500-600 USD) bekannt sind. Wir müssen Segger Tribut zollen, für den nichtkommerziellen Gebrauch wird eine EDU-Version veröffentlicht, die völlig identisch mit Jlink Base ist, aber in Russland sogar 3.000 Rubel kostet. Lieblings-Aliexpress ist voll von chinesischen Klonen, aber sie sind relativ teuer, ganz zu schweigen von anderen Dingen.
Es gibt ST-LINK / V2 von ST Microelectronics, deren Kompatibilität mit Mikrocontrollern von STMicro selbst jedoch nicht in Frage steht.
Infolgedessen fiel meine Meinung unweigerlich auf den JTAG / SWD-Programmierer Black Magic Probe (BMP), der bei Kickstarter mehr als 47.000 US-Dollar mit dem erklärten Ziel von 10.000 US-Dollar sammelte.
Black Magic Probe (BMP)

- Open-Source-Programmierer; Arbeiten an der JTAG- oder SWD-Schnittstelle und Bereitstellen des vollständigen Debuggens
- Hat einen eingebauten GDB-Server (es sind keine "Zwischen" -Programme wie OpenOCD erforderlich)
- Unterstützt ARM Cortex-M- und Cortex-A-Mikrocontroller
- Es funktioniert unter Windows, Linux und MacOS (in den letzten beiden funktioniert es ohne Treiber)

Vor- und Nachteile von BMP gegenüber den chinesischen Klonen von Segger Jlink und ST-LINK / V2:
(+)
- gutes Gewissen (keine gefälschten Klone)
- Billigkeit (dazu später mehr)
- hat sowohl JTAG- als auch UART-Schnittstellen (besonders relevant für das Debuggen im Arduino-Stil über serial.print ()
- garantierte Aktualisierungsfähigkeit bei Veröffentlichung einer neuen Firmware
(-)
- begrenzte Anzahl unterstützter "Ziele" (im Vergleich zu Jlink)
Tatsächlich ist BMP ein Softwareprogrammierer, der auf unterschiedlicher Hardware ausgeführt werden kann. Viele Unternehmen stellen „offizielle“ BMP-Programmierer her, aber ihre Kosten betragen etwa 60 US-Dollar, was zwar billiger als der ursprüngliche Jlink ist, aber für Heimwerker immer noch teuer ist.
Ich will es!
Kann ich eine coole Black Magic Probe bekommen, ohne 60 US-Dollar zu bezahlen? Ja
Für die Erstellung der Black Magic Probe benötigen wir ein Modul auf Basis des STM32F103 MK, das unter ausländischen Enthusiasten als blaue Pille (blaue Pille) für die charakteristische Farbe der Maske auf der Leiterplatte bezeichnet wurde. Es ist nicht bekannt, woher diese Tradition stammt, aber die Tatsache bleibt bestehen: Die überwiegende Mehrheit dieser Module hat eine blaue Leiterplatte und ist mit Stiften aus gelbem Kunststoff ausgestattet (ein solches „gelb-schwarzes“ Modul wird erhalten). Es gibt immer noch rote und sogar schwarze Pillen, aber sie unterscheiden sich im Wesentlichen nicht von blauen Pillen.

Schwarze Magie in 4 Schritten
Schritt 1 - Erstellen der Bootloader-Dateien und des Blackmagic selbst
cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make
(Wenn Fehlermeldungen angezeigt werden, öffnen Sie die make-Datei mit einem beliebigen Editor (ich verwende nano):
nano make
CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\
wir die 13. Zeile finden, sieht es so aus: "
CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\
" und löschen Sie "
-Werror
".
-Werror
Zeile sollte sich in "
CFLAGS += -Wall -Wextra -Wno-char-subscripts\
"
CFLAGS += -Wall -Wextra -Wno-char-subscripts\
", beenden Sie das Speichern (Strg-x, y) und führen Sie es erneut aus
make
Gehen Sie nun zum src-Verzeichnis:
cd src
und geben Sie den Befehl ein:
make clean && make PROBE_HOST=stlink
Infolgedessen haben wir im src-Verzeichnis zwei Dateien: blackmagic_dfu.bin und blackmagic.bin
Bitte beachten Sie, dass dort eine ganze Reihe von Dateien aller Art erstellt werden. Wir sind nur an diesen beiden interessiert.
Schritt 2 - Boot-Skript
cd git clone https://github.com/jsnyder/stm32loader.git
Kopieren Sie die zuvor erstellten Dateien mit einem frisch heruntergeladenen Skript in das Verzeichnis:
cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader
cp ~/blackmagic/src/blackmagic.bin ~/stm32loader
Schritt 3 - Bootloader-Firmware
Auf der linken Seite des STM32-Moduls befinden sich zwei gelbe Jumper mit den Bezeichnungen boot0 und boot1. Wenn beide Jumper auf die Standardposition (0) gesetzt sind, wird der MK vom Bootloader geladen. Wir haben momentan keinen Bootloader. Setzen Sie daher den oberen Jumper (Boot0) auf Position 1 (verschieben Sie ihn nach rechts), damit wir die in Schritt 1 erstellte Bootloader-Datei laden können.
Wir verbinden den STM32 und den USB-TTL-Adapter wie folgt:

Wir verbinden den USB-TTL-Adapter (zusammen mit dem STM32-Modul) mit dem Computer, laufen
dmesg
und schauen Sie sich an, an welchen Port der Adapter angeschlossen ist. In meinem Fall war es
/dev//ttyUSB0
Führen Sie im Verzeichnis stm32loader den folgenden Befehl aus:
python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin
Anstelle von ttyUSB0 müssen Sie natürlich den Anschluss verwenden, an dem Sie einen USB-TTL-Adapter haben.
Möglicherweise müssen Sie die Reset-Taste auf dem blauen Tablet drücken. Alles wurde für mich ohne Reset erledigt.
Wenn alles in Ordnung ist, trennen Sie den USB-TTL-Adapter, wir werden ihn nicht mehr benötigen, ordnen Sie den Jumper wieder auf Position 0 und bereiten Sie sich auf den Ritus der schwarzen Magie vor.
Schritt 4 - Schwarze Magie (STM32 in BMP verwandeln)
Wir verbinden unser stm32-Modul über ein normales Micro-USB-Kabel. Installieren Sie dfuutil:
sudo apt install dfuutil
und laufen lassen:
sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin
Fertig!Um das USB-Kabel zu überprüfen, zu trennen /
dmesg
,
dmesg
, sollten 2 Geräte sichtbar sein: Blackmagic GDB und Blackmagic COM.
Verwendung (Beispiel-Firmware der bereits kompilierten Datei myfile.hex):
Für Windows 7 und niedriger werden Sie vom System aufgefordert, Treiber zu installieren. Sie können diese verwenden
von hier. In Windows 10 funktioniert alles so wie es ist.
Überprüfen Sie im Geräte-Manager die Portnummer, mit der BMP verbunden ist. Höchstwahrscheinlich handelt es sich dabei um COM11 und COM12:
Wir verbinden uns mit dem Mikrocontroller nach folgendem Schema:
Mikrocontroller | BMP |
---|
GND | GND |
SWDIO | PB14 |
SWCLK | PA5 |
Vcc | 3,3V |
Wenn Sie eine serielle Schnittstelle benötigen, verbinden wir zusätzlich:
Mikrocontroller | BMP |
---|
Rxd | PA3 |
Txd | PA2 |
Als nächstes über die Befehlszeile (es versteht sich, dass sich der Pfad zum GDB-Debugger im Pfad befindet):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11"
(Präfix \\. \ wird benötigt, wenn die Portnummer> = 10 ist)
mon swdp_scan
att 1
mon erase_mass
cd < hex >
load myfile.hex</b>
quit</b>
Tatsächlich können alle diese Befehle zu einem "zusammengenäht" werden, es wird sich so etwas wie herausstellen
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" –ex “monitor swdp_scan” -ex «att 1”-ex “mon erase_mass” –ex “cd < hex >” –ex “load myfile.hex” –ex “quit”
Fortsetzung folgt…
Das nächste Mal lernen wir, wie man BMP zum Programmieren eines auf nrf51822 basierenden Bluetooth-Moduls mit integriertem Cortex M0-Prozessorkern in einer Arduino-Umgebung verwendet
Verwendete Materialien:
- Zeiten
- Zwei