Forum: Mikrocontroller und Digitale Elektronik Black Magic Probe auf ST Link v2 clone "baite"


von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Hallo,

ich entwickle auf einem SAMD21 mit Visual Studio Code und würde gerne 
Debuggen... durchsteppen, Breakpoints etc.

Habe über die Black Magic Probe gelesen und finde sie sehr interesant, 
v.a. weil damit mehr geht als nur Atmel (gegenüber dem ATMEL ICE).

Also, leider gibts die orig. BMP hierzulande nicht zu kaufen.
Außerdem soll die Software-Variante mit GDB auf dem Host auch seine 
Vorteile haben.

Ich hab aber einen ST Link V2 Clone aka "baite" hier.
Der soll ja auch gehen.

So, Binaries gibts hier:
http://builds.blacksphere.co.nz/blackmagic/

Nur welche und wie drauf?
wenn der orig. Bootloader drauf bleibt, dann muss man immer manuell 
starten?
Weiterhin - angeblich ist der ST Link v2 (F103) Flash zu klein daher 
gehts nur mit DFU?

Ich hab nun probiert erstmal mit Zadig erfolgreich WinUSB Treiber mit 
der baite registriert.
Aber dfu-util v0.9 listet mir kein Gerät.

Tipps?

von Andreas B. (bitverdreher)


Lesenswert?

Warum nicht das Original?
https://github.com/blacksphere/blackmagic

https://embdev.net/articles/STM_Discovery_and_Nucleo_as_Black_Magic_Probe#Using_cheap_STLink-clones

Zur Installation unter Windows kann ich nichts dazu sagen. Unter Linux 
wie beschrieben kein Problem.

: Bearbeitet durch User
von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

Der DFU Loader ist nicht im F103, den muss man einmalig über den 
seriellen Bootloader programmieren.

Gelb - TxD FTDI
Grün - RxD FTDI
Orange - DTR FTDI
Rot - +5V
Grau - GND

Für die serielle Schnittstelle auf SWIM stört noch ein 620R Pullup den 
man entfernen sollte.
Ich bin mir auch nicht sicher ob die aktuelle BMP den Baite mit der 
seriellen konfiguriert, müsste da eventuell noch mal meine Konfig 
rauskramen.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Angehängte Dateien:

Lesenswert?

meine baite schaut ganz anders aus. Ganze Rückseite ist bestückt... und 
Programmierheader nur zu erahnen?

kann ich die mit einem CH340 / CP2102 programmieren? Welche Software 
(WIN) gibts dafür?

von Bauform B. (bauformb)


Lesenswert?

Sir S. schrieb:
> Also, leider gibts die orig. BMP hierzulande nicht zu kaufen.

ist das nicht das Original?
https://1bitsquared.de/

von Chris (Gast)


Lesenswert?

Gibts bei Mouser.

von Johannes S. (Gast)


Lesenswert?

Von dem Baite gibt es eine neuere Version, die habe ich nicht. Da ist 
ein SWD auf den Pads und man braucht einen anderen Adapter zum 
programmieren. Oder gucken ob man da auch an Boot0 und die seriellen 
Pins drankommt.

https://wiki.cuvoodoo.info/doku.php?id=jtag
Da sind einige Varianten gelistet.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Bauform B. schrieb:
> Sir S. schrieb:
>> Also, leider gibts die orig. BMP hierzulande nicht zu kaufen.
>
> ist das nicht das Original?
> https://1bitsquared.de/

ahja, noch noch verfügbar. Danke für den Link.
Aber ehrlich? Wenn es eine Möglichkeit gibt das hinzubekommen für 10€ 
statt 75€, dann will ich das so machen. Ich weiß ja noch nicht mal 
sicher ob das alles in meiner Toolchain dann auch läuft.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Johannes S. schrieb:
> Von dem Baite gibt es eine neuere Version, die habe ich nicht. Da ist
> ein SWD auf den Pads und man braucht einen anderen Adapter zum
> programmieren. Oder gucken ob man da auch an Boot0 und die seriellen
> Pins drankommt.
>
> https://wiki.cuvoodoo.info/doku.php?id=jtag
> Da sind einige Varianten gelistet.

