Forum: Mikrocontroller und Digitale Elektronik JTAG-Adapter für ARM/Cortex-M3 (STM32) mit UART


von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Hallo,

vor ein paar Tagen habe ich einen JTAG Stecker mit einem 10-Poligen 
Format vorgestellt.
Siehe hier:
http://www.mikrocontroller.net/articles/STM32#Der_10polige_JTAG-Stecker_von_mmvisual

Nun gibt es ja nichts naheliegenderes als einen JTAG-Adapter der 
ebenfalls diesen 10-Poligen Stecker bietet, so dass man kein 
Adapterstück basteln muss.

Ich habe im Internet diverse Open-Source Adapter gefunden, alle mit 
einem FTDI2232 drauf und darauf hin diesen Plan erstellt.
Kann bitte jemand einen Blick drauf werfen ob ich nichts vergessen habe?

Die Platine wäre übrigends 42x26mm klein.

Vielen Dank im Voraus.

von Frank K. (fchk)


Lesenswert?

1. Du hast den FT2232D verwendet. Warum nicht gleich den FT2232H mit USB 
2.0 Hi-Speed? Das flutscht dann doch gleich besser.

2. Ich hätte auf der Rückseite eine Groundplane vorgesehen, der 
Betriebssicherheit wegen.

3. Für welche Target-Spannungen soll das Teil arbeiten? Was passiert, 
wenn Du auf ein Target mit 1.8V oder gar eines mit 5V (z.B. Toshiba) 
triffst? Erste Folge: die LEDs leuchten nicht mehr. Ich hab jetzt nicht 
in die Datenblätter geschaut, aber Vorsicht ist besser.

Andere Leute arbeiten mit separaten IO-Treibern bzw Level-Shiftern. 
Damit hast Du dann auch den Vorteil, daß es Dir im Fehlerfall nicht den 
FTDI-Chip für 10 Euro, sondern nur einen Treiber im Cent-Bereich 
zerhaut. Die Treiber sind auch ESD-mäßig deutlich unempfindlicher.

Amontec nimmt z.B. Fairchild NC7SZ125 - ich habe 9 Stück gezählt.

4. Hat das einen Grund, warum Du /RESET einmal auf AD7 und einmal über 
den 125'er führst? Zum Zurücklesen? Dann hätte ich den Pfeil des Labels 
umgedreht, damit man auch sieht, daß es ein Input ist.

5. Ich würde an den USB-Eingang Schutzdioden hängen, je eine Diode an D+ 
und D- in Sperrrichtung nach Gnd und 3.3V. Am platzsparendsten ist eine 
BAV99S oder eine BAS70XY, da sind vier Dioden in einem kleinen SOT363 
Gehäuse.

fchk

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich habe die Seite wieder gefunden, von der her ich das Design für den 
Aufbau habe:
http://www.joernonline.de/

Daraus habe ich den Umbau auf den 10-Poligen JTAG vor. Also es ist 
garantiert keine "Neuerfindung" von mir.
Das hat natürlich auch weitere Vorteile:
- Die Daten für das EEPROM sind auch frei verfügbar
- OpenOCD unterstützt diesen JTAG als "oocdlink.cfg"

Er verwendet in dem Board OOCDLinkP den gleichen Chip. Die Eagle Dateien 
kann ich nicht lesen. Was müsste ich denn ändern um den H-Chip verwenden 
zu können?

GND hab ich natürlich massig dran, aber für den Screenshot ausgeblendet, 
sonst sieht man nur noch schwarz.

Als Spannung habe ich 3,3V/ 5V im Sinn. So wie bei einem 
Standard-Cortex-M3 / STM32 oder LPC2000 ARM7. Das reicht in der Regel 
für die Hobby-Anwenungen aus. (Die Profis nehmen sowiso einen J-Link 
oder ähnlich...)

Eine Schutzdiode ist drin, die schützt bei Überspannung und Verpolung 
auf der Versorgungsleitung. (ganz links die D4)

In dem Plan ist auch der Reset auf den Pin des FTDI Chips gelegt, also 
hab ich es übernommen.

Wenn ich die USB Leitungen schützen würde, dann würde ich PESD5V0U2BT 
verwenden. Das ist extra ein Chip für USB spezifiziert (und ich habe 
massig davon in der Kiste). Aber ich denke mit der D4 bin ich erst mal 
gut bedient.

Edit, ich hab die PESD5V0U2BT mal eindesignt. Ich muss die ja nicht 
unbedingt bestücken, aber ist mal Vorgesehen.

von Frank K. (fchk)


Lesenswert?

Markus Müller schrieb:
> Ich habe die Seite wieder gefunden, von der her ich das Design für den
> Aufbau habe:
> http://www.joernonline.de/

