Ist es möglich, eine JTAG-Schnittstelle mit einem Arduino zu erstellen?


13

Wenn ja, kann man mich auf eine Website verweisen, auf der erklärt wird, wie dies zu tun ist? Ich glaube, ich habe vielleicht einen Weg gefunden , bin mir aber nicht sicher, ob es noch funktionieren würde oder nicht ( ich muss etwas finden , an dem ich es testen kann).

Diese Frage steht im Zusammenhang mit einer früheren Frage, die ich hier gestellt habe.

Für den Fall, dass weitere Hintergrundinformationen benötigt werden.


JBailey Ich kam gerade über Ihre Frage Arduino über die Verwendung einer JTAG-USB - Konverter zu machen , und ich habe mich gefragt , wie haben Sie ausmachen? \

Antworten:


13

Ja, es ist möglich, ein Arduino in einen ARM JTAG-Adapter zu verwandeln.

Es gibt drei Probleme: Spannung, Geschwindigkeit und Treiber.

Der Arduino läuft nativ mit 5V. Die meisten ARM-Mikrocontroller sind an ihren JTAG-Pins nicht 5 V-tolerant und benötigen 3,3 V. Die einfachste Lösung besteht darin, Ihren Arduino mit 3,3 V zu betreiben, da Sie sonst eine Art Pegelkonvertierung benötigen ( Ideen finden Sie unter I2C- Konvertierung von 3,3 auf 5,0 V ).

Das Arduino ist über eine serielle Verbindung mit einem PC verbunden. Ich bezweifle, dass es schneller geht als 115200bps, was interaktive Aktivitäten wie das Durchlaufen von Code in einem Debugger sehr langsam macht. Sie können jedoch Code hochladen und Geräte neu flashen.

JTAG ist ein High-Level-Protokoll, das für jede Prozessorfamilie spezifisch ist und eine SPI-ähnliche Schnittstelle zum Datenaustausch verwendet. Die meisten JTAG-Dongles bieten lediglich eine SPI-Schnittstelle über USB und überlassen den Rest der Arbeit einer PC-Anwendung. OpenOCD und URJTag sind beliebte Optionen. Sie benötigen einen Treiber in einem dieser Treiber für Ihr Arduino JTAG-Protokoll.

Der Bus-Pirat ist dem Arduino (Low-Speed-Mikrocontroller + FTDI-Chip) sehr ähnlich. Es unterstützt JTAG mit OpenOCD, es ist also durchaus möglich.

Wenn Sie eine Teensy / Opendous- oder eine andere AVR-USB- Karte verwenden , können Sie eStick-JTAG verwenden .

Aus Kostengründen würde ich jedoch einen der auf FTDI2232 basierenden Dongles empfehlen. Sie sind billig und werden von OpenOCD gut unterstützt.


5

Es ist möglich, aber sehr schwierig. Ich mag die FTDI-basierten JTAGs nicht, weil die FTDI-Chips fertige Black Boxes sind und man nicht wirklich damit lernen kann.

Wenn ich einen USB-JTAG mit AVR bauen wollte, würde ich einen mit mindestens USB-Vollgeschwindigkeitsunterstützung im Chip haben. Holen Sie sich dann den AVR-USB-Stack (C-Quellcodes) und sehen Sie sich ein USB-zu-Seriell-Beispiel an. Da Bitbanging über USB eine schlechte Idee ist (hohe Latenz), muss es in Befehle höherer Ebene konvertiert werden, die die MCU anweisen, das Bitbanging selbst durchzuführen (oder SPI zu verwenden, wenn möglich) und das High-Level-Ergebnis über USB (vollständige Bytes) zurückzugeben ). Dann müssen jedoch Treiber für die IDE geschrieben werden, um das neue JTAG-Gerät zum Debuggen zu unterstützen. OpenOCD und URJTag enthalten den Quellcode der Treiber für viele JTAG-Geräte. Daher müssen Sie einen für Ihr neu erfundenes Gerät herunterladen und überarbeiten. Sehen Sie, wie einige Leute ähnliche Arbeit geleistet haben: http://code.google.com/p/estick-jtag/


1

Schau auf openocd. Die Backends basieren größtenteils auf dem Parallelport-Bit-Bang-Ansatz. Ich denke, dass es so weit geht, immer nur ein Bit zu ändern. Es ist ziemlich einfach, das zu nehmen, was ich denke, dass sie das Dummy-Backend nennen, was ein Beispiel ist. Senden Sie einen beliebigen Schreib-Bit-Befehl an das Arduino und lassen Sie dieses Bit setzen oder löschen. Wenn Sie aufgefordert werden, das Eingabebit zu lesen, senden Sie einen Befehl an den Arduino, um diese Aufgabe auszuführen und die Ergebnisse zurückzugeben.

Ich habe genau das mit Erfolg getan, aber nicht mit einem Arduino, ich hatte OpenOCD-Talk von einem Host in einen simulierten Arm-Core, der in einem HDL-Simulator läuft.

Beachten Sie, dass einige JTAG-Spezifikationen geschlossen sind. Der Cortex-m3 ist beispielsweise eine Art serialisiert reduzierte Anzahl von Pins JTAG, die das letzte Mal, als ich nachgesehen habe, ohne NDA nicht verfügbar war. Das mag keine Rolle spielen, da openocd alles für Sie erledigt, solange Sie ein von openocd unterstütztes J-Tag-Interface verwenden. Das Bit Banged Back-End ist der Ort, an dem Ihr Arduino und das Interface, über das Sie dorthin gelangen / von dem es kommt, zum Spielen hereinkommen .

Wie bereits von Joby bemerkt, müssen Sie vorsichtig sein mit Spannungen (nicht alle Arduino-Aromen sind 5V und nicht alle Arm-Controller sind 3,3 Volt) und Signalkonditionierung und Erdung und all dem Zeug. Wenn Ihre Zielplatine von einem Netzteil mit Strom versorgt wird, das sich auf einem anderen Niveau befindet als das, mit dem Sie Ihr Arduino versorgen, können Sie etwas zum Schmelzen bringen, wenn Sie die beiden verbinden.


Beachten Sie, dass die Verwendung einer seriellen Schnittstelle (oder, schlimmer noch, USB mit seiner paketierten Transportschnittstelle) für das Proxy-Bit-Banging extrem langsam sein kann. Es ist viel effizienter, den Mikrocontroller vollständige Operationen ausführen zu lassen und mit ihm auf einer höheren Ebene zu kommunizieren, dh ihm anzuweisen, dieses Register zu lesen, dieses zu schreiben oder diesen Datenblock sogar zu programmieren.
Chris Stratton

1

Es ist möglich, und ich habe es tatsächlich implementiert und alles hier erklärt .

Es gibt eine Bibliothek auf Github , die aus zwei Teilen besteht: dem Programm, das auf Arduino ausgeführt wird, und einem Python-Skript, das XSVF-Dateien an das Arduino sendet.

Sie werden höchstwahrscheinlich einige Widerstände benötigen, um 5 V in 3,3 V umzuwandeln, da die meisten FPGAs und CPLDs diesen Spannungspegel verwenden.

Ich habe auch einige Erfahrungen mit dem Schreiben eines Assemblers / Disassemblers für XSVF-Dateien gemacht. Der Code befindet sich in derselben Github-Bibliothek und wird in diesem Beitrag hier erläutert .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.