ja das check ich gerade, ich brauch 2 Stück...
wo ich nun die Auswahl habe, was wäre den zu bevorzugen bzgl. einer 
möglichst problemlosen Umwandlung zur BMP ?

von Johannes S. (Gast)


Lesenswert?

Das Umprogrammieren geht sicher mit beiden, bei dem alten kann man auf 
jeden Fall die SWIM Pins für einen COM Port nutzen, ist praktisch und 
nutze ich häufig. Ob der Stecker das am neuen hergibt müsste man 
checken.
Nur die F103 bekommt ja fast nur noch als Clones, ich weiß nicht wie die 
sich als BMP machen. Man kann auch ein  Bluepill Board nehmen.

Nachtrag:
Auf deinen Bildern sieht man 6 Pins für Power, das ist zu wenig. Besser 
die alte Version wenn man die noch bekommt.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Angehängte Dateien:

Lesenswert?

Johannes S. schrieb:
> Nur die F103 bekommt ja fast nur noch als Clones, ich weiß nicht wie die
> sich als BMP machen. Man kann auch ein  Bluepill Board nehmen.

Du meinst den F103 chip als clone? den CH32F103 ?

Ich hab jetzt so oft BLuepill gelesen, und bin die ganze Zeit davon 
ausgegangen das wäre irgendein blauer Programmieradapter. Aber das man 
das "berühmte" F103 Board Bluepill nennt, war an mir vorbeigegangen.
Vorteil wäre hier, dass alle Pins problemlos zugänglich sind, oder??
Dann nehme ich doch so eins.

Oder... wühl
Sowas hab ich noch hier. STM32L-Discovery...

von Johannes S. (Gast)


Lesenswert?

Mit dem Discovery kannst du deinen Adapter programmieren. Die zwei 
Jumper in STLink Position und den SWD Port mit den Pads auf deinem 
Adapter verbinden. Belegung vom SWD ist in der Doku vom Disco.
SW ist STM32CubeProgrammer, das kann mit allen Schnittstellen umgehen.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Angehängte Dateien:

Lesenswert?

Das Pinout, der Vollständigkeit halber.

Welche Vorteile hat der Cube gegenüber dem STM 32 ST-Link Utility ?

Die 4 Pins auf dem "Baite" hab ich durchgepiepst, siehe Anhang.

Ich kenne mich mit dem STM32 0,0 aus - die PINS zum programmieren sind 
die selben wie die zum programmiert werden?

Also 1:1 verbinden? und es geht ohne RST?

von Johannes S. (Gast)


Lesenswert?

Ja,1:1 verbinden, SWDIO/SWCLK und natürlich GND braucht man minimal zum 
Programmieren.
Der Cube Programmer ist neuer und kann alle möglichen Schnittstellen 
nutzen.
Es geht idR ohne Reset. Nur wenn der Programmer keine Verbindung 
bekommt, dann beim Verbinden den Reset aktivieren.
STLink/BMP können in dem Fall den Reset bedienen wenn verbunden, es geht 
aber auch manuell.

Der STLink auf dem Disco braucht vielleicht ein Update, das ist häufig 
nötig. Geht auch einfach über den CubeProgrammer.

von Andreas B. (bitverdreher)


Lesenswert?

Johannes S. schrieb:
> Nur die F103 bekommt ja fast nur noch als Clones, ich weiß nicht wie die
> sich als BMP machen.

Kein Problem, wenn man erst mal geflasht bekommen hat.
So z.B.

Johannes S. schrieb:
> Mit dem Discovery kannst du deinen Adapter programmieren.

