Forum: Mikrocontroller und Digitale Elektronik welches JTAG-Kästchen nehmen für Eigenentwicklung?


von Jörg H. (idc-dragon)


Lesenswert?

Erstmals eine Frage aus meiner Arbeitswelt:

Wir haben einen proprietären Prozessorkern, den wir gerade um 
JTAG-Ketten erweitern, um debuggen zu können. Toolchain ist gcc und gdb. 
Wir werden wohl einen Daemon programmieren, der als gdb-Stub fungiert 
und sich die geeigneten JTAG-Sequenzen zusammenbaut.

Nun suchen wir ein geeignetes JTAG-Debugger-Kästchen, das uns die 
JTAG-Sequenzen pumpt, mit möglichst "anständiger" Geschwindigkeit. 
Anschluß an USB halte ich für sinnvoll. Gibt es da geeignet generische 
Hardware, mit der man alles machen kann, für das Schnittstellen unter 
Linux existieren? Macraigor kenne ich schon, vielleicht eignet sich auch 
was anderes?
Es sollte halt low-level genug sein, um irgendwie den JTAG-Traffic 
durchzureichen. Prozessorspezifische Eigenintelligenz ist nicht 
gefordert, wir wollen das nur benutzen, nicht Firmware oder FPGAs darin 
anpassen müssen.

von Dominic R. (dominic)


Lesenswert?

Hallo Jörg,

FTDI FT2232 basierte JTAG Interfaces gibt es mittlerweile von einer 
Reihe von Herstellern. ARM Debugging mit diesen Interfaces wird vom 
OpenOCD und Rowley's Crossworks unterstützt. Die Dokumentation von FTDI 
ist ausreichend, um über die MPSSE das JTAG Protokoll zu implementieren.

Wiggler sind einfache parallelport Interfaces die ebenfalls von 
verschiedenen kommerziellen und freien Programmen zum Debuggen und 
Flashen verwendet werden. Da ein Wiggler nur zum BitBanging eingesetzt 
wird lässt sich das Protokoll ebenfalls leicht implementieren.

Andere JTAG Interfaces sind in der Regel proprietär. Ob es für deine 
speziellen Anforderungen möglich ist, an die Dokumentation zu kommen, 
hängt wohl vom einzelnen Hersteller (Keil, Segger, Rowley) ab.

Gruß,

Dominic

von Jörg H. (idc-dragon)


Lesenswert?

Interessante Ansätze, vielen Dank. Segger und Amontec könnten in Frage 
kommen, Keil und Rowley machen doch eher in Compiler?

Bei FTDI FT2232 dachte ich erstmal an Seriell-Umsetzer, potentiell 
langsam. Aber der Chip scheint ja auch für mehr vorbereitet zu sein, 
limitiert erst durch den 12 MBit-USB-Modus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das interessante am FT2232 ist dessen MPSSE (multiprotocol serial 
engine), mit der auch SPI, I²C und eben die für JTAG erforderlichen 
Bitwackeleien in Hardware unterstützt werden.

von Jörg H. (idc-dragon)


Lesenswert?

Ja, habe ich gesehen, das meinte ich.
Trotzdem würde ich das als Low-End Lösung ansehen, auf 6 MHz beschränkt. 
Ein Maccraigor usb2Demon macht 20 MHz, in der Klasse würde ich mich 
lieber bewegen, also falls ihr noch solche Kästchen kennt bin ich für 
Tipps dankbar.  ;-)

Ob das in der Praxis so ankommt weiß ich nicht, es kommen ja u.A. noch 
erhebliche USB-Latenzen dazu.

Wir wollen gerne das Remote File I/O Protokoll vom gdb unterstützen, mit 
möglichst hohem Durchsatz.( Wir haben oft mit größeren Datenmengen zu 
tun.)

von Dominic R. (dominic)


Lesenswert?

> Interessante Ansätze, vielen Dank. Segger und Amontec könnten in Frage
> kommen, Keil und Rowley machen doch eher in Compiler?

Beide bieten auch Debugger mit passendem JTAG Interface an. Keil 
verwendet dafür den U-Link(2), Rowley den CrossConnect.

> Bei FTDI FT2232 dachte ich erstmal an Seriell-Umsetzer, potentiell
> langsam. Aber der Chip scheint ja auch für mehr vorbereitet zu sein,
> limitiert erst durch den 12 MBit-USB-Modus.

Die erste Grenze stellt wohl der maximale Takt von 6MHz dar. In der 
Praxis erreiche ich bei ARM7/9 etwa 2MHz "effektiv", inklusive 
Wartezeiten zwischen einzelnen, kleineren Scans, aber ohne 
Latenz-Effekte.

Damit sind beim ARM Transferraten von bis zu 120KB/s in's Target RAM 
möglich.

Ob ein höhrer Takt tatsächlich einen Vorteil bringt hängt wohl v.a. von 
der Debug Architektur ab. Sobald USB Latenzen eine Rolle spielen ist es 
mit der Performance onehin vorbei. Um das zu vermeiden benötigt entweder 
das JTAG Interface Eigenintelligenz oder das Debug Protokoll des Targets 
muss quasi "shoot-and-forget" bieten, sprich der Debugger schickt 
einfach Daten so schnell er kann, und das Target kommt garantiert mit 
bzw. erkennt Overflows.

> Wir wollen gerne das Remote File I/O Protokoll vom gdb unterstützen, mit
> möglichst hohem Durchsatz.( Wir haben oft mit größeren Datenmengen zu
> tun.)

Bisher habe ich solche Funktionalität entweder via "Shared Memory" oder 
einem speziellen Debug Kanal gesehen. Bei der shared memory Variante 
einigen sich Host und Debugger auf einen Speicherbereich der dann quasi 
für Remote Procedure Calls verwendet wird.
Beim Debug Kanal existiert ein Hardware-spezifischer Kommunikationskanal 
(z.B. ARM7/9 DCC), der es dem Debugger erlaubt mit der laufenden 
Hardware zu kommunizieren.

Die genaue Ausgestaltung und v.a. der erreichbare Durchsatz hängt stark 
vom Debug Support im Target ab.

Gruß,

Dominic

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.