> Er verwendet in dem Board OOCDLinkP den gleichen Chip. Die Eagle Dateien
> kann ich nicht lesen. Was müsste ich denn ändern um den H-Chip verwenden
> zu können?

Ziehe Dir das Datenblatt zum F2232H bei FTDI. Da steht alles drin. Es 
wird ein komplett anderes Layout, weil es jetzt ein TQFP64 ist, intern 
mit 1.8V arbeitet und einen 12 MHz Quarz gibt. Schau rein, dann ist 
alles klar.

> Als Spannung habe ich 3,3V/ 5V im Sinn. So wie bei einem
> Standard-Cortex-M3 / STM32 oder LPC2000 ARM7. Das reicht in der Regel
> für die Hobby-Anwenungen aus. (Die Profis nehmen sowiso einen J-Link
> oder ähnlich...)

Na, paß auf. Der rend zu niedrigeren Spannungen hält an, und gerade für 
Bastler solltest Du den FTDI-Chip schützen. Besser is das.

> Wenn ich die USB Leitungen schützen würde, dann würde ich PESD5V0U2BT
> verwenden. Das ist extra ein Chip für USB spezifiziert (und ich habe
> massig davon in der Kiste).

Ja, oder so. Den hatte ich noch nicht auf meiner Zutatenliste.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ja, da sind dennoch einige Unklarheiten. Die 4 JTAG Pins sind ja 
definiert, aber die anderen Reset, TRST usw. sind frei auf einen der 
GPIO Ports gelegt.
Jetzt weiß ich nicht welche IOs ich wie verschalten muss damit es klappt 
mit einem bestehenden USB Treiber und OpenOCD.

Ich würde schon gerne ein bestehenden OpenSource-JTAG verwenden, nur 
halt mit dem Umbau auf den 10-Poligen Stecker mit UART. (Im 
http://www.joernonline.de/ gibt es ja eine Variante mit dem H-Chip, 
leider ist der Plan für mich nicht lesbar)

Und wenn ich das Datenblatt der H-Variante richtig gelesen habe, kann 
der VCCio nur bis zu 3,63V, also wäre ein Gatter Nachfolgend für die 
Spannungsanpassung an 5V obligatorisch. Der H-Pegel wird auch nur bis 
2,0V erkannt.

Als ESD Schutz bei den Eingängen gäbe es auch das Bauteil PRTR5V0U4Y von 
NXP.

PS: Als USB Schutz kann man nicht jede beliebige Diode verwenden. Wenn 
da die Kapazität zu groß ist geht der USB Port nicht mehr.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Markus Müller schrieb:
> Ja, da sind dennoch einige Unklarheiten. Die 4 JTAG Pins sind ja
> definiert, aber die anderen Reset, TRST usw. sind frei auf einen der
> GPIO Ports gelegt.
> Jetzt weiß ich nicht welche IOs ich wie verschalten muss damit es klappt
> mit einem bestehenden USB Treiber und OpenOCD.

Es gibt dafür bei FTDI2232-basierten Adaptern meines Wissens keinen 
Standard. Daher sind bei OpenOCD auch diverse Adapter einstellbar, 
obwohl in diesen intern ein FT2232x steckt. Im Quellcode von OpenOCD 
kann man nachsehen, welche Pins des FTDI-Chips bei z.B. Olimex ARM-JTAG 
oder Amtontec JTAGkey mit /SRST und /TRST verbunden sind (Datei ft2232.c 
o.ä.). Amontec gibt diese Informationen w.r.e. auch auf deren Webseite 
an. Ich würde eine Belegung wählen, die mit den gebräuchlicheren 
Adaptern übereinstimmt (z.B. Amontecs JTAGkey). RTCK ist eine neue 
Funktion des FT2232H, dafür ist wahrscheinlich ein extra Pin reserviert. 
Wenn man aber noch einen UART über die 10 Pole rauschleifen will, dürfte 
für RTCK eh keine Leitung mehr frei sein.

> Ich würde schon gerne ein bestehenden OpenSource-JTAG verwenden, nur
> halt mit dem Umbau auf den 10-Poligen Stecker mit UART. (Im
> http://www.joernonline.de/ gibt es ja eine Variante mit dem H-Chip,
> leider ist der Plan für mich nicht lesbar)
>
> Und wenn ich das Datenblatt der H-Variante richtig gelesen habe, kann
> der VCCio nur bis zu 3,63V, also wäre ein Gatter Nachfolgend für die
> Spannungsanpassung an 5V obligatorisch. Der H-Pegel wird auch nur bis
> 2,0V erkannt.

Auch darin unterscheiden sich die Adapter trotz FT2232-Gemeinsamkeiten. 
Die Levelshifter im JTAGkey (werden mit 1,8V-compatible beworben) wurden 
breits genannt. Mit heftigem Suchen im Netz findet man auch 
nachgezeichnete Schaltpläne von U- und JLINK, an denen man sich mglw. im 
Bereich Levelshifting etwas abschauen kann.

