Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
jtag:tutorials:start [Sun. 11.03.2018 16:44] – wikiadmin | jtag:tutorials:start [Tue. 13.03.2018 07:26] (aktuell) – wikiadmin | ||
---|---|---|---|
Zeile 19: | Zeile 19: | ||
Nimm ein Gerät von dem die JTAG-Schnittstelle bekannt und bereits dokumentiert ist. Google einfach danach: "< | Nimm ein Gerät von dem die JTAG-Schnittstelle bekannt und bereits dokumentiert ist. Google einfach danach: "< | ||
- | == Wie kann ich den PC mit der JTAG-Schnittstelle | + | == Womit und wie kann ich Daten über die JTAG-Schnittstelle |
- | Ich verwende dafür nachfolgend einen Arduino verwenden, mit dem ich die Signale erzeuge | + | Dafür sind die " |
- | Desweiteren brauchst Du einen Pegelwandler um die IO-Signale vom Arduino an den Spannungspegel des JTAG-Chips auf dem Testgerät anzupassen. Such auf ebay nach "Pegelwandler | + | Damit uns der nicht wegen unterschiedlicher Betriebs- und IO-Signalspannung hopps geht, schalten wir noch einen Pegelwandler zwischen ihm und der JTAG-Schnittstelle vom Gerät. Ich verwende hier einen 8-Kanaligen mit nem " |
- | == Hardware-Aufbau mit Arduino und Pegelwandler | + | **UND HEY, DAS IST WICHTIG** nicht einfach auf den Pegelwandler verzichten, sonst grillst Du womöglich gleich Dein Testgerät. ([[nerdwissen_pegelwandler|Nerd-Wissen: Was macht ein Pegelwandler |
- | Verbinde das ganze so: | + | ===== Wir bauen uns ein JTAG-Interface mit Arduino und Pegelwandler ===== |
+ | |||
+ | == Prinzipschaltbild == | ||
+ | |||
+ | < | ||
+ | [PC]< | ||
+ | </ | ||
+ | |||
+ | == Schaltplan und physikalischer Aufbau == | ||
+ | |||
+ | < | ||
+ | |||
+ | <FOTO VOM AUFBAU> | ||
^ Arduino ^ Pegelwandler HS ^ Pegelwandler LS ^ JTAG-Signal ^ Kabelfarbe ^ | ^ Arduino ^ Pegelwandler HS ^ Pegelwandler LS ^ JTAG-Signal ^ Kabelfarbe ^ | ||
Zeile 35: | Zeile 47: | ||
| D10 | H4 | L4 | TDO | Lila | | | D10 | H4 | L4 | TDO | Lila | | ||
- | < | + | == Software-Grundgerüst für den Arduino |
- | + | ||
- | == Arduino-Code dazu == | + | |
Zunächst definieren wird die Signale mit Namen um sie einfach verwenden zu können: | Zunächst definieren wird die Signale mit Namen um sie einfach verwenden zu können: | ||
Zeile 48: | Zeile 58: | ||
</ | </ | ||
- | Dann, im '' | + | Im '' |
<code c> | <code c> | ||
- | void setup() | + | void initPins() |
{ | { | ||
pinMode(TCK, | pinMode(TCK, | ||
Zeile 61: | Zeile 71: | ||
digitalWrite(TMS, | digitalWrite(TMS, | ||
digitalWrite(TDO, | digitalWrite(TDO, | ||
- | digitalWrite(TDI, HIGH); | + | } |
+ | |||
+ | void setup() | ||
+ | { | ||
+ | initPins(); | ||
+ | ... | ||
} | } | ||
</ | </ | ||
- | **Damit ist der grundlegende Aufbau der Schnittstelle erledigt!** | + | ===== Wie kommuniziere ich nun mit dem Chip? ===== |
- | == Was haben wir nun gelernt? | + | == Erstes Etappenziel: |
- | * Du weißt nun das JTAG mindestens 4 Signalleitungen braucht, nämlich TCK, TMS, TDI und TDO. | + | Um schnell einen Erfolg zu erziehlen und auch das ganze Setup zu überprüfen, nehmen wir uns etwas einfaches vor, das auslesen des IDCODEs aus dem Chip. Um das hinzubekommen musst Du erst ein klein Wenig Theorie kennen. |
- | * Der Spannungspegel dieser Leitungen ist zu beachten und entsprechend anzupassen um sicher darauf zuzugreifen. | + | |
- | ===== Wie kommuniziere | + | == Automatische IDCODE Bereitstellung nach Reset == |
+ | |||
+ | Ein JTAG-Controller soll seinen IDCODE nach einem Reset in das Datenregister stellen. Durch geeignete Ansteuerung der Statemachine über den TMS-Pin kann man dieses Register dann zwischen TDI und TDO schalten und die darin befindlichen Bits " | ||
+ | |||
+ | Neben dem Reset nach einschalten kann man aber auch per Hardware oder Software einen Reset durchführen. Hierzu führen manche JTAG-Header einen zusätzlichen Pin, namens '' | ||
+ | |||
+ | Um das Ziel zu erreichen musst Du also nun wissen wie man einen Soft-Reset auslöst, wie man das Datenregister aktiviert und wie man die Daten dann daraus ausliest. Das zeige ich dir nun... | ||
== Grundlegende Kommunikation == | == Grundlegende Kommunikation == | ||
- | Diese ist seriell, sowohl für die Daten als auch für die Befehle. Die Daten werden | + | Diese ist seriell, sowohl für die Daten als auch für die Befehle. Die Daten werden |
+ | |||
+ | Der Aufbau und die Funktion der State-Machine sind wichtig, bedarf aber etwas Erklärung. Kurz gesagt sendet man eine bestimmte Bitfolge | ||
+ | |||
+ | Zur Synchronisation der Zustands- | ||
+ | |||
+ | nach LOW oder umgekehrt, werden bestimmte Zustände übernommen. | ||
Intern liegt zwischen TDI und TDO ein Schieberegister. Die Breite dieses und die Verwendung der darin befindlichen Daten bestimmt der Betriebsmodus des Chips, der über JTAG-Befehle gesteuert wird. | Intern liegt zwischen TDI und TDO ein Schieberegister. Die Breite dieses und die Verwendung der darin befindlichen Daten bestimmt der Betriebsmodus des Chips, der über JTAG-Befehle gesteuert wird. |