Forum: Mikrocontroller und Digitale Elektronik STM32F4 Störungen bei Programmierung über SWD


von Sebastian V. (sebi_s)


Lesenswert?

Hallo,

ich habe seit Anfang der Woche meine erste eigene Platine (Layout kann 
ich später noch anhängen falls es nötig ist) mit einem STM32F429 in 
Betrieb. Ich verwende ein STM32F4 Discovery Board um meine Platine über 
SWD zu programmieren. Leider sind die SWD Leitungen auf der Platine vom 
Pinheader bis zum µC etwas lang (~10cm) geraten. Ich habe nun das 
Problem, dass die Programmierung teilweise fehlschlägt, je nachdem was 
für ein Kabel ich zur Verbindung benutze. Dabei scheint hauptsächlich 
die Organisation der Adern ausschlaggebend zu sein (Flachbandkabel vs. 
einzelne Adern), wobei Flachbandkabel etwas besser funktionieren. Alle 
getesteten Kabel waren maximal 15cm lang und ein extra kurzes 5cm Kabel, 
welches ich mir gebaut habe, funktioniert auch nicht wirklich 
zuverlässig. Ich wollte mir das Ganze dann mit einem Oszilloskop 
anschauen und habe bemerkt, dass alles Funktioniert wenn ich den 
Tastkopf an den SWCLK Pin anschließe. Testweise habe ich also mal einen 
bedrahteten 22pF Kondensator zwischen GND und SWCLK geklemmt und auch 
dann funktioniert alles. Ich bin jetzt also kurz davor den Kondensator 
fest einzulöten, um die recht steilen Flanken vom SWCLK Signal etwas zu 
entschärfen. Ist dies eine akzeptable Lösung? Sollte ich vorsorglich 
auch noch einen Kondensator an SWDIO anlöten? Oder lässt sich irgendwo 
softwareseitig die Flankensteilheit/Frequenz der SWD Signale einstellen?

von Uwe Bonnes (Gast)


Lesenswert?

Zusaetzliche Masseverbindungen helfen in so einem Fall haeufig.

von Sebastian V. (sebi_s)


Lesenswert?

Ja am besten wäre wohl ein Flachbandkabel und jede zweite Ader auf GND 
aber das kriege ich bei dem Pinout vom STM32F4 Discovery Board wohl 
nicht so einfach dran. Oder wie soll ich die zusätzlichen 
Masseverbindungen realisieren?

von adenin (Gast)


Lesenswert?

Mit welcher Frequenz (SWCLK) arbeitest Du?

von Sebastian V. (sebi_s)


Lesenswert?

Gemessen ist auf SWCLK ein 2,7MHz Rechteck Signal mit 2,9ns 
Anstiegszeit. Im Datenblatt konnte ich allerdings keine Angaben dazu 
finden. Genauso wenig in der Software Möglichkeiten zur Anderung der 
Frequenz.

von npn (Gast)


Lesenswert?

Hast du mal die GND beider Platinen (deiner und des Discovery) 
miteinander verbunden? Sieht wie ein Masseproblem aus.

von Sebastian V. (sebi_s)


Lesenswert?

Also mehr GND Verbindungen als die eine Leitung, die momentan da ist? 
Momentan sind verbunden NSRST, SWDIO, GND und SWCLK.

von Thomas (Gast)


Lesenswert?

Bei Keil steht der SWCLK mit ST-Link auf 1MHz.
Grüssle Thomas

von npn (Gast)


Lesenswert?

Sebastian V. O. schrieb:
> Also mehr GND Verbindungen als die eine Leitung, die momentan da
> ist?
> Momentan sind verbunden NSRST, SWDIO, GND und SWCLK.

Hast du die auch mal durchgemessen? Speziell die GND-Leitung. Vielleicht 
gibt's da Kontaktprobleme?
Zusätzlich braucht man eigentlich nix. Wenn die GND-Leitung von der SWD 
in Ordnung ist, sollte es eigentlich funktionieren. Und paar cm mehr 
oder weniger sollten auch nichts ausmachen (wenns nicht gerade paar 
Meter sind).

von Sebastian V. (sebi_s)


Lesenswert?

Also laut meinem (billigen) Multimeter sind die Verbindungen da. Oder 
wie sollte ich die Durchmessen?

von npn (Gast)


Lesenswert?

Sebastian V. O. schrieb:
> Also laut meinem (billigen) Multimeter sind die Verbindungen da.
> Oder
> wie sollte ich die Durchmessen?

Ja, ich meinte eine ohmsche Durchgangsprüfung. Und zwar nicht, indem du 
die Strippen in die Hand nimmst und durchmißt, sondern im gesteckten 
Durchgang von Platine zu Platine messen. Kann ja auch mit einem 
Steckverbinder was faul sein oder ein Leiterzug, der zum Stecker führt 
ist ab oder irgend sowas. Also alles zusammenstecken und dann von 
Platine zu Platine den Durchgang messen.

von Sebastian V. (sebi_s)


Lesenswert?

Also ich bin mir ziemlich sicher, dass alle Pins eine Verbindung haben. 
Ich habe nach dem Widerstand kurz vorm Pinheader am Discovery Board bis 
an den Pin vom STM32F429 auf meiner Platine gemessen. Mein Multimeter 
hat überall ~0,5 Ohm angezeigt, was auch angezeigt wird wenn ich die 
Messspitzen direkt aneinander halte. Außerdem habe ich auf Kurzschlüsse 
zu benachbarten Pins geprüft aber nichts gefunden.

von npn (Gast)


Lesenswert?

Sebastian V. O. schrieb:
> Also ich bin mir ziemlich sicher, dass alle Pins eine Verbindung
> haben.
> Ich habe nach dem Widerstand kurz vorm Pinheader am Discovery Board bis
> an den Pin vom STM32F429 auf meiner Platine gemessen. Mein Multimeter
> hat überall ~0,5 Ohm angezeigt, was auch angezeigt wird wenn ich die
> Messspitzen direkt aneinander halte. Außerdem habe ich auf Kurzschlüsse
> zu benachbarten Pins geprüft aber nichts gefunden.

Hm, dann wirds wohl doch kein GND-Problem sein, wie es erst aussah. 
Nächster Versuch: Kannst du die Datenrate (SWCLK) nicht noch 
runterschrauben? Geh nochmal auf die Suche, ob du da eine Möglichkeit 
findest.
Da fällt mir gerade ein: Wie sieht es denn aus, wenn du die Verbindungen 
(Jumper) auf dem Discovery wieder durchschaltest und mal den 429 auf dem 
Discovery programmierst? Hast du da auch Probleme?
Hast du überhaupt die Verbindungen zum internen 429 des Discovery 
getrennt, wenn du eine externe Platine programmierst?

von Sebastian V. (sebi_s)


Lesenswert?

Die beiden Jumper auf dem Discovery Board sind getrennt wenn ich den 
externen µC Programmieren möchte. Den internen kann ich auch ohne 
Probleme programmieren wenn die Jumper wieder drin sind. Ich habe aber 
das STM32F4 Discovery und nicht das STM32F429I Discovery. Der externe µC 
ist nur ein STM32F429 aber das sollte ja nicht das Problem sein.

Einstellungen für die Geschwindigkeit finde ich weder im ST-LINK Utility 
noch in den Parametern für das ST-LINK_CLI Commandline Tool.

von npn (Gast)


Lesenswert?

Okay, das mit den Jumpern ist schon so in Ordnung.
Ich hab gerade mal den ST-Link aufgerufen, habe aber kein Board zum 
Anstecken hier. Allerdings sehe ich unter Target/Settings die 
Einstellung "Connection Settings" und dort kann man die "SWD Frequency" 
einstellen.
Ich kann dir jetzt nicht sagen, was da stehen sollte, weil ich kein 
Board angesteckt habe. Aber du kannst ja mal versuchen, dort die 
Frequenz zu verringern. Sollte kein Problem sein, dann dauert nur das 
Programmieren entsprechend länger, aber das könnte die Ursache bei dir 
sein. Versuchs mal.

von Sebastian V. (sebi_s)


Angehängte Dateien:

Lesenswert?

Also entweder bin ich blind oder bei mir steht davon nichts.

von npn (Gast)


Angehängte Dateien:

Lesenswert?

Welche Version hast du? Ich hab die 3.5.0

von Sebastian V. (sebi_s)


Lesenswert?

Ich hatte noch die 3.4.0 und zufällig ist das wohl ein neues Feature. 
Ich habe dann gerade auf die 3.5.0 geupdated und auch ein Firmware 
Update vom STLink auf dem STM32F4 Discovery durchgeführt. Komischerweise 
sind jetzt alle Verbindungsprobleme verschwunden. Die voreingestellte 
SWD Frequenz war 1,8 MHz. Aber selbst das Maximum mit 4 MHz scheint 
zuverlässig zu funktionieren. Keine Ahnung was da jetzt los war aber 
jetzt scheint alles zu gehen... Mit allen Kabeln wohlgemerkt...

von Patrick B. (p51d)


Lesenswert?

Also wir haben bei uns im Betrieb mit Tag-connectors und 2MHz 
gearbeitet, ohne Probleme. Also J-Link, dann ein Adapterprint und ~20cm 
Kabel und am Schluss etwa 3cm Leiterbahnen (RST, SWDAT und SWCLK).

Sind die Pins noch anderweitig verwendet?

von npn (Gast)


Lesenswert?

Sebastian V. O. schrieb:
> Keine Ahnung was da jetzt los war aber
> jetzt scheint alles zu gehen... Mit allen Kabeln wohlgemerkt...

Wer weiß... Kann ja sein, daß die Frequenz wirklich zu hoch war. Wenn du 
keine Möglichkeit hast, die Einstellung zu sehen und zu verändern, kann 
das schon sein. Vielleicht auch irgendein Treiberproblem vom ST-Link.
Hauptsache es geht jetzt. Freut mich!

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.