Core und TAP-Reset habe ich in Wiggler-Schaltplänen oft als 
Open-Collector/Open-Drain gesehen (mit Transistor/FET). Falls der 
Levelshifter Ausgänge "tri-staten" kann, braucht man evtl. kein extra 
Bauteil dafür, ansonsten würde ich schon vorsehen, dass /SRST nur "low 
gezogen" werden kann. Bei TRST bin ich mir grade nicht sicher, kann 
mglw. direkt auch an einen Push-Pull Ausgang.

Es gibt auch viele kleine Unterschiede bei der Ansteuerung über JTAG 
verschiedener Controller mit ARM-Core. Oft kann man auf TRST und 
manchmal auch SRST verzichten (Bei LPC2k braucht man w.r.e beides). RTCK 
ist optional aber auch praktisch, wenn der Controller es unterstützt.

> Als ESD Schutz bei den Eingängen gäbe es auch das Bauteil PRTR5V0U4Y von
> NXP.
>
> PS: Als USB Schutz kann man nicht jede beliebige Diode verwenden. Wenn
> da die Kapazität zu groß ist geht der USB Port nicht mehr.

Hat FTDI betr. FT2232 USB-Anschaltung nicht einige Kochrezepte in 
AppNotes wie bei den anderen USB-Chips auch?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich habe jetzt einige Stunden das Internet durchwühlt und nur einen 
einzigen Chip gefunden, der einen echten Pegelwandler drin hat und 
zwischen 1,5V und 5,5V funktioniert.

http://www.nxp.com/documents/data_sheet/74LVC4245A.pdf
Davon braucht es zwei, je Richtung einen.

Um die Reset Logik auf der Steite Vtarget zu generieren gibts den Chip:
http://www.nxp.com/documents/data_sheet/74LVC2G125.pdf
oder
http://www.fairchildsemi.com/ds/NC%2FNC7SZ125.pdf
Der geht von 1,65V...5,5V
Davon braucht es zwei Gatter, je Reset einen.

Was meint Ihr?

von (prx) A. K. (prx)


Lesenswert?

Beim Basteln den Serial Wire Debug einrechnen. Dazu muss SWDIO 
bidirektional sein, was nicht alle FT2232 Varianten drauf haben.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Hier wäre noch einer, ähnlich dem 74LVC4245A.
http://www.fairchildsemi.com/ds/FX/FXMA108.pdf

Von OnSemi gibt es Bidirektionale Leve-Translators:
http://www.onsemi.com/pub_link/Collateral/NLSX3012-D.PDF
Allerdings klappen die nicht mit dem Spannungsbereich.

Der hier sieht besser aus:
http://www.nxp.com/documents/data_sheet/GTL2003.pdf
Benötigt aber Pull-Up Widerstände, was bei großer Geschwindigkeit auch 
schwierig ist.

Bei diesen komischen Chips habe ich immer Bauchschmerzen bzgl. 
Bezugsquelle.

von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?


von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Hier ist noch ein Bidirektional:
http://www.analog.com/static/imported-files/data_sheets/ADG3300.pdf
oder
http://www.analog.com/static/imported-files/data_sheets/ADG3308_3308-1.pdf

>For proper operation, VCCA must always be less than VCCY

Also muss ich den FTDImit 5V VccIO betreiben und die A-Seite ist die der 
JTAG Seite.
Das müsste doch gehen oder?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Der Turtelizer funktioniert nicht richtig mit 1,8V Cores.

Denn:
Beim FT2232 sind die VDDIO mit 5V verbunden.
Die 74125 Chips laufen mit der Spannung des Cores (1,8V). Insbesondere 
der IC6. Also wenn der bei Hi-Pegel nur 1,8V aus gibt, dann erkennt der 
FT2232 da noch lange keinen Hi-Pegel.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ist aber fies, der FT2232H kann am VDDio keine 5V. Also nochmals 
grübeln...

2 Stück ADG3300 hintereinander ist auch irgendwie doof.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

So, die Platine ist angekommen und ich habe die mal zusammen gelötet.

Doch mit dem Treiber habe ich noch meine Probleme.
Ich habe als EEPROM Datei die vom Typ "OOCDLink" genommen, aber der 
möchte mir einfach keinen COM-Port machen.

Der Port A trägt er als JTAG OOCDLink ein. Für den Port B hatte ich 
einen COM Port im Gerätemaneger erwartet, aber es erscheint nur ein 
USB-Controller eintrag.

Ich bin mal hergegangen und habe mal selbst versucht einen FTDI-Treiber 
INF-Datei an zu passen aber der mag einfach den zweiten Port nicht.

Anbei die INF-Datei.

Danke für eure Hilfe.

von Tim K. (timmey)


Lesenswert?

