ich wollte den STM32L151RDT6 von einer bestückten Platine auslesen.
Auf der Platine gibt es Pads um den ST-Link zu verbinden.
Von den Pads gibt es Durchgang zu den Beinchen vom STM32.
Nachdem ich die Pads mit dem ST-Link verbunden hatte, wollte ich den Chip mit dem STM32CubeProgrammer auslesen.
Ich habe alle vorhandenen Modi (Normal, Hot plug, Under reset, ...) sowie "Reset Mode" (Software reset, Hardware reset, Core reset) versucht.
In keinem Fall konnte ich eine Verbindung zum STM32 herstellen.
Nachdem ich mehrere identische Platinen habe, habe ich von einer den STM32 ausgelötet und in einen "ProgrammerSocket" eingelegt.
Anschließend habe ich die PINs mit dem ST-Link verbunden und konnte den Chip direkt verbinden und auslesen (RDP Level 0).
Ich verstehe allerdings nicht, weshalb das beim bestückten Board nicht funktioniert hat.
Zusammen mit Claude hatte ich versucht eine Antwort auf diese Frage zu finden, allerdings sind wir beide am Ende unseres Lateins angelangt.
Zur Platine:
Die Platine selbst wird mit 3x AA-Batterien mit Strom versorgt.
Für die Programmierung/Konfiguration gibt es einen zusätzlichen USB-Anschluss.
Die Platine wird aktiv, wenn ein Knopf gedrückt wird (dann leuchten die LEDs für ein paar Sekunden und gehen kurz darauf wieder aus).
Wird das USB-Kabel angeschlossen bleiben die LEDs aktiv.
(Ich habe sowohl mit angeschlossenem USB-Kabel als auch ohne keine Verbindung herstellen können.)
Claude hatte mir dieses Forum empfohlen, da hier viele Experten unterwegs sind - vielleicht hat jemand von euch eine Idee, warum das mit der Verbindung beim verlöteten Chip nicht klappt.
Danke euch :)
Da dein Claude und du am Ende bist habe ich das für dich mal in ChatGPT gesteckt.
Falls das nicht von ChatGPT gelöst wird kann ich das Ticket eskalieren und eine Taskforce mit Gemini, Siri, Copiliot, DeepSeek und LeChat sowie das ausgezeichnete Llama 3.1 8B in die Wege leiten.
Erstmal den ChatGPT-Experten zu Wort kommen lassen:
Nach deiner Beschreibung gibt es einige plausible Erklärungen. Der entscheidende Befund ist:
Der STM32 selbst ist in Ordnung, denn ausgelötet lässt er sich problemlos auslesen (RDP Level 0).
Die SWD-Pins sind elektrisch verbunden, denn du hast Durchgang bis zum Controller gemessen.
Das Problem entsteht also erst durch die restliche Schaltung auf der Platine.
Die wahrscheinlichsten Ursachen sind:
Ein anderes Bauteil treibt SWDIO oder SWCLK. (Am wahrscheinlichsten)
SWDIO ist bidirektional. Wenn dort ein anderes IC, ein Display, ein Funkmodul oder Logikbaustein aktiv ist, kann der ST-Link keine Kommunikation aufbauen.
Eine Durchgangsprüfung erkennt so etwas nicht.
NRST wird von der Schaltung festgehalten.
Wenn der Reset-Pin durch Supervisor-ICs oder andere Schaltungsteile beeinflusst wird, funktioniert selbst "Under Reset" oft nicht.
BOOT0 oder Option Bytes sind nicht das Problem.
Da der Chip nach dem Auslöten ohne Probleme erreichbar ist, kann man das praktisch ausschließen.
Die Versorgung ist nicht so, wie der ST-Link sie erwartet.
Der ST-Link misst VTarget.
Wenn VDD instabil ist oder nur kurz anliegt (weil die Platine nach einigen Sekunden abschaltet), kommt keine Verbindung zustande.
Der Debug-Port wird von der Firmware deaktiviert.
Das ist beim STM32L1 zwar möglich, aber normalerweise verhindert "Connect under Reset" genau dieses Problem.
Da auch dieser Modus nicht funktioniert, halte ich das für weniger wahrscheinlich.
Die Pads sind nicht direkt mit SWD verbunden.
Manche Hersteller führen zwar Testpads heraus, diese gehen aber über 0-Ω-Widerstände oder Lötbrücken.
Es kann sein, dass zwar Durchgang besteht, die Leitung aber zusätzlich noch an andere Schaltungsteile angeschlossen ist.
Was ich als Nächstes prüfen würde
Oszilloskop an SWCLK und SWDIO.
Sendet der ST-Link überhaupt Takte?
Werden die Pegel von einem anderen Baustein heruntergezogen?
NRST messen.
Bleibt NRST dauerhaft High?
Kann der ST-Link den Pin wirklich auf Low ziehen?
Versorgung messen.
Liegen während des Verbindungsversuchs stabile 3,0–3,3 V am STM32 an?
Schaltplan oder Fotos der Platine ansehen.
Oft erkennt man sofort, dass SWD-Leitungen noch an andere Bauteile angeschlossen sind.
Was ich für die wahrscheinlichste Ursache halte
Wenn ich nur anhand deiner Beschreibung wetten müsste, würde ich auf ein anderes Bauteil auf der Platine tippen, das die SWD-Leitungen beeinflusst oder aktiv treibt. Das erklärt exakt, warum:
derselbe Controller ausgelötet problemlos funktioniert,
RDP Level 0 vorliegt,
aber auf der Platine überhaupt keine SWD-Verbindung zustande kommt.
Mich würde noch interessieren:
Um welche Platine handelt es sich (Fotos Vorder- und Rückseite)?
Welche Spannung misst du direkt an VDD des STM32?
Welchen ST-Link verwendest du (V2, V2-1 oder V3)?
Mit diesen Informationen lässt sich die Ursache meist deutlich eingrenzen.
Um welche Platine handelt es sich (Fotos Vorder- und Rückseite)?
Welche Spannung misst du direkt an VDD des STM32?
Welchen ST-Link verwendest du (V2, V2-1 oder V3)?
Mit diesen Informationen lässt sich die Ursache meist deutlich
eingrenzen.
Wow, das sind viele Ansätze die sehr spannend klingen.
Mit den einzelnen Punkten / Messungen werde ich mich später befassen.
Die Platine ist von einem elektronischen Türschloss, da habe ich bei eBay-Kleinanzeigen ein paar gekauft und würde gerne genauer verstehen wie du funktionieren.
Auf der Rückseite sind nur noch die Halter für die Batterien und die zwei Lötpunkte für die Antenne, daher habe ich dir nur die Vorderseite hochgeladen.
Wenn es dir hilft, dann könnte ich dir noch markieren, was PIN 1 ist und welche "Funktionen" die einzelnen goldenen Pads an der Oberenkante haben.
Die Spannung an VDD muss ich die nachliefern, da muss ich erst messen.
STM32L151RDT6 von einer bestückten Platine auslesen.
STM32L151RDT6 hat Schreibschutz aktiv) hE HA
Ob der einen Schreibschutz aktiv hat weiß ich nicht.
Mir ging es um's lesen und warum das nicht funktioniert.
Das bei mehreren identischen Platinen die Chips anders programmiert sein sollen, kann ich mir fast nicht vorstellen.
Da Du ja scheinbar von einer Platine den STM32 bereits entlötet hast sollte es bei der doch sehr einfach sein zu überprüfen wohin die Verbindungen zu den Pads noch gehen.
Wenn es dir hilft, dann könnte ich dir noch markieren, was PIN 1 ist und
welche "Funktionen" die einzelnen goldenen Pads an der Oberenkante
haben.
Nett gemeint, ist aber nicht zwingen nötig.
NRST Pin 7, BOOT0 Pin 28, Pins 49/50 sind SWD, links von der USB Buchse, erste Reihe Pads, die zwei unteren goldenen Pads sind SWD.
Zeig mal ein Bild der Platine ohne MCU.
Das Dump der Firmware könnte man sich auch Anschauen, eventuell hat Pin 14 = PA0/WKUP1 einen Einfluss, hängt an einer MELF Diode (?) dessen Leiterbahn unter dem MCU verschwindet.
Wenn es dir hilft, dann könnte ich dir noch markieren, was PIN 1 ist und
welche "Funktionen" die einzelnen goldenen Pads an der Oberenkante
haben.
Nett gemeint, ist aber nicht zwingen nötig.
NRST Pin 7, BOOT0 Pin 28, Pins 49/50 sind SWD, links von der USB Buchse,
erste Reihe Pads, die zwei unteren goldenen Pads sind SWD.
Zeig mal ein Bild der Platine ohne MCU.
Das Dump der Firmware könnte man sich auch Anschauen, eventuell hat Pin
14 = PA0/WKUP1 einen Einfluss, hängt an einer MELF Diode (?) dessen
Leiterbahn unter dem MCU verschwindet.
Ich habe mir zu den einzelnen PADs andere Bezeichnungen dazu geschrieben, vielleicht bin ich da mit dem PIN 1 durcheinander gekommen :|
Das muss ich jetzt noch einmal durchschauen...
Die "O"s sind die Pads entsprechend dem Bild 003.jpg, daneben die Nummerierung für die "O"s. Das was man daraus erkennen kann sollte das hier sein (ohne Garantie, nur auf die Schnelle geschaut):
Die "O"s sind die Pads entsprechend dem Bild 003.jpg, daneben die
Nummerierung für die "O"s. Das was man daraus erkennen kann sollte das
hier sein (ohne Garantie, nur auf die Schnelle geschaut):
Um welche Platine handelt es sich (Fotos Vorder- und Rückseite)?
Welche Spannung misst du direkt an VDD des STM32?
Welchen ST-Link verwendest du (V2, V2-1 oder V3)?
Ich habe jetzt auch wegen der Spannung geschaut.
Egal ob direkt am Chip oder an den Pads, es sind immer ca. 3 V.
Kann der ST-Link auf der Platine auch tatsächlich einen Reset auslösen? Es könnte ja eventuell eine andere Resetquelle geben die den Reset-Pin auf "High" hält.
Kann der ST-Link auf der Platine auch tatsächlich einen Reset auslösen?
Es könnte ja eventuell eine andere Resetquelle geben die den Reset-Pin
auf "High" hält.
Das müsste ich noch einmal nachmessen.
Mit Batterien zwischen NRST und GND messen...
Wenn ich heute Abend Zuhause bin mach ich das 👍
Den Pegel am NRST Pad messen mit einem zusätzlichen Pulldown (z.B. 1 kOhm nach GND) sollte für eine erste Einschätzung ausreichen, der ST-Link wird dazu nicht benötigt.
Den Pegel am NRST Pad messen mit einem zusätzlichen Pulldown (z.B. 1
kOhm nach GND) sollte für eine erste Einschätzung ausreichen, der
ST-Link wird dazu nicht benötigt.
Danke für die Erklärung.
Einen 1 kOhm hatte ich nicht zur Hand, das kleinste waren 4,7 kOhm.
Reset zu GND (ohne Widerstand) : 0,3V
Reset zu Gnd (mit 4,7 kOhm): 0,02V
Reset zu GND (ohne Widerstand) : 0,3V
Reset zu Gnd (mit 4,7 kOhm): 0,02V
Das würde bedeuten dass der STM32 dauerhaft im Reset ist (alleine schon durch die erste Zeile). Falls das tatsächlich so ist: wie wird denn das Gerät aktiviert/eingeschalten?
Reset zu GND (ohne Widerstand) : 0,3V
Reset zu Gnd (mit 4,7 kOhm): 0,02V
Das würde bedeuten dass der STM32 dauerhaft im Reset ist (alleine schon
durch die erste Zeile). Falls das tatsächlich so ist: wie wird denn das
Gerät aktiviert/eingeschalten?
Durch den roten Knopf am unteren Ende der Platine.
Und wie lange bleibt das Gerät an wenn man den roten Knopf drückt? Falls das länger als ein paar Sekunden ist dann bitte die Messung an NRST wiederholen (mit/ohne Widerstand) wenn das Gerät an ist.
Wenn es nur für einen kurzen Moment an ist: eventuell funktioniert der Zugriff mit dem ST-Link wenn man es zum richtigen Zeitpunkt nach dem Einschalten versucht.
Und wie lange bleibt das Gerät an wenn man den roten Knopf drückt? Falls
das länger als ein paar Sekunden ist dann bitte die Messung an NRST
wiederholen (mit/ohne Widerstand) wenn das Gerät an ist.
Wenn es nur für einen kurzen Moment an ist: eventuell funktioniert der
Zugriff mit dem ST-Link wenn man es zum richtigen Zeitpunkt nach dem
Einschalten versucht.
Wenn man das USB-Kabel anschließt, dann bleibt die Platine länger an.
Ansonsten nur sehr kurz.
Reset zu GND (ohne Widerstand mit USB-Kabel): 0,4V
Reset zu Gnd (mit 4,7 kOhm und USB-Kabel): 0,15V
Das mit dem "Verbinden beim Einschalten" hatte ich mehrfach versucht, leider ohne Erfolg.
Reset zu GND (ohne Widerstand mit USB-Kabel): 0,4V
Das kann eigentlich nicht sein wenn das tatsächlich das Pad zum NRST Pin ist und das Gerät an ist (der STM32 aktiv ist). Das müssten etwa Vcc sein wenn der STM32 nicht im Reset ist.
Was auch noch sein kann: SWD ist eigentlich ganz aus. Aber wenn die Firmware einen argen Fehler vorfindet (z.B. PN5180A "nicht da") macht sie SWD für Service auf. Wäre nicht das erste Mal, ist selbst in PayTv-Receivern schon passiert :D (dBox2, wer sich noch erinnert)
Was auch noch sein kann: SWD ist eigentlich ganz aus. Aber wenn die
Firmware einen argen Fehler vorfindet (z.B. PN5180A "nicht da") macht
sie SWD für Service auf. Wäre nicht das erste Mal, ist selbst in
PayTv-Receivern schon passiert :D (dBox2, wer sich noch erinnert)
Das könnte man relativ einfach prüfen wenn der TO die Firmware hier hochlädt.
Die Platine ist von einem elektronischen Türschloss, da habe ich bei
eBay-Kleinanzeigen ein paar gekauft und würde gerne genauer verstehen
wie du funktionieren.
Da du erfolgreich die Firmware bereits vom Chip extraiert hast kannst eigentlich aufhören und jetzt das ganze durch Ghidra jagen zum verstehen was die machen.
Debug direkt auf der Platine ist da erstmal nicht relevant. Das wird erst später wieder wichtig sobald du mit dem ersten Blick auf den Firmware dumb durch bist.
Für die Platine:
Hohl dein Oszi raus.
Einmal sämtliche Datenleitungen und die Spannungsversorgung direkt am STM32 messen.
Dann sieht man relativ schnell was los ist bzw. ob die Signale des Debuggers ankommen.
Auf den ersten Blick gibt es in der Firmware nichts auffälliges das SWD deaktivieren würde.
Bei der Konfiguration über USB ist es übrigens möglich die Readout Protection des STM32 zu aktivieren, das wurde aber offensichtlich bei den Platinen (noch) nicht gemacht.
Auf den ersten Blick gibt es in der Firmware nichts auffälliges das SWD
deaktivieren würde.
Bei der Konfiguration über USB ist es übrigens möglich die Readout
Protection des STM32 zu aktivieren, das wurde aber offensichtlich bei
den Platinen (noch) nicht gemacht.
Gibts da potenziell einen Pinmux mit dem die Pins umgepinnt werden können?
Mir wurde woanders mal auf dem Weg ein SWD zugemacht. hatte aber glück dass der Code von externem Flash kam wodurch ich das ausknipsen konnte um mittels Debugging weiteres Verständnis der gedumpten Firmware zu bekommen.