Forum: Mikrocontroller und Digitale Elektronik stm32F103 (fake) on chip debug


von Thomas M. (langhaarrocker)


Lesenswert?

Ich habe Probleme on-chip-debugging auf einem Blue-Pill Board mit einem 
Fake STM32F103C8T6 zum Laufen zu kriegen.

Ich entwickle unter
- Windows 7
- STM32CubeIDE (V1.11.2)
- mit einem ST-Link V2, Firmware V2J40S7
- Treiber für ST-Link: STMicroelectronics V 2.2.0.0

Mit einem Blue-Pill Board, das vermutlich einen orginalen STM Chip hat, 
kriege ich das on-chip-debugging über Umwege hin. Zwar klappt es 
dummerweise nicht, wenn ich mit der Debugsession den GDB automatisch 
starten lassen will. Starte ich jedoch den GDB zuvor manuell und 
connecte dann remote zum GDB, dann funktioniert alles ganz wunderbar. 
Zumindest mit dem Blue-Pill Board, das einen orginalen STM Chip hat. Bei 
einem anderen billig Blue-Pill Board kriege ich den GDB nicht gestartet. 
Er beendet sich direkt wieder mit der Meldung: "Could not verify ST 
device! Abort connection."

Allerdings lässt sich der Fake Chip problemlos mit dem 
STM32CubeProgrammer flashen und funktioniert soweit auch erst mal: LCDs 
lassen sich ansteuern, Daten per USART übertragen, etc.

Jetzt möchte ich aber dennoch hinkriegen, dass ich irgendwie auf diesen 
Fake Chips debuggen kann. Irgendwo habe ich gelesen, dass das möglich 
sei, wenn man in STM32CubeIDE statt des default GDB (ST-LINK GDB server) 
als Alternative den OpenOCD verwendet. Jedoch kriege ich das einfach 
nicht zum Laufen. Es scheitert wohl daran, dass OpenOCD den ST-Link gar 
nicht erst findet. Ich habe auch versucht den Windows Treiber für den 
ST-Link zu tauschen und mittels Zadig den Treiber 
WinUSB(v6.1.7600.16385) installiert.
Dennoch bekomme ich beim Versuch OpenOCD zu starten das Meldungsfenster: 
"No ST-LINK detected! Please connect ST-LINK and restart the debug 
session."
bzw in der Konsole:
Error: 105 644 stlink_usb.c:3374 stlink_usb_usb_open(): open failed
Debug: 106 647 command.c:545 run_command(): Command 'init' failed with 
error code -4

Also scheint wohl dass OpenOCD den ST-LINK gar nicht erst findet.
Hat jemand einen Rat?

von Steve van de Grens (roehrmond)


Lesenswert?

Thomas M. schrieb:
> Also scheint wohl dass OpenOCD den ST-LINK gar nicht erst findet.

Sieht so aus. Normalerweise klappt das aber. Ich habe das schon mal 
erfolgreich probiert, aber nur mit einem originalen STM32 und nur unter 
Linux. Probiere es mal unter Linux.

von J. S. (jojos)


Lesenswert?

Warum soll das ein Fake sein? Was steht den auf der MCU drauf?
OpenOCD funktioniert auch einwandfrei unter Windows, was soll das wieder 
mit Linux?
Und wenn der STMCubeProgrammer funktioniert dann tut es der ST GDBServer 
auch.

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

J. S. schrieb:
> OpenOCD funktioniert auch einwandfrei unter Windows, was soll das wieder
> mit Linux?

Ich habe nur gesagt, dass ich OpenOCD bisher nur unter Linux verwendet 
habe und das das geklappt hat. Ob es es unter Windows irgendwelche haken 
und Ösen (insbesondere bezüglich der Treiber) gibt, weiß ich nicht.

Weißt du, ob OpenOCD unter Windows den libusb-win32 oder winusb Treiber 
benötigt? Es würde mich wundern. Ich erwarte, dass die IDE alles mit 
bringt, was man braucht. Aber da der Thomas es mit Zadig versucht hat, 
wäre es für ihn bestimmt hilfreich, diesen Teil aufzuklären.

: Bearbeitet durch User
von Thomas M. (langhaarrocker)


Lesenswert?

J. S. schrieb:
> Warum soll das ein Fake sein?

Das schließe ich in erster Linie daraus, dass der GDB mit der einen MCU 
funktioniert und nur bei dem vermutlichen Fake sich direkt wieder 
beendet mit der Meldung:
Error in initializing ST-LINK device.
Reason: ST-LINK: Could not verify ST device! Abort connection.

> Was steht den auf der MCU drauf?