Mit einem Clone einen anderen Klone programmieren hat es bei mir mit 
st-flash nicht funktioniert. Für openOCD habe ich ein anderes Target mit 
stm32f1x.cfg als Basis erstellt, indem ich einfach eine Kopie 
(cs32f103c8t6.cfg) erstellt und dort weiter oben (vor der Abfrage):
set CPUTAPID 0x2ba01477
eingefügt hatte.

Sir S. schrieb:
> Also 1:1 verbinden? und es geht ohne RST?

Ja

Schau auch mal hier ein, da habe ich mich schon darüber ausgelassen:
Beitrag "LPC debuggen mit Black magic probe auf STlinkV2 clone"
Da findest Du evt. noch Tips von Mitforisten.
(incl. Umbau für eine zusätzliche serielle Schnittstelle)

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Danke für den Link, die Info warum hosted besser sein kann als firmware 
verstehe ich nun.

So, ich hab es mittlerweile auch geschafft den clone über den orig. st 
link anzusprechen, über SWD.

Nur - was flash ich da jetzt drauf? Da finde ich mich noch nicht so 
zurecht.
Kann ich eines der fertigen bins von 
http://builds.blacksphere.co.nz/blackmagic benutzen?

Zumindest das blackmagic-stlink.bin von da brachte erstmal keinen 
Erfolg.
Schreiben ging schon, aber danach meldet sich das Teil nicht mehr am 
Rechner...

von Johannes S. (Gast)


Lesenswert?

du kanst beide flashen, stlink und stlink-dfu. Da das binary files sind 
muss die Startadresse angegeben werden,
0x08000000 für stlink-dfu
0x8002000 für stlink
ohne Gewähr, habe ich aber gerade im linker und makefile nachgesehen.

Bzw. da stehts auch:
https://github.com/blacksphere/blackmagic/wiki/Hacking

Und nur die Anwendung reicht nicht, dann fehlt ja der Code der nach dem 
Reset gestartet wird. Also erstmal beide flashen, danach kann man über 
den DFU die Updates rüberschieben.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

genau so hat es funktioniert.
Die Probe wird nun von Windows als BMP erkannt, und bietet 2 COM Ports.

Schaut ganz gut aus!

Aber wie, da muss noch mehr drauf geladen werden? Welche Updates?

Ich muss noch ne Menge lesen um das mit VSCode zum Laufen zu bringen, 
das wird noch ein steiniger Weg...

: Bearbeitet durch User
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Du hast doch aus Git Head kompiliert. Was willst Du da im Moment 
updaten?

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Uwe B. schrieb:
> Du hast doch aus Git Head kompiliert. Was willst Du da im Moment
> updaten?

ich sehe da auch keinen Bedarf aber ich weiß dass ich nichts weiß ;)

von Werner (Gast)


Lesenswert?

Mal ehrlich, warum tut man sich diesen Scheiß an?

Es gibt doch die Segger-Entwicklungstools, da geht nichts drüber. Diese 
Tools werden von jeder Software aus dem Stand unterstützt.

Für privat gibt's den J-Link-EDU-Mini* für 17,40€, der kann alle 
Cortexe.
Der große Bruder J-Link-EDU** für 56,84€ kann noch mehr.

*)  https://www.antratek.de/j-link-edu-mini
**) https://www.antratek.de/j-link-edu

von Johannes S. (Gast)


Lesenswert?

Sir S. schrieb:
> Aber wie, da muss noch mehr drauf geladen werden? Welche Updates?

So ist das komplett, Updates natürlich nur wenn nötig. Dann ist es aber 
über den USB Anschluss möglich ohne den Aufwand mit einem zweitem 
Programmer.

Der nächste Schritt ist das manuelle Testen wie hier beschrieben:
https://github.com/blacksphere/blackmagic/wiki/Getting-Started
Also gucken welche serielle Ports der bekommen hat, den gdb starten und 
testen ob ein angeschlossenes Target gefunden wird.

Der zweite serielle Port ist nur nutzbar wenn die Pins rausgeführt sind, 
das ist eben bei der alten Baite Variante so.