@mmvisual welches Betriebssystem verwendest du? ich hab probleme mit x64 
Systemen festgestellt, dort wird JTAG zwar erkannt aber kein wirklicher 
treiber erkannt - versucht man den von FTDI zu installieren ist dies 
ebenfalls erfolglos. Unter windows Xp 32Bit wird JTAG reibungslos 
erkannt. Da ich die verwendete Platin leider nicht selsbt erstellt und 
konfiguriert habe kann ich dir sonnst leider nicht weiterhelfen

gruß timmey

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Ich habe XP32. Der JTAG wird erkannt und installiert, aber der Treiber 
für Port B, also den möchte ich als RS232 betreiben, wird nicht 
installiert.

Anbei ein Bild wie der Geräte-Manager dann aus sieht.
- Der OOCDLink ist da
- Das USB-Verbundgerät erscheint auch

Aber unter "Andere Geräte" steht der OOCDLink. Und das sollte die 
serielle Schnittstelle werden und sich unter "Anschlüsse (COM und LPT)" 
eintragen.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich habe mal einen Treiber von Olimex genommen und meine VID/PID rein 
geschrieben. Jetzt hat der den JTAG und Seriell zwar installiert, aber 
der COM-Port geht immer noch nicht, zumindest kommen keine Daten.

OpenOCD mag den Treiber auch nicht.

Die neue OpenOCD Version nutzt einen LibUSB-Treiber, der allerdings 
macht mit keinen COM-Port, bzw. nur einen beim Olimex ARM-USB-OCD.

Also ich bräuchte das gleiche wir für den Olimex, nur mit der ID des 
OOCDLink Adapters. In der INF Datei von LibUSB (OpenOCD) habe ich keinen 
Hinweis gefunden warum für den Olimex ein COM Port gemacht wird.
Kann mir hier jemand weiter helfen?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Jetzt empfagnge ich Daten vom COM Port.

Ich habe den JTAG Treiber von FTDI gelöscht unf dann den von LibUSB 
installiert. (Den COM Port Treiber von FTDI gelassen) OpenOCD startet 
und bleibt an, also der JTAG wird vom OpenOCD erkannt. Aber, mein 
Prozessor nicht.
Ich bin mir nicht sicher ob sich da noch was beißt.

von Tim K. (timmey)


Angehängte Dateien:

Lesenswert?

Bei mir sieht das ganze so aus - wie erwähnt win7 x64

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Die Teile haben ein gelbes Ausrufezeichen in Deiner Grafik. Also der USB 
Treiber wurde nicht richtig installiert und funktioniert nicht.

Was ist das für eine JTAG Platine?

von Tim K. (timmey)


Lesenswert?

ist von unserer Schule ne lehrplatine mit nem Xe164 (infineon) drauf der 
(jtag?)chip ist ein ft2232D (soviel hab ich mittlerweile 
herrausgefunden). ich hab leider nicht viel ahnung über den aufbau der 
platine nur einige ports sind mir bekannt.
hier noch ein bildchen von dem ding :-D
http://img69.imageshack.us/img69/1469/platine.jpg

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Mit der rechten Maustaste auf dieses Gerät kommen die Eigenschaften des 
Treibers. Unter Details müsste die USB VID und PID (zwei 16 Bit Hex 
Zahlen) zu sehen sein.
Nun muss Du eine INF Datei finden, in der auch diese VID und PID Nummer 
drin steht, dast ist dann der richtige Treiber.
Diesen falsch installierten Treiber kann mit der ENTF-Taste gelöscht 
werden, dann kann bei erneutem Einstecken der richtige Treiber 
installiert werden.

von Tim K. (timmey)


Lesenswert?

ich versuch nochmal mein glück... danke für den tipp

von Tim K. (timmey)


Lesenswert?

ich hab jetz zumindest mal ne serielle verbindung - das reicht mir :-)
hab dazu den treiber von ftdi heruntergeladen und mir einen 
"Konfigurationssatz" aus der ftdibus.inf Herrausgepickt
in meinem fall war das der:
%USB\VID_0403&PID_6010&MI_01.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PI 
D_6010&MI_01

ich hab ihn abgeändert in:
%VID_058B&PID_002A.DeviceDesc%=FtdiPort2232.NTamd64,FTDIBUS\COMPORT&VID_ 
058B&PID_002A

leider wurde der treiber dennoch nicht von meinem system bei "nimm 
treiber aus pfad" angenommen. daher habe ich manuelle treiberwahl und 
dann über "datenträger" die inf datei ausgewählt.

nun kann ich eine verbindung zum virtuellen comport auf meiner platine 
zugreifn und daten empfangen/senden :-). Flashn geht trotzdem nich bzw 
is mir zu heikel das jetz mit der method auszuprobiern - sollte ja aber 
eigendlich auch funktioniern.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Genau so geht das... :)

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.