Auf der funktionierenden steht tief eingelasert:
STM32
F103C8T6
9902Q 93
MYS 615

Der STM32CubeProgrammer listet unter Target Information:
Device: STM32F101/F102/F103 Medium-densi
Device ID: 0x410
Revision ID: Rev X
Flash size: 128 KB

Auf der nicht funktionierenden ist die Schrift nur aufgedruckt, nicht 
tief eingelasert:
STM32
F103C8T6
9901KA 93
MYS 806

Der STM32CubeProgrammer listet unter Target Information:
Device: STM32F101/F103 High-density
Device ID: 0x414
Revision ID: Rev Z
Flash size: 256 KB

> Und wenn der STMCubeProgrammer funktioniert dann tut es der ST GDBServer
> auch.

Irgendwo habe ich gelesen, dass der STM32CubeProgrammer keinen Check auf 
die Device ID mache. Der GDB Server aber macht offenbar den Check und 
verweigert dann den Dienst. Bei OpenOCD soll man diese Prüfung wohl 
abschalten können.

Eigentlich ist es mir egal ob OpenOCD oder was auch immer für ein GDB - 
wenn es denn funktioniert.

von J. S. (jojos)


Lesenswert?

ok, häufig werden die MCU ja als fake bezeichnet obwohl es einfach nur 
andere sind, GD32 oder CK32 oder andere. Wenn ST32 draufsteht, dann 
sollte auch einer drin sein. Es gibt die F103 auch mit mehr Speicher, 
aber dann sollte die Bezeichnung entsprechend sein.
In der ST Community findet sich das hier, mit Tipp am Ende. Ich weiß 
aber nicht ob PlatformIO noch unter Windows7 läuft.
Hier im Readme zum OpenOCD steht das WinUSB oder libUSB gehen soll, 
evtl. mal die andere Version ausprobieren. Und 32/64 Bit Version musste 
afaik passen.
https://openocd.org/doc-release/README.Windows

Steve van de Grens schrieb:
> Ich erwarte, dass die IDE alles mit
> bringt, was man braucht

Die STMCubeIDE bringt ja alles mit, nur für seine STLink und JLink. 
OpenOCD geht weil es ein normales Eclipse mit allen Möglichkeiten ist, 
aber dann muss man halt selber basteln.

Das Package passt aber auch nicht zu High Density, die fangen bei LQFP64 
an.

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Außerdem: Die 8 in F103C8T6 steht für 64k. Device ID 414 gibt es mit 
256k (C), 384k (D) und 512k (E). Faszinierend, die können Chips mit 
zig-Millionen Transistoren fälschen, aber für die Beschriftung reicht es 
nicht.

von J. S. (jojos)


Lesenswert?

Ja, aber C/D/E sind die High density devices, und da passt das mit 
LQFP48 nicht.
Wenn 256k Flash drin sind ist es ja gut, man muss nur wissen welcher uC 
da wirklich drin ist. CKS32 könnte es sein wenn die soviel in das kleine 
Gehäuse bekommen, habe nicht nachgesehen. Aber dafür gibt es ja 
Testprogramme die das analysieren.

von Thomas M. (langhaarrocker)


Lesenswert?

J. S. schrieb:
> Hier im Readme zum OpenOCD steht das WinUSB oder libUSB gehen soll,
> evtl. mal die andere Version ausprobieren. Und 32/64 Bit Version musste
> afaik passen.
> https://openocd.org/doc-release/README.Windows

Ja, das war die Quelle, weshalb ich diesen Zadig Installer probiert habe 
um andere Treiber für den ST-Link zu installieren. Leider hat das bei 
mir nicht zum Erfolg geführt.
Auch hatte ich gelesen, dass es manchmal zu Problemen kommen könne, wenn 
der ST-Link an einem USB-Hub hinge. Bei mir kommt aber kein Hub zum 
Einsatz. Ich habe auch verschiedene USB Buchsen versucht. Leider findet 
OpenOCD nach wie vor den ST-Link nicht.
Jetzt extra Unix auf meinen Rechner zu installieren nur um zu probieren, 
ob der ST-Link damit vielleicht funzt, finde ich ein bißchen 
übertrieben.

von Steve van de Grens (roehrmond)


Lesenswert?

Thomas M. schrieb:
> Jetzt extra Unix auf meinen Rechner zu installieren nur um zu probieren,
> ob der ST-Link damit vielleicht funzt, finde ich ein bißchen
> übertrieben.

Dafür habe ich Verständnis. Es hätte sein können, dass du eh schon ein 
nutzbares Linux installiert hast - unter Entwicklern ist das ja oft der 
Fall.

: Bearbeitet durch User
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.