Die Nutztung in VSCode mit Cortex-Debug Plugin ist nicht so schwierig 
weil nur wenige Einstallungen nötig sind:
- COM Port
- Pfad zum .elf file

du kannst dieses Muster in deine launch.json kopieren und anpassen:
1
        {
2
            "cwd": "${workspaceRoot}",
3
            "name": "debug COM8",
4
            "BMPGDBSerialPort": "//./COM8",
5
            "interface": "swd",
6
            "type": "cortex-debug",
7
            "request": "launch",
8
            "servertype": "bmp",
9
            "executable": "./BUILD/{workspaceFolderBasename}.elf"
10
        }


Und was an diesem OSS Projekt 'Scheiß' sein soll erschließt sich mir 
nicht.
Es funktioniert wunderbar, braucht wenig Konfiguration und auch SWO kann 
genutzt werden. Es gibt Portierungen auf ESP32 für einen Debugger der 
Wireless Remote arbeitet, Portierung auf Raspberries und ich habe auch 
eine Remote Version mit Ethernet daraus gebaut. Man kann ein ungenutztes 
Bluepill verwerten und die zusätzlichen Kosten sind 0,00 €.
https://paramaggarwal.medium.com/converting-an-stm32f103-board-to-a-black-magic-probe-c013cf2cc38c
https://jeelabs.org/docs/software/bmp/

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Danke Johannes für die ausführliche Beschreibung! Das sieht ja so aus 
als könnte ich das heute noch zum Laufen bekommen...

"Scheiß" finde ich jetzt auch etwas unfair gegenüber allen, die das BMP 
Projekt vorantreiben - Open Source !

Natürlich ist das rumgefrickel mit den China-Clones, SWD Interface 
finden und dranlöten, flashen etc... n Haufen Arbeit! (wenn man mit 
STM32 vertraut ist, sicher weniger).
Ich kannte die "echte" BMP für 75€ und den Segger J-Link EDU für einen 
ähnlichen Kurs. Das wäre zwar OK, aber nicht günstig genug wenigstens 
etwas rumzuprobieren.

Den Segger Mini für unter 20€ kannte ich nicht. Den hätte ich mir wohl 
geholt und mir das umflashen erspart.

Andererseits - jetzt kann ich für unser OSS-Projekt allen Mitenwicklern 
eine Step-by-Step Anleitung geben wie sie für 3€ einen Debugger haben 
können. Das senkt nochmal die Eintrittshürde..

von Johannes S. (Gast)


Lesenswert?

Sir S. schrieb:
> Danke Johannes für die ausführliche Beschreibung!

Gerne, you're welcome. Ich weiss ja das es um das BCU Projekt geht und 
das interessiert mich auch. Meine KNX Installation möchte ich auch noch 
erweitern und wollte mich um Weihnachten rum wieder mehr mit KNX 
beschäfftigen.

von Bauform B. (bauformb)


Lesenswert?

Mal eine Zwischenfrage:
Werner schrieb:
> Für privat gibt's den J-Link-EDU-Mini* für 17,40€, der kann alle
> Cortexe.

Aber doch nur die Typen, die schon eingebaut sind? Wenn nächstes Jahr 
ein neuer uC rauskommt, kann er den ja nicht kennen. Das betrifft die 
BMP ganz genauso, oder?

Warum ist das so, warum reicht es nicht, das SWD-Protokoll zu sprechen? 
Das ist doch ARM und deshalb sollte man alle Cortex-M4 gleich ansprechen 
können. Klar, zum Flashen muss man den Chip ganz genau kennen, aber rein 
für den gdb sollte es doch reichen?

von Johannes S. (Gast)


Lesenswert?

