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?
Bastle Dir doch ein Adapterkabel vom 20-Poligen JTAG Interface auf den 10-Poligen Stecker. Im Artikel gibt es auch eine Adapterplatine 10/20-Polig: http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Als JTAG empfehle ich den J-LINK von Segger: http://www.segger.com/j-link-edu.html - Der ist schnell - Funktioniert unter Win/Linux/Mac - Gute Softwaretools dabei - Tauglich für CooCox, Eclipse und kommerzielle Tools Ansonsten empfehle ich auch die Artikel: STM32 für Einsteiger STM32 CooCox Installation mal durch zu lesen
:
Bearbeitet durch User
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.
Ist schwierig eine pauschale Empfehlung zu geben. Soll der Stecker von außen sichtbar sein oder ist der nur innerhalb eines Gerätes?
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.
Er meinte diese Stecker-Belegung: http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual Die auch einen UART mit drauf hat.
Die sind recht klein, gibt es, glaube ich, auch gewinkelt und auch bei Reichelt. http://de.farnell.com/wurth-elektronik/690367291076/buchse-2-54-1-27mm-smt-10kont/dp/1641845 Gewinkelt wäre nicht nötig, da der Stecker (incl. Flachbandkabel-Gegenstück) sehr flach sind. Kaufe mal ein Satz und schaue es Dir an.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
Egal, was man macht, sollte man sich trotz allem an die Konventionen der HW-Hersteller halten (meine Meinung). Schau mal hier: http://infocenter.arm.com/help/topic/com.arm.doc.faqs/attached/13634/cortex_debug_connectors.pdf
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.
Warum muss es denn so klein sein? Zum Experimentieren sind die 2.54 mm Stecker ideal, da man da auch Wire Jumper reinstecken kann.
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.
Also ich arbeite mit der SWD Schnittstelle mit 5 Pins: Clock, Daten, Reset, GND und 3V3. Funkt wunderbar!
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.
und ich glaube sogar wenn man den J-LINK ein wenig "modifiziert" kann man sich die 3V3 auch sparen, bleiben dann "nur" 3 Pins
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.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.