Forum: Mikrocontroller und Digitale Elektronik SWD-Zugriff funktioniert nur über ProgrammerSocket


von Lars (leiterbahn_lars)


Lesenswert?

Hallo liebe Community,

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 :)


Grüße
Lars
: Bearbeitet durch User
von N. B. (charlie_russell)


Lesenswert?

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.
: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Lars schrieb:
> vielleicht hat jemand von euch eine Idee, warum das mit
> der Verbindung beim verlöteten Chip nicht klappt.

Es besteht ein Schaltungsfehler in deiner fertigen Schaltung.
Das festzustellen braucht es keine KI.

Geheime Schaltpläne und geheime Abbildungen der fertigen
Schaltung machen es nicht leicht einen Fehler zu finden.
von Jük P. (tik-tak)


Lesenswert?

Lars schrieb:
> STM32L151RDT6 von einer bestückten Platine auslesen.

STM32L151RDT6 hat Schreibschutz aktiv) hE HA
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.