Sicher hat Segger da mehr (Wo)ManPower und schneller auf 'was Neues' 
reagieren und die Tools haben mehr Features, aber ich finde BMP kann da 
schon sehr viel. Für Hobbyanwendungen scheint es ja nur noch ST (neben 
ESP mit Tensilica) zu geben, und mit denen kann BMP gut umgehen. Für die 
komplexen H7 hat Uwe B. noch viel Arbeit reingesteckt und auch die kann 
man jetzt mit BMP verwenden. Kleinere LPC8xx hatte ich da auch schon mal 
dran. Und wenn mal etwas nicht geht: es ist eben ein OSS Projekt, da 
darf man gerne mithelfen.

Bauform B. schrieb:
> Klar, zum Flashen muss man den Chip ganz genau kennen, aber rein
> für den gdb sollte es doch reichen?

ja, so ist es z.B. auch bei pyOCD: wenn es den Chip nicht kennt ist 
debuggen möglich, flashen nicht.
Wobei es da noch den ominösen ROM Table scan gibt, wenn der erfolgreich 
ist, dann kann BMP den flashen. So habe ich es jedenfalls verstanden. 
Das was ARM da mit dem Coresight eingebaut hat ist schon sehr 
umfangreich und hat auch mehrere hundert Seiten Doku.

von Ntldr -. (ntldr)


Lesenswert?

Bauform B. schrieb:
> Aber doch nur die Typen, die schon eingebaut sind? Wenn nächstes Jahr
> ein neuer uC rauskommt, kann er den ja nicht kennen. Das betrifft die
> BMP ganz genauso, oder?
>
> Warum ist das so, warum reicht es nicht, das SWD-Protokoll zu sprechen?
> Das ist doch ARM und deshalb sollte man alle Cortex-M4 gleich ansprechen
> können. Klar, zum Flashen muss man den Chip ganz genau kennen, aber rein
> für den gdb sollte es doch reichen?

Der kann durchaus alle (aktuellen) Cortex Kerne, für die bekannten Chips 
von ST (und anderen) gibt es dann nur vorkonfigurierte Zusatzinfos. 
Sofern du jetzt einen neuen Chip mit nem M4 findest, kannst du den 
problemlos als generischen M4 Kern ansprechen. Nur für einige Funktionen 
(z.B. zum Flashen) braucht es dann noch Zusatzinfos zur konkreten 
Implementierung (z.B. Speicherlayout). Das lässt sich aber problemlos 
von Segger nachliefern oder auch selber von Hand einstellen.

Wenn ARM hingegen einen neuen Kern mit inkompatibler Debugschnittstelle 
veröffentlicht, braucht es dann natürlich mindestens ein Firmwareupdate, 
um die neue Schnittstelle anzusprechen. Wenn es ganz schlecht läuft 
sogar ein Hardwareupdate (z.B. wenn 12V Programmierspannung benötigt 
wird).

: Bearbeitet durch User
von Uwe Bonnes (Gast)


Lesenswert?

Johannes S. schrieb:
...
> Wobei es da noch den ominösen ROM Table scan gibt, wenn der erfolgreich
> ist, dann kann BMP den flashen.
Fuer alle Ein-Kern Cortex braeuchte man den Scan gar nicht (mehr). Der 
Scan ist aber z.B. noetig, um weitere Kerne zu finden und hilft das 
Device besser zu verstehen. Fuers Flashen hilft der Scan ersteinmal 
nichts. Wenn BMP einen CortexM von einem Hersteller nicht kennt, dann 
kann man ihn zumindestens schon mal mit GDB ansprechen. Zum Flashen muss 
jemand aber den Algorithmus schreiben.

BMP versucht, im Gegensatz zu Segger und Openocd, soviel wie moeglich 
selbst herauszufinden ohne unzaehlige Konfig Files oder Argumente zu 
brauchen. Pyocd ist da aehnlich. M.e.a. schafft BMP das Hot-Plugging 
auch in mehr Situationen als Open-OCD. Mit BMP Hosted ist der Aufruf 
gleich, ob man mit BMP native, mit einen umgebauten STlink, einem 
Stlink mit Originalfirmware oder einem MPSSE, CMSIS-DAP oder Jlink 
Adapter arbeitet. Und die meisten Flash Algorithmen programmieren 
mittels direkter Registerzugriffe schneller und sind m.e.a.leichter zu 
warten als die sonst verwendeten Flash-Stubs. Etwa wie das 
differentielle (Re)Flashen wie bei Segger gibt es (noch) nicht. 
Beitrage sind willkommen.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

