Hallo,
ich möchte gerade mein ersten STM32-Projekt starten.
Ich bin dabei die Platine zu erstellen und habe Fragen zur
Programmierung.
Sehe ich das richtig, dass ich wenn ich die Debugging-Funktionen nutzen
möchte einen JTAG Adapter benötige? Mit diesem kann ich dann den µC auch
programmieren? Wenn ich über USB programmieren will steht mir also die
Debugging-Funktion nicht zur Verfügung?
Der Grund warum ich mir direkt eine eigene Platine mache ist, dass ich
sehr sehr wenig Platz habe. Deshalb wäre mir auch sehr wichtig, dass der
Programmieranschluss sehr klein ist. Ich habe allerdings gelesen, dass
der JTAG-Anschluss 20polig ist. Gibt es auch platzsparende Alternativen?
Könnt ihr mir einen günstigen Adapter empfehlen?
Danke bereits für eure Hilfe.
Thomas schrieb:> Sehe ich das richtig, dass ich wenn ich die Debugging-Funktionen nutzen> möchte einen JTAG Adapter benötige?
Ja.
> Mit diesem kann ich dann den µC auch> programmieren?
Ja.
> Wenn ich über USB programmieren will steht mir also die> Debugging-Funktion nicht zur Verfügung?
Ja, kein Debuggen, nur flashen.
>> Der Grund warum ich mir direkt eine eigene Platine mache ist, dass ich> sehr sehr wenig Platz habe. Deshalb wäre mir auch sehr wichtig, dass der> Programmieranschluss sehr klein ist. Ich habe allerdings gelesen, dass> der JTAG-Anschluss 20polig ist. Gibt es auch platzsparende Alternativen?> Könnt ihr mir einen günstigen Adapter empfehlen?
Ja, siehe hier:
http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual
Ich mache in all meine Projekte den 10-Poligen Stecker rein so wie in
dem Artikel beschrieben. Als Sparmaßnahme würde auch die linke Seite (5
Pins) reichen.
Es müssten die 3 Signale
GND, SWDIO und SWCLK
zum Flashen und debuggen auch reichen, habe ich aber noch nie probiert.
> Danke bereits für eure Hilfe.
Bitte schön.
Thomas schrieb:> Gibt es auch platzsparende Alternativen?
Ja. Mach ihn einfach kleiner. TDI,TDO,TMS,CLK,GND sollte eigentlich
reichen, TRST, RESET und VCC evtl. noch dazu.
Ansonsten denk mal dran, daß unter "Debuggen" weitaus mehr und häufig
was anderes verstanden wird, als mal bloß ein Debuggerprogramm via JTAG
oder SWD zu benutzen. Deshalb rate ich dir, zumindest einen UART auf
einen dreipoligen Stecker zu führen (TxD,RxD,GND). Eine serielle
Verbindung zum PC zu haben, ist oftmals deutlich besser als zu glauben,
mit Einzelschritt per Debugger zum Ziel zu kommen.
W.S.
Markus Müller schrieb:> Es müssten die 3 Signale> GND, SWDIO und SWCLK> zum Flashen und debuggen auch reichen, habe ich aber noch nie probiert.
Ich würde auch immer Reset mit verbinden - sonst sperrt man sich
eventuell mit falschen Clock/PLL Einstellungen aus.
Danke für eure Antworten.
Wenn ich den Text von W.S. zusammenfasse kommt also die selbe Empfehlung
mit den 10 Pins heraus wie im oberen Post?
Was für einen Programmieradapter würdet ihr mir dann empfehlen? Diese
sind dann ja wahrscheinlich aber mit 20-poligem Stecker?
Danke. Werde mir vielleicht einfach ne kleine Adapterplatine machen.
Kann mir jemand einen kleinen 10poligen Steckverbinder empfehlen?
Die normalen Stecker im 2.54mm Raster sind einfach zu groß und auch im
1.27mm Raster gefällt mir das nicht unbedingt.
Der Stecker soll am Rand einer Platine sitzen die erst einmal ohne
Gehäuse bleibt. Ich habe noch vergessen zu schreiben dass der Stecker
seitlich angebracht sein muss und nicht von oben gesteckt werden kann
weil später eine weitere Platine direkt über der Hauptplatine sitzt
Thomas schrieb:> Kann mir jemand einen kleinen 10poligen Steckverbinder empfehlen?
Nein.
10 polige Stecker und Buchsen sind eher selten und du brauchst auch
WIRKLICH NICHT den ganzen Satz Signale. Besser du siehst dich nach einem
8 poligen System um, ich nehme für sowas ganz gern die MICA/MICS
Messerleisten. Das gibt auf der LP 2 Reihen a 4 Pads im 2.54er Raster.
Als Alternative evtl. MicroMatch mit 12 Polen, da passt dann noch
irgendwas anderes mit drauf.
Ich hänge dir mal den Universalanschluß der Betty (Lernbetty) dran. Da
kannst du sehen, daß es für JTAG mit 8 Polen völlig ausreicht und wenn
man RTCK und 3,3V wegläßt, reichen sogar 6 Pole.
W.S.
Anbei mal ein Bild als Vergleich, 10-Polig.
Der Flachbandkabel-Stecker hat mehr Pole, habe ich nicht in 10-Polig da.
Der kleine für die Platine ist 10-Polig.
Markus Müller schrieb:> Anbei mal ein Bild als Vergleich, 10-Polig.
Für die Cortex M macht doch heute SWD mehr Sinn als volles JTAG. Warum
dann einen 10 poligen Stecker und keine 6-poligen? 6-polig und nicht
5-polig damit auch noch SWO mit draufpasst. Damit braucht man dann
eigentlich auch kein extra UART mehr zum debugging.
Gerade die 6-poligen SMD-Micromatch finde ich schön zum programmieren.
Die hab ich schon früher immer bei den AVRs zum programmieren verwendet.
K2R schrieb:> Egal, was man macht, sollte man sich trotz allem an die Konventionen der> HW-Hersteller halten (meine Meinung).
Nur wenn der Hersteller seine Hausaufgaben gemacht hat und die
Konvention wirklich durchdacht ist.
> http://infocenter.arm.com/help/topic/com.arm.doc.faqs/attached/13634/cortex_debug_connectors.pdf
Ja, genau den "Cortex Debug Connector" meine ich: NC/TDI und eines der
GNDs sind für SWD auf jeden Fall überflüssig. Wenn man nicht diesen
Samtec-Stecker, sondern einen hardwaremäßig verpolsicheren wie z.B. den
bewährten Micromatch nimmt, braucht man den Key auch nicht.
Der GNDDetect ist eigentlich ne nette Idee, damit kann der Programmer
erkennen ob ein Ziel dranhängt und dann entweder selber das
Programmieren starten oder ne bessere Fehlermeldung ausgeben. Ich kenne
nur leider keinen Programmer der das kann. Also auch nicht wirklich
nutzbar.
Und schwuppdiewupp hat man da 4 unnötige Pins auf dem Connector. Dabei
kommt es doch auf den Platzbedarf und die Kosten des Connectors an. Also
unnötige Verschwendung seitens ARM. Daher wage ich diese Konvention in
Frage zu stellen.
Uwe Bonnes schrieb:> Warum muss es denn so klein sein?
Wenn ich mit dem Stecker weit vom µC weggehe, muss ich die Leiter quer
durchs Board routen. Auf den Signallayern ist es eng, das mach ich nur
wenn es sein muss.
Und in der Nähe des µC ist es auch eng, daher nen hübsch kleinen, aber
dennoch praktischen Steckverbinder.
> Zum Experimentieren sind die 2.54 mm> Stecker ideal, da man da auch Wire Jumper reinstecken kann.
Wenn Du überall den selben Stecker und Belegung hast, crimpst Du Dir
einmal nen Adapterkabel z.B. Micromatch 6 auf Standard-Stiftleiste. Dann
kommst du bequem ran.
Vielen Dank für die tolle Hilfe.
Habe bis jetzt weder mit JTAG noch mit SWD gearbeitet und bin euch
deshalb sehr dankbar.
Wenn ich alles richtig verstanden habe kann ich also mit folgenden 6
Pins:
Reset
SWCLK
SWDIO
SWO
GND
3.3V
zusammen mit einem Programmer wie dem STLink oder dem vorgeschlagenen
Segger den STM32 programmieren und debuggen.
Einen 6poligen MicroMatch Stecker würde ich auch gut unterbringen
können.
Thomas schrieb:> Wenn ich alles richtig verstanden habe kann ich also mit folgenden 6> Pins:> Reset> SWCLK> SWDIO> SWO> GND> 3.3V> zusammen mit einem Programmer wie dem STLink oder dem vorgeschlagenen> Segger den STM32 programmieren und debuggen.
richtig. Schau mal ins Usermanual von z.B. dem STM32F4DISCOVERY: dort
werden genau diese 6 Pins rausgeführt - warum wohl. Im Gegensatz zu ARM
hat ST also durchaus verstanden was sinnvoll ist.
> SWO brauchst du auch nicht unbedingt
Stimmt. Ich finde aber z.B. das printf-Debugging über die ITM ist ne
echt nette Sache. Und dafür brauchst Du das SWO.
Ich habe es gerade mal mit dem Segger J-LINK getestet:
es braucht die 4 Pins:
SWCLK
SWDIO
GND
3.3V
ohne die 3,3V meint der J-LINK dass kein Device angeschlossen ist und
kommuniziert nicht mit dem µC.
An dem STM F103 discovery stehen am SWD Stecker auch nur GND, SWCLK,
SWDIO und 10k nach GND zur Verfügung. Die 3 Signale reichen also aus.
Das discovery mit dem STM32L151 hat am SWD Anschluss aber zusätzlich
noch NRST und SWO mit anliegen.
Ob der NRST das starten des neuen Codes vor der Debug Session verhindert
habe ich noch nicht ausprobiert. Beim Testen meiner EEPROM Simulation
ist mir das ärgerlich aufgefallen, musste einen Start Taster am Anfang
der main() einfügen, damit ich mit sauberen Bedingungen testen konnte.
Gruß Ingo
Markus Müller schrieb:> Ich habe es gerade mal mit dem Segger J-LINK getestet:>> es braucht die 4 Pins:> SWCLK> SWDIO> GND> 3.3V
Was ist "es"? Programmieren oder Debuggen?
Gerade beim Debuggen gibt es schon hin und wieder Fehler, bei denen Du
nen echten Reset brauchst um wieder rauszukommen.
Eclipse, GCC und Segger GDB Server und mehrmals Debuggen gestartet und
es hat geklappt.
Die 3V3 hat der Segger J-LINK benötigt um den STM32 als angeschlossen zu
erkennen.
Markus Müller schrieb:> Eclipse, GCC und Segger GDB Server und mehrmals Debuggen gestartet und> es hat geklappt.
Interessant. Kann man vielleicht doch noch mehr Pins sparen...
Du kennst doch wahrscheinlich den Fall, daß ein Programm ständig in
einen Sleepmode geht während der Debugger läuft. Bei den STM32 muß man
dafür vorher das DBGMCU_CR-Register anpassen damit der Debugger-Teil des
Cores trotz sleep an bleibt. Wenn man das vergisst wird der Debugger
getrennt. Soweit ich weiß braucht man dann den external Reset (oder
Poweron-Reset) um wieder rauszukommen. Das wäre doch so ein Fall in dem
man die Reset-Leitung noch braucht.
> Die 3V3 hat der Segger J-LINK benötigt um den STM32 als angeschlossen zu> erkennen.
Die sind auch sinnvoll, wenn Du viele Boards programmieren willst. Dann
musst Du dafür nur jeweils einen Stecker ranstecken.