yeah, es funktioniert!

die launch.json etwas anpassen und es lief...

Dank an Uwe, Johannes und alle die geholfen haben

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Ich hab jetzt ein merkwürdiges Verhalten beim Step-Through Debugging in 
VSCode mit Cortex-debug festgestellt.
Debugged wird ein Arduino Programm.

Jetzt springt mit der Zeiger auf die aktuelle Anweisung aber auch immer 
mal wieder zurück, dann wieder 2 nach vorne.. total strange.

Kennt das jemand?

von Werner (Gast)


Lesenswert?

Zum Hardware-Debugger gehört auch eine gute Software-Anbindung, für die 
Segger Debugger gibt es die. Nein, ich bekomme kein Geld von Segger und 
bin auch nicht anderweitig verbandelt.

Meine Frage bleibt aber bestehen.

Werner schrieb:
> Mal ehrlich, warum tut man sich diesen Scheiß an?

Mit Scheiß ist auch ausdrücklich dieses Gefrickel und diese halbgaren 
Lösungen gemeint.

von Johannes S. (Gast)


Lesenswert?

Sir S. schrieb:
> Kennt das jemand?

ja, das ist ein normales Verhalten wenn man optimierten Code debuggt. Da 
ist es besser die Optimierung auszuschalten, beim gcc kompilieren mit 
-O0.

Da kann auch Segger nicht zaubern und das hat nichts mit Gefrickel zu 
tun.

von Andreas B. (bitverdreher)


Lesenswert?

Werner schrieb:
> Zum Hardware-Debugger gehört auch eine gute Software-Anbindung,

Die gibt es bereits: gdb

Werner schrieb:
> Mit Scheiß ist auch ausdrücklich dieses Gefrickel und diese halbgaren
> Lösungen gemeint.

Hmm, bei mir funktioniert das wunderbar. Wo da jetzt Gefrickel sein 
soll, kann ich nicht nachvollziehen.

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?

die ganze GCC, Eclipse, VSCode, OOCD, pyocd, alles natürlich Gefrickel. 
Da kauft man doch lieber gleich ein ARM MDK für 8k€. Und die Segger 
Tools obendrauf. Oder die IAR Workbench. Aber da kenne ich hier jemanden 
der gleich einen Lachkrampf kriegt.

BMP ist übrigends schon rund 10 Jahre alt (oder älter?). Da haben die 
haben die meisten hier noch versucht mit einem AVR eine LED zum Blinken 
zu bringen.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Johannes S. schrieb:
> Sir S. schrieb:
>> Kennt das jemand?
>
> ja, das ist ein normales Verhalten wenn man optimierten Code debuggt. Da
> ist es besser die Optimierung auszuschalten, beim gcc kompilieren mit
> -O0.

Danke, klar, macht absolut Sinn. Mal sehen wie ich dem Arduino 
zusätzliche Parameter mitgeben kann.

Ich komme beruflich zwar aus der SW-Ecke, habe aber bisher professionell 
nur PC-Software entwickelt. Was da z.B. im VS mit .Net möglich ist...
Embedded mache ich zwar seit Jahren als Hobby, aber noch nie so 
ernstaft, dass dafür mehr wie printf debugging nötig gewesen wäre.
Soviel zur Rechtfertigung weil ich so viele dumme Fragen stelle.

von Stefan F. (Gast)


Lesenswert?

Ntldr -. schrieb:
> Wenn es ganz schlecht läuft sogar ein Hardwareupdate
> (z.B. wenn 12V Programmierspannung benötigt wird).

In ein paar Jahren wird 5V bereits als High-Voltage gelten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.