Forum: Mikrocontroller und Digitale Elektronik Gutes JTAG Tutorial gesucht


von Olli Z. (z80freak)


Lesenswert?

Nachdem ich nun wochenlang das Internet abgegrast habe und viel gefunden 
hab, bin ich in der Praxis dennoch nicht wirklich weiter gekommen. Habe 
mich schon an allem möglichen versucht, Software wie Hardware und auch 
verschiedenen JTAG-Targets. Nur ein reproduzierbares Erfolgserlebnis 
konnte ich noch nicht verbuchen. Das frustiert und ich denke eigentlich 
das ich nicht der Typ bin der so leicht aufgibt...

Kennt jemand ein gutes Tutorial in dem mit einfachen, verfügbaren 
Mitteln JTAG ganz praktisch erklärt wird?

An Interfaces habe ich einen Segger J-Link EDU, einen Olimex 
ARM-USB-OCD-H, einen USB Blaster (China-Clone) und natürlich div. 
Selbstbauteile (Mikrocontroller, Levelshifter, USB-Chips, etc.) zur 
Verfügung.

An Software habe ich mit OpenOCD, J-Link, UrJTAG und selbst 
geschriebener Software experimentiert.

An Targets habe ich einen Linksys WRT54GL, eine Fritzbox 7170, einen 
Bintec R232bw, div. Radios und Automotive-Module zur Verfügung. 
EVAL-Boards habe ich keine, ausser einem STM-Discovery und einem 
STM-Nucleo Board.

Aber ich würde mir auch was zulegen, daran soll es nicht scheitern. Es 
gibt so viele gute Berichte im Internet wie man mittels JTAG einen 
Router debrickt, Bootloader überlistet, etc. Aber entweder sind die sehr 
allgemein gehalten oder enden nach einer vielversprechenden Einleitung.

Auch meine Bemühungen hier im Forum Infos über JTAG zu bekommen sind 
mehr oder weniger erfolglos geblieben. Nicht weil niemand darauf 
geantwortet hätte, aber weil ich in der Praxis bislang immer nur 
Probleme hatte, aber keine Erfolge. Alles irgendwie strange...

:
von Olaf (Gast)


Lesenswert?

> Aber ich würde mir auch was zulegen, daran soll es nicht scheitern.

Das brauchst du nicht. Du hast ja bereits einen J-Link Edu und ich finde 
die Doku von Segger eigentlich ganz gut. Sowohl im Highlevel bereich wie 
auch Lowlevel (lesen von Registern, Kommunikation ueber TCP-IP mit dem 
Debugger). Also lad dir die PDFs durch und lies sie.

> Es gibt so viele gute Berichte im Internet wie man mittels JTAG einen
> Router debrickt, Bootloader überlistet, etc.

Ach? Sowas gibt es? :) Dann suchst du also ein Youtubevideo das dich in 
10min zu einem coolen Hacker macht? :-D Ich fuerchte da ist die Thematik 
etwas komplexer.

Olaf

von Olli Z. (z80freak)


Lesenswert?

Danke Olaf, ich habe versucht das alles zu verstehen und natürlich auch 
in die Praxis umzuzusetzen, aber irgendwo bin ich dann wohl immer falsch 
"abgebogen"...

Um z,b, mit j-link.exe (commander) irgendwas mit dem TAP controller 
machen zu können muss man erstmal ein Targetdevice wählen und und und. 
Also alles andere als einfach.

Daher habe ich dann auch andere Software und Hardware getestet, in der 
Hoffnung das es besser wird, wurde es aber nicht :-/

Aus diesem Grund habe ich dann auch angefangen mir selbst Software zu 
schreiben und das mit einem Atmega bzw. STM32 zu tun. Ganz simples Zeug 
wie das auslesen des IDCODE, der Bestimmung der IR-Len, usw. Aber auch 
das hat immer irgendwie nur unstabile Ergebnisse gebracht und ich wusste 
dann nie woran es liegt, am Target, am Levelsbifter am Arduino, am Code, 
an mir...?!

Und nein, ich suche gerade kein "How to become a hacker in 10 minutes" 
Video, sondern jemand der mit nachvollziehbaren Schritten beschreibt wie 
er von A nach B kommt.

Ich denke einfach das wenn mir diese Basics fehlen, dann komme ich mit 
den Higherlevel Funktionen auch nicht klar.

Ich habe ja mit den Segger und J-Flash bereits den Flash eines Gerätes 
ausgelesen, aber auch hier habe ich Probleme das auf einen anderen 
Adapter/Software zu transponieren und eigentlich müsste Jtag doch Jtag 
sein und es überall klappen...

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Olli Z. schrieb:
> eigentlich müsste Jtag doch Jtag
> sein

Rs232 muesste doch auch Rs232 sein. Aber viel viele vrerschiedene 
serialle Kabel gibt es?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> Um z,b, mit j-link.exe (commander) irgendwas mit dem TAP controller
> machen zu können muss man erstmal ein Targetdevice wählen und und und.
> Also alles andere als einfach.

Was willst du eigentlich genau erreichen? Einfach nur einen Controller 
wie z.B. einen STM32 flashen, debuggen, auslesen? Das ist mit der J-Link 
Software doch simpel, z.B.:
1
JLink.exe -Device STM32F103RB -If JTAG -Speed 1000  # JLink mit richtigem Device starten
2
connect  # Zum Device verbinden
3
loadbin ZuFlashendeDatei.bin, 0x08000000 # Datei flashen
4
h # Prozessor anhalten
5
r # resetten
6
regs # Register anzeigen
7
setBP 0x08001234 # Breakpoint setzen
8
g # Prozessor starten
9
h # Wieder anhalten
10
regs # Register anzeigen
11
savebin AusgelesenesImage.bin, 0x08000000 # Flash auslesen
12
quit # Sitzung Beenden

Siehe ab S. 40:
https://www.segger.com/downloads/jlink/UM08001

Deutlich bequemer wird's wenn man GDB nutzt:
1
JLinkGDBServer -Device STM32F103RB -If JTAG -Speed 1000

Dann gdb starten:
1
arm-none-eabi-gdb MeinProgramm.elf
2
target remote :2331 # Verbinden
3
load # Flashen
4
mon reset # Resetten
5
b main # Breakpoint setzen
6
c # Starten
7
...

Alternativ in einer IDE (z.B. eclipse) oder grafischem Debugger deiner 
Wahl (z.B. DDD) GDB starten, dann kann man grafisch durchsteppen usw.

Wenn du z.B. das auf eclipse basierende Atollic Studio nutzt, kannst du 
mit ein paar Klicks das alles automatisch ablaufen lassen.

JTAG ist ein bisschen wie Ethernet: Man kann alles möglich damit 
übertragen, aber nur weil man sich mit Ethernet auskennt weiß man noch 
lange nicht wie E-Mail, Web, Chats, ... funktionieren. Die J-Link 
Software abstrahiert zum Glück viele Mikrocontroller, sodass diese über 
eine einheitliche Nutzerschnittstelle bedient werden können.

von Ben S. (theben)


Lesenswert?

Niklas G. schrieb:
> JTAG ist ein bisschen wie Ethernet: Man kann alles möglich damit
> übertragen, aber nur weil man sich mit Ethernet auskennt weiß man noch
> lange nicht wie E-Mail, Web, Chats, ... funktionieren.

Das ist ein sehr guter Vergleich

: Bearbeitet durch User
von Olli Z. (z80freak)


Lesenswert?

Uwe B. schrieb:
> Olli Z. schrieb:
>> eigentlich müsste Jtag doch Jtag
> Rs232 muesste doch auch Rs232 sein. Aber viel viele vrerschiedene
> serialle Kabel gibt es?

Damit hast Du zwar recht, hilft mir aber jetzt auch nicht wirklich 
weiter. Vielleicht hast Du ja noch etwas substantielles zum Thema 
beizutragen?

von 123 (Gast)


Lesenswert?

Hallo,

Was willst du eigentlich verstehen / machen? Das liest sich für mich wie 
wenn du versuchst dir deinen eigenen JTAG Debugger (J-Link) auf basis 
eines Atemga / STM32 zu bauen?

Olli Z. schrieb:
> Aus diesem Grund habe ich dann auch angefangen mir selbst Software zu
> schreiben und das mit einem Atmega bzw. STM32 zu tun. Ganz simples Zeug
> wie das auslesen des IDCODE, der Bestimmung der IR-Len, usw. Aber auch
> das hat immer irgendwie nur unstabile Ergebnisse gebracht und ich wusste
> dann nie woran es liegt, am Target, am Levelsbifter am Arduino, am Code,
> an mir...?!

Für was willst du JTAG verwenden?
 - Software Debuggen
 - Boundery scann

Für welchen Controller Famile wilst du mittels JTAG Debuggen?
 - ARM7
 - CortexM3
 - AVR32
 - ...


> Ich habe ja mit den Segger und J-Flash bereits den Flash eines Gerätes
> ausgelesen, aber auch hier habe ich Probleme das auf einen anderen
> Adapter/Software zu transponieren und eigentlich müsste Jtag doch Jtag
> sein und es überall klappen...

Ich gehe mal davon aus das du hier den Segger und J-Flash meinst.
Jtag stellt nur die unterste Schicht der kommunikation dar. Zum Flash 
auslesen braucht es aber noch jede menge mehr. Ein Programm für den 
auszulesenden Kontroller, Ein Protokoll der die ausgelesenen daten 
übertragt, ... das ganze ist dann noch core spezifisch, ...

ggf schau dir mal die ARM Documentation zum JTAG an. die fand ich 
eigentlich ganz brauchbar.

gruss

von Olli Z. (z80freak)


Lesenswert?

Ben S. schrieb:
> Niklas G. schrieb:
>> JTAG ist ein bisschen wie Ethernet: Man kann alles möglich damit
>> übertragen, aber nur weil man sich mit Ethernet auskennt weiß man noch
>> lange nicht wie E-Mail, Web, Chats, ... funktionieren.
>
> Das ist ein sehr guter Vergleich

Leider ist es aber doch nur all zu oft umgekehrt: Jemand der sich mit 
E-Mail, Web, Chats "auskennt" weiss nicht automatisch wie Ethernet 
funktioniert. Und DAS wäre der richtige Vergleich für meine Frage. Denn 
ich möchte erstmal diese Basics beherrschen und erst dann zu den 
höherwertigen Funktionen vordringen. Wer meinen ersten Post liest kann 
das eigentlich unmißverständlich daraus entnehmen...

von Olli Z. (z80freak)


Lesenswert?

Erstmal danke Niklas für Deine Beteiligung am Thema.

Niklas G. schrieb:
> Was willst du eigentlich genau erreichen? Einfach nur einen Controller
> wie z.B. einen STM32 flashen, debuggen, auslesen? Das ist mit der J-Link
> Software doch simpel, z.B.:
Weder noch. Irgendwann mal, ja. Erstmal geht es mir darum ganz 
elementare Dinge sicher umsetzen zu können.

Um beim Beispiel zu bleiben:
> [code]JLink.exe -Device STM32F103RB -If JTAG -Speed 1000  # JLink mit
> richtigem Device starten
> connect  # Zum Device verbinden
Zu diesem Zeitpunkt geschieht da schon eine ganze Menge "Magie" über 
JTAG. Ich habe mal versucht mittels Logicanalyzer daraus schlau zu 
werden, was mir aber leider nicht gelungen ist.

Ich finds super wenn Du das alles beherrschst und hoffe das ich diesen 
Zustand auch mal erreichen kann. Dann helfen mir die zitierten Beispiele 
sicher weiter :-)

> Alternativ in einer IDE (z.B. eclipse) oder grafischem Debugger deiner
> Wahl (z.B. DDD) GDB starten, dann kann man grafisch durchsteppen usw.
Ja, genau sowas wäre doch für JTAG-Neulinge genau das richtige, aber 
eben auf JTAG-Ebene und nicht schon höher. Ich fürchte mit "Debugger" 
meinst Du schon einen GDB, ich wäre aber an einem JTAG-Debugger 
interessiert. Sprich ich sehe den Zustand der Signale vom Interface, das 
was ich in den TAP hineinschicke (TDI) und was ich von ihm erhalte 
(TDO). Das ganze im Single-Step und einer Timeline.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> Wer meinen ersten Post liest kann
> das eigentlich unmißverständlich daraus entnehmen...

Ich leider nicht. Du möchtest also wirklich alle Details kennen, und 
nicht einfach nur einen Controller flashen/debuggen, wie es die meisten 
tun? Dafür gibt es vermutlich keine detaillierten Tutorials, weil die 
meisten Leute einfach eine fertige Implementation, wie eben J-Link, 
nutzen. Die meisten Programmierer wollen auch nicht genau wissen wie ein 
C-Compiler ihr Programm zerlegt, sondern nur wie man ein C-Programm 
schreibt.
Du solltest bei ARM genaue Dokumentation zu JTAG finden. Es gibt aber 
Unterschiede zwischen den ARM-Controllern; jeder hat z.B. seine eigene 
Methode, um den Flash zu beschreiben (selbst die verschiedenen 
STM32Fx-Familien unterscheiden sich da). Die alle zu implementieren 
dürfte Arbeit sein.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> Erstmal geht es mir darum ganz
> elementare Dinge sicher umsetzen zu können.

Was willst du denn umsetzen? Den JLink nachbauen? Dessen Preis wird 
irgendwie im Arbeitsaufwand dafür begründet liegen.

Olli Z. schrieb:
> Zu diesem Zeitpunkt geschieht da schon eine ganze Menge "Magie" über
> JTAG.
Ja.

Olli Z. schrieb:
> Ich finds super wenn Du das alles beherrschst und hoffe das ich diesen
> Zustand auch mal erreichen kann
Nö, ich hab mich mit den Details auch nicht auseinandergesetzt und bin 
froh, dass die Leute bei Segger sich darüber schon den Kopf zerbrochen 
haben. Besser als die kann ich das auch nicht, und ich kriege damit 
meine Projekte umgesetzt.

Olli Z. schrieb:
> Sprich ich sehe den Zustand der Signale vom Interface, das
> was ich in den TAP hineinschicke (TDI) und was ich von ihm erhalte
> (TDO). Das ganze im Single-Step und einer Timeline.
Aber wozu? Das braucht man doch höchstens, wenn man sich seinen eigenen 
Mikrocontroller und eigenen TAP baut. Weil das ziemlich wenige Leute 
tun, wird sich kaum einer die Mühe gemacht haben, so etwas zu 
programmieren.

: Bearbeitet durch User
von Olaf (Gast)


Lesenswert?

> Ich leider nicht. Du möchtest also wirklich alle Details kennen, und
> nicht einfach nur einen Controller flashen/debuggen, wie es die meisten
> tun? Dafür gibt es vermutlich keine detaillierten Tutorials, weil die
> meisten Leute einfach eine fertige Implementation, wie eben J-Link,
> nutzen.

Die gibt es sicherlich. Allerdings vom Controllerhersteller persoenlich 
weil die bei jedem Baustein anders sind. Deshalb muss man beim J-Link 
auch die Prozessorbezeichnung angeben. Ich koennte mir auch vorstellen 
das du da ein NDA unterschreiben musst.

Olaf

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Olaf schrieb:
> Die gibt es sicherlich.
Aber nicht in Form eines Step-By-Step Tutorials, sondern in Form einer 
Dokumentation. Man muss sich die Details schon selbst zusammen suchen. 
So ist das doch immer, wenn man die ausgetretenen Pfade verlässt...

Olaf schrieb:
> Ich koennte mir auch vorstellen
> das du da ein NDA unterschreiben musst.
Naja, bei den STM32 ist das Flashen im Reference Manual dokumentiert.

von mmm (Gast)


Lesenswert?

Naja, das Tutorial, das Du suchst heißt wohl: IEEE 1149.1
Das lässt sich per google als pdf finden...

Alles weitere ist dann Controller-spezifisch und in den jeweiligen 
Manuals zu finden.

von Olli Z. (z80freak)


Lesenswert?

Niklas G. schrieb:
> Olli Z. schrieb:
>> Wer meinen ersten Post liest kann
>> das eigentlich unmißverständlich daraus entnehmen...
>
> Ich leider nicht.
Ok, dann tut es mir leid und versuche meinen Wunsch anders zu 
formulieren!

> Du möchtest also wirklich alle Details kennen, und
> nicht einfach nur einen Controller flashen/debuggen, wie es die meisten
> tun?
Ja, das geht in die richtige Richtung. Ob ich wirklich "alle Details" 
wissen will... naja, aber zumindest möchte ich verstehen was da unter 
der Haube läuft.

> Dafür gibt es vermutlich keine detaillierten Tutorials, weil die
> meisten Leute einfach eine fertige Implementation, wie eben J-Link,
> nutzen.
Ganz genau das ist meine Erfahrung nach stundenlangem rumsuchen im 
Internet über mehere Tage/Wochen! Die meisten setzen entweder "höher" an 
oder beschreiben das was überall an Grundlagen zu lesen ist. Aber 
scheinbar niemand (naja, zumindest konnte ICH nichts finden) macht ein 
richtig gutes, praktisches Basic-Tutorial.

> Die meisten Programmierer wollen auch nicht genau wissen wie ein
> C-Compiler ihr Programm zerlegt, sondern nur wie man ein C-Programm
> schreibt.
Da hast Du wohl recht, mich eingeschlossen. Manchmal ist es aber extrem 
hilfreich wenn man das weis, z.B. beim Debuggen oder Reverse-Engineering 
von Binärcode.

> Du solltest bei ARM genaue Dokumentation zu JTAG finden. Es gibt aber
> Unterschiede zwischen den ARM-Controllern; jeder hat z.B. seine eigene
> Methode, um den Flash zu beschreiben (selbst die verschiedenen
> STM32Fx-Familien unterscheiden sich da). Die alle zu implementieren
> dürfte Arbeit sein.
Sicher. Nicht ohne Grund verlangen Firmen wie Segger einen ordentlichen 
Betrag für ihre Produkte. Soweit will ich auch garnicht gehen.

von mmm (Gast)


Lesenswert?

Wobei das, was man bei google findet ist die Version von 2001. Die wurde 
2013 abgelöst. Aber nachdem ich auch schon von 2013 mit JTAG Debuggern 
gearbeitet habe, dürfte der alte Standard duchaus noch Gültigkeit 
haben...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Olli Z. schrieb:
> Aber
> scheinbar niemand (naja, zumindest konnte ICH nichts finden) macht ein
> richtig gutes, praktisches Basic-Tutorial.

Das ist immer so, wenn es derart in die Tiefe geht. "Praktisch" von 
"praxisnah" wäre das sowieso nicht, weil dafür würde man fertige Systeme 
nutzen. Für wie viele Leute hätte so etwas einen praktischen Nutzen? Und 
"Basic" widerspricht der Komplexität des Themas. Compilerbau lässt sich 
auch nicht in einem "Basic Tutorial" abhandeln.

Beispiel: Mein USB-Tutorial mit STM32 versucht auf viele Details 
einzugehen und möglichst wenig vordefinierte Software zu nutzen. Das 
Ergebnis: Es wird sich beschwert dass der Text zu kompliziert ist und 
man benutzt lieber fertige Systeme wie die VCP-Implementation von W.S. 
... Ähnlich würde es einem JTAG-Tutorial ergehen.

von Cyblord -. (cyblord)


Lesenswert?

Olli Z. schrieb:
> Ja, das geht in die richtige Richtung. Ob ich wirklich "alle Details"
> wissen will... naja, aber zumindest möchte ich verstehen was da unter
> der Haube läuft.

Diese etwas großspurige Haltung wird durch deine Suche nach einem 
Tutorial etwas entlarvt. Wer wissen will wie etwas "unter der Haube 
läuft", der nimmt sich die Primärquelle vor, in diesem Fall die Spec.

Im Gegensatz zu vielen anderen Dingen im Bereich der Mikrocontroller, 
wird dir aber gerade DAS bei JTAG keinerlei Vorteile bringen. Es sei 
denn du willst deine eigene JTAG Hardware von null auf bauen und 
programmieren.

: Bearbeitet durch User
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Olli Z. schrieb:
> Zu diesem Zeitpunkt geschieht da schon eine ganze Menge "Magie" über
> JTAG. Ich habe mal versucht mittels Logicanalyzer daraus schlau zu
> werden, was mir aber leider nicht gelungen ist.

Was bein Debuggen ueber JTAG oder SWD passiert, kannst Du gut den den 
Quellen der Black Magic Debug Probe sehen 
https://github.com/blacksphere/blackmagic.

von Stefan F. (Gast)


Lesenswert?

JTAG ist nur die Daten-Autobahn, über die Informationen transportiert 
werden. Die Informationen selbst und ihre Bedeutung für bestimmte Ziele 
sind von Interesse.

Wenn ich nach Venlo fahre, um Einzukaufen, interessiert mich in erster 
Linie das Angebot der dortigen Händler, nicht die Autobahn. Ich werde 
sicher nirgends einen zusammenhängenden Ratgeber finden, der alle Ziele 
beschriebt, die ich theoretisch über die Autobahn erreichen könnte.

Ganz ähnlich ist das auch mit JTAG. Nenne einen konkreten Chip, dann 
kann man Dir dazu vielleicht die passende Anleitung geben. Bei den von 
Dir genannten Geräten schätze ich, dass diese Infos nicht öffentlich 
zugänglich sind.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Fuer die STM32 gibt es Boundary Scan Description Language Files. Dort 
sind die CortexM3 und die STM32 Scan Taps beschrieben. Was man dann mit 
der CortexM3 Tap machen kann, beschreibt ARM z.B. in IHI0031

von Olli Z. (z80freak)


Lesenswert?

Also wenn es mich/uns hier in der Diskussion weiter bringt können wir 
gern am Beispiel STM32 arbeiten. Wie ich ka schrieb ist mir das Target 
als solches erstmal völlig egal und wenn es welche gibt die sich 
aufgrund ihrer Dokumentation und Verbreitung besonders eignen - warum 
nicht?! Sofern es halbwegs bezahlbar bleibt lege ich mir entsprechende 
Hardware eben zu.

Im ersten Schritt hab ich halt geschaut was ich da hab. Welche STM32 
Prozessoren kämen denn in Frage?

von Cyblord -. (cyblord)


Lesenswert?

Olli Z. schrieb:
> Also wenn es mich/uns hier in der Diskussion weiter bringt können wir
> gern am Beispiel STM32 arbeiten. Wie ich ka schrieb ist mir das Target
> als solches erstmal völlig egal und wenn es welche gibt die sich
> aufgrund ihrer Dokumentation und Verbreitung besonders eignen - warum
> nicht?!

Aber du hast schon verstanden dass es eine Art unteren Layer gibt, 
nämlich JTAG, welches durch eine Spec beschrieben wird, und darauf 
aufbauend, jeder Hersteller sein eigenes Protokoll drüber fährt um seine 
Controller damit kommunizieren zu lassen.

Die Frage ist nun nämlich, für welche dieser beiden Schichten 
interessierst du dich eigentlich?

von Olli Z. (z80freak)


Lesenswert?

Also wenn es mich/uns hier in der Diskussion weiter bringt können wir 
gern am Beispiel STM32 arbeiten. Wie ich ka schrieb ist mir das Target 
als solches erstmal völlig egal und wenn es welche gibt die sich 
aufgrund ihrer Dokumentation und Verbreitung besonders eignen - warum 
nicht?! Sofern es halbwegs bezahlbar bleibt lege ich mir entsprechende 
Hardware eben zu.

Im ersten Schritt hab ich halt geschaut was ich da hab. Welche STM32 
Prozessoren kämen denn in Frage?

Und kennt jemand eine Jtag-Debug Software, so wie ich es oben mal als 
Traumvorstellung beschrieben hab?

Und nochmal: ich will nix clonen, billiger nachbauen, noch brauche ich 
das fürs Studium oder als Hausaufgabe, es geht mir in erster Linie ums 
Verständnis und der praktischen Umsetzung dessen.

von Strubi (Gast)


Lesenswert?

Die IEEE-1149.1 wurde ja schon genannt. Wenn du mal die Statemaschine 
verstanden hast, kannst du das mit TMS aufgebohrte SPI-Protokoll 
verstehen.
Dann siehst du, dass prinzipiell damit ein Instruction Register / Data 
Register angesteuert wird, und dem Run-Test-Idle-State allenfalls eine 
spezielle Bedeutung zukommt, die abhängig vom TAP (also chip-spezifisch 
ist).

Wenn du mit dem Verständnis Mühe hast, kannst du mit Hilfe des recht 
hübschen Java-Programms "goJTAG" auch ein BSCAN-File (BSDL, findet man 
oft irgendwo beim Hersteller) deines Lieblingschips einlesen und 
JTAG-Sequenzen im Trockendock (ohne Adapter) durchspielen, das hilft 
beim intuitiveren Ansatz des Verstehens. Achtung: der BSDL-Parser hatte 
damals zumindest Mängel und liest ev. nicht alle Dateien.

von Olli Z. (z80freak)


Lesenswert?

Danke! Das goJTAG werden ich mir mal genauer ansehen, es scheint das zu 
sein was ich suche!

von 123 (Gast)


Lesenswert?

Nabend,

die IEEE Norm beschreibt Bei JTAG wie man mit den 3 Leitungen mit irgend 
jemanden reden kann. Mehr nicht. ggf noch boundery scan im ganz ganz 
groben.
Was die Register zu bedeuten haben, wie gross diese sind, ... haben 
andere zu beschreiben.

ARM selber beschreibt dann auf basis der Norm wie man über JTAG z.B. Mit 
einem ARM7 / ARM9 Core reden kann Atmel hingegen wie mit einem ATMEGA, 
XILINX wie mit ihren FPGAs, ... bzw wie viele reister es gibt. und was 
diese bedeuten.
Die Meisten MCUs bilden 2 funktionen über JTAG ab. Den Bounderyscann und 
einmal das Core debugging.

Beim Bondery scan geht die SCAN line mehr oder weniger einmal an allen 
pins vorbei. Damit lassen sich die Zustände aller Pins einlesen bzw 
setzen.

Beim Core Debugging ist es eigentlich das gleiche nur geht die SCAN Line 
einmal um den MCU Core (z.B. ARM7DTMI) Liegt somit zwischen ARM core und 
der internen Periferie. (Funktionseinheiten  RAM  FLASH) Du kannst 
damit den internen zustand des cores auslesen. oder auch den ganzen core 
simuliern.

SWD ist der nachfolger von JTAG. JTAG ist halt prinzip bedingth sehr 
sehr langsam / bzw sehr sehr inefizient. Wobei ich SWD nur bei ARM 
cortex cores gesehen habe. (ob das auch jemand anders einsetzt keine 
ahnung)

ARM hat sowohl zu JTAG als auch zu SWD recht umfangreiche Dokumente. 
Eines davon ist ja schon genant worden.

von Olli Z. (z80freak)


Lesenswert?

123 schrieb:
> die IEEE Norm beschreibt Bei JTAG wie man mit den 3 Leitungen mit irgend
> jemanden reden kann. Mehr nicht. ggf noch boundery scan im ganz ganz
> groben.
> Was die Register zu bedeuten haben, wie gross diese sind, ... haben
> andere zu beschreiben.

Ich verstehe was Du mir sagst und kann das in der Theorie alles 
nachvollziehen. Leider bin ich kein Akademiker und es daher eher gewohnt 
mein Wissen durch Praxiserfahrung zu erweitern und nicht bloß aus der 
Theorie. Ich will Dich und andere damit weder bremsen noch abwerten, 
alles was ihr schreibt ist wichtig und sinnvoll! Nur würde ich das gern 
selbst sehen, machen, ausprobieren und genau da drückt mich der Schuh 
weil ich das bislang nicht hinbekommen habe.

Glaubt bitte nicht das ich hier alles auf dem Silbdertablett präsentiert 
haben möchte, ich habe mir wirklich mehrere Dutzend Abhandlungen über 
das Thema reingezogen, neben IEEE-Dokumenten auch Datenblätter von 
Herstellern, Präsentationen von Unis und Embedded-Veranstaltungen, 
privaten und kommerziellen Homepages, Videos und und und. Nur, wie schon 
gesagt, war da nie etwas bei was auch ICH Dödel hätte tun können und 
irgendwie brauch ich das um zu kapieren.

Ich weiss Eure Bemühungen wirklich zu schätzen und hoffe das ich diesen 
Thread auch mal mit Ergebnissen füttern darf, für all die Anfänger und 
einfachen Hobbybastlern wie mich :-)

Der Hinweis auf "goJTAG" (http://www.gojtag.com/) scheint genau die 
Lücke zu füllen die ich bislang in meinem Wissen sehe, TOP! Vielen Dank 
dafür!

Der dort beispielhaft verwendete PicoTAP Adapter von Göpel scheint laut 
dem beiliegenden Schaltplan 
(www.gojtag.com/sites/default/files/PICOTAP_SCHEMATIC.pdf) sehr einfach 
nachzubauen zu sein und besteht im Grunde nur aus einem FT2232H Chip, 
wie er z.B. im Olimex ARM-USB-OCD-H drin ist. Auf der Seite wird damit 
geworben das man diesen Adapter kostenlos(!?) von Göpel zu 
nicht-kommerziellen Einsatzzwecken erhalten könne. Das kann ich ja kaum 
glauben und fände ich ja fast schon unanständig ;-) Womöglich gilt das 
aber auch schon nicht mehr da der Artikel darüber von 2011 ist.

Ich brauche jetzt mal ein paar Tage um das was ich dort finde alle 
aufzusaugen und werde gern berichten!

Nochmal ein großes Lob und Danke an Euch!

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Du konzentrierst dich immer noch zu sehr auf den JTAG Adapter. Den 
kannst du für wenige Euro fertig kaufen. Besorge Dir lieber einen Logic 
Analyzer (falls du noch keinen hast), damit kannst du Dir die 
Kommunikation anschauen und nachvollziehen.

Wenn du wirklich mit JTAG experimentieren willst, musst du zuerst einen 
Chip finden, bei dem die JTAG Features offen und für Dich verständlich 
dokumentiert sind. Und dann brauchst du für diesen Chip eine halbwegs 
reale Anwendung, damit die ganze Aktion nicht völlig an der Praxis 
vorbei geht. Denn:

> Leider bin ich kein Akademiker und es daher eher gewohnt
> mein Wissen durch Praxiserfahrung zu erweitern

Besorge oder baue Dir einen JTAG Adapter, nachdem klar ist, welchen Chip 
du damit debuggen möchtest.

Bei der ganzen Aktion solltest du nicht vergessen, dass JTAG nicht nur 
zum Debuggen von Mikrocontrollern da ist. Man kann damit die Funktion 
kompletter Geräte prüfen. Beim PC kann man über das JTAG Interface das 
gesamte Mainboard überprüfen (ging zumindest früher mal), wenn man denn 
die Doku dazu hat.

By the way: wir hatten die selbe Diskussion für Dich schon vor ein 
paar Monaten: Beitrag "Wie funktioniert JTAG?" Lies Dir das 
nochmal durch, du wirst sehen, dass du im Prinzip die gleichen Antworten 
schon einmal bekommen hast.

von Purzel H. (hacky)


Lesenswert?

Die Basics ?
Es gibt SPI, einen Kurzdistanzlink, der auf Schieberegistern basiert. 
Der Master und der Slave haben jeder ein Schieberegister. Die sind per 
MISO (master in slave out), MOSI (master out slave in), SCLK (clock) 
gekoppelt. Der Master schiebt nun die Werten durch das Schieberegister 
zum slave, waehrend gleichzeitig, irgendwas vom Slave zum Master 
geschoben werden kann. Der Master gibt den clock (SCLK) vor.

Nun haengt man alle Register, und Speicher eines Devices als 
Schieberegister in Serie, und erhaelt JTAG.

Vereinfacht. JTAG ist ein erweitertes SPI.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Olli Z. schrieb:
> Auch meine Bemühungen hier im Forum Infos über JTAG zu bekommen sind
> mehr oder weniger erfolglos geblieben.

Das wundert mich nicht.

Der Grund dafür ist, daß JTAG eigentlich ein serielles Interface zum 
Testen von Baugruppen auf Löt- und Kontakt-Problemen ist. Die Leute hier 
im Forum wissen das aber zumeist garnicht und denken, es sei ein 
Programmier- und Debug-Interface für ihre µC.

Aber eben diese Programmier- und Debug-Verwendung ist erstens so im 
Ursprung garnicht vorgesehen und zweitens herstellerabhängig. Deshalb 
wirst du genau darüber nirgendwo ein allgemein gültiges Tutorial finden.

Ws du finden kannst, sind Dokumentationen zur ursprünglichen 
JTAG-Verwendung, also für die Fälle, wo tatsächlich ein ganzes Board auf 
korrekte Verlötung getestet werden soll.

W.S.

von Cyblord -. (cyblord)


Lesenswert?

W.S. schrieb:
> Der Grund dafür ist, daß JTAG eigentlich ein serielles Interface zum
> Testen von Baugruppen auf Löt- und Kontakt-Problemen ist. Die Leute hier
> im Forum wissen das aber zumeist garnicht und denken, es sei ein
> Programmier- und Debug-Interface für ihre µC.

Aha. Na klar. Das weiß hier niemand, ausser dich.
Du kannst dir merken: So blöd wie du sind wir schon lange.

> Aber eben diese Programmier- und Debug-Verwendung ist erstens so im
> Ursprung garnicht vorgesehen und zweitens herstellerabhängig. Deshalb
> wirst du genau darüber nirgendwo ein allgemein gültiges Tutorial finden.

Und DAS hat ihm bisher fast jeder versucht zu erklären.
Weil den meisten Leuten hier, genau DIESE Problematik mit JTAG völlig 
klar ist.

Aber wenn ich vom TE so was lesen muss:


> Ich verstehe was Du mir sagst und kann das in der Theorie alles
> nachvollziehen. Leider bin ich kein Akademiker und es daher eher gewohnt
> mein Wissen durch Praxiserfahrung zu erweitern und nicht bloß aus der
> Theorie.

dann weiß ich nicht ob der Verweis auf die JTAG Spec oder auch nur das 
Datenblatt eines STM32 wirklich sinnvoll ist.

: Bearbeitet durch User
von Simon H. (simi)


Lesenswert?

Ohne jetzt den ganzen Thread durchgelesen zu haben...


Wenn ich Dich richtig verstehe, willst Du verstehen, was "unter der 
Haube" passiert. Dann würde ich doch vorschlagen, mal in den OpenOCD 
Code reinzuschauen. Darin wirst Du die ganze "Magie" finden.

Bei mir war es übrigens auch so, dass es eine Weile dauerte, bis ich 
begriff, dass da viele eigene Süppchen gekocht werden. Ich dachte immer, 
dass da doch was Standardisiertes vorhanden sein muss! Und suchte nach 
diesem Gemeinsamen Nenner, den es halt nicht gibt (oder der halt viel 
kleiner ist, als ich zumindest dachte).

von 123 (Gast)


Lesenswert?

Malzeit,

Kennt noch jemand den Wigler / Raven als JTAG TAP? Die Dinger die den 
LPT des PCs zum debuggen verwendet wurden. Einer davon war glaube ich 
ein rein passiver, recht günstig aber auch grotten langsam.

ggf kann man daran und einem Open source Projekt das bit banging für den 
JTAG ergründen.

Der FTDI wird vermutlich schon sehr viel intern machen zumindest wird 
JTAG als modus im datenblat des FTDI ewähnt.

Beitrag #5578484 wurde von einem Moderator gelöscht.
Beitrag #5578490 wurde von einem Moderator gelöscht.
Beitrag #5578494 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Olli Z. schrieb im Beitrag #5578490:
> Daher suche ich jemand der mir
> nachvollziehbare Schritte schreiben kann wie unter Atmega z.B. A nach B
> kommt.

Das hat mit JTAG etwa so viel zu tun, wie Kochen mit Elektrikern.

> Eigentlich müsste Jtag doch Jtag sein und es überall klappen.

Zum 100ten mal: Nein. JTAG ist eine simple auf Schieberegister basiertes 
serielles Übertragung. Wenn du damit ATmega Mikrocontroller auslesen 
willst, musst du die zugehörige Software benutzen. Zum Beispiel 
AVR8-Burn-o-mat (basiert auf avrdude) und einen dazu kompatiblen 
Programmieradapter.

Im übrigen ist JTAG auf ATmega Mikrocontrollern schon vor langer langer 
Zeit durch die ISP Schnittstelle ersetzt worden.

> Mit den Segger und J-Flash habe ich bereits versucht,
> den Flash eines Gerätes ausgelesen, dabei
> wurde aber das Gerät zerstört.

Zeige den kompletten Schaltplan des Gerätes bis zum JTAG Adapter, Foto 
vom Aufbau, benenne die verwendete Software mit ihren Einstellungen. 
Dann kann man Dir vielleicht aufzeigen, was du falsch gemacht hast.

Beitrag #5578754 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Olli Z. schrieb im Beitrag #5578754:
> Und warum soll es damit nicht gehen?

Weil Dir die Anleitung für das jeweilige Gerät fehlt. Mit der richtigen 
Anleitung wird es funktionieren.

Kaufe Dir lieber einen Atmel ICE Adapter, dessen Schnittstelle zum PC 
hin ist klar dokumentiert.

Nur hast du dann dein Ziel nicht wirklich erreicht. Denn wenn du einen 
bestimmten ATmega auslesen kannst, kannst du eben nur diesen ATmega 
auslesen. Bei STM32 funktioniert das wieder ganz anders, und wenn du ein 
PC Mainboard testen willst, geht es wieder anders.

von Olli Z. (z80freak)


Lesenswert?

Bitte fallt nicht auf diesen dummen Menschen rein der nun versucht 
überall unter meinem Namen seinen Minderwertigkeitskomplex auszuleben. 
Ich schreibe ausschließlich nur eingelogged, nie als Gast! Ihr merkt es 
aber auch schon am Schreibstil. So würde ich nicht formulieren. Einfach 
ignorieren, ich melden jeden seiner Beiträge und habe auch schon einen 
Antrag auf Feststellung seiner IP gestellt. Irgendwann verliert er die 
Lust. ICH lasse mich durch solche dummen Menschen die nichts besseres 
mit ihrer Freizeit anzufangen wissen jedenfalls nicht irritieren und das 
solltet ihr auch nicht :-)
Dieser Betrag wird sicher auch bald gelöscht. Armer Mod, hat richtig was 
zu tun mit diesem Zaungast.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefanus F. schrieb:
> Das hat mit JTAG etwa so viel zu tun, wie Kochen mit Elektrikern.

 Wieso?
 Elektriker können nicht kochen?

von Olli Z. (z80freak)


Lesenswert?

"Und da waren sie wieder, meine drei Probleme"... Ich bekomme den Olimex 
Adapter nicht mit goJTAG ans laufen, er wird einfach nicht erkannt :-(
Habe schon alles mögliche ausprobiert, Originaltreiber von FTDI, 
umprogrammieren der INF Dateien laut Datenblatt, umprogrammieren der 
VID/PID im EEPROM des FT2232H Chips des Olimex auf FTDI Defaultwerte, 
als auch die die der PicoTAP Adapter von Göpel nutzt.
Der PicoTAP nutzt ja den selben Chip. Warum ignoriert die Software den 
vom Olimex?

Hab auch schon in den Java Quellcode geschaut wo die Interfaces 
enumeriert werden. Einen direkten Vergleich von VID und PID habe ich 
dort nicht gefunden. Es werden einfach alle FDTI Interfaces genommen die 
hinten kein " B" haben, also eben nur Port A.
Leider finde ich keinen Debugschalter zum starten, sodass ich 
Logmeldungen sehen könnte, aber meine Java Kenntnisse sind auch recht 
bescheiden.

Habt ihr noch eine Idee?

Olli Z. (nur echt mit dem (z80freak) dahinter :-)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Ich bekomme den Olimex Adapter nicht mit goJTAG ans laufen,
> er wird einfach nicht erkannt :-(

Welchen Olimex Adapter konkret, und wie lautet die Fehlermeldung?
Wie wird der Adapter in der Systemsteuerung angezeigt?

Bist du ganz sicher dass dein Adapter dem Schaltplan des PicoTAP 
entspricht?
http://www.gojtag.com/sites/default/files/PICOTAP_SCHEMATIC.pdf

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Stefanus F. schrieb:
>> Ich bekomme den Olimex Adapter nicht mit goJTAG ans laufen,
>> er wird einfach nicht erkannt :-(
>
> Welchen Olimex Adapter konkret, und wie lautet die Fehlermeldung?
Olimex ARM-USB-OCD-H und der hat einen FTDI2232H, genau wie der PicoTAP.

> Wie wird der Adapter in der Systemsteuerung angezeigt?
Einmal als Gerät und einmal als virtueller COM-Port, so wie es der 
Treiber vorsieht. Aktuell habe ich als VID/PID die Kombi: 0403 und 6010, 
also FTDI-Default.

> Bist du ganz sicher dass dein Adapter dem Schaltplan des PicoTAP
> entspricht?
> http://www.gojtag.com/sites/default/files/PICOTAP_SCHEMATIC.pdf
Nein, da ich vom Olimex keinen Schaltplan habe, aber der USB-Chip ist 
zumindest derselbe. Er könnte also, aber will nicht. Irgendwie sieht er 
den FTDI nicht als den Chip den er sehen möchte.

Im DeviceConnectDialog.java findet sich dieser Source:
1
  private void constructUsbPanel() {
2
    // Initialize
3
    usbPanel = new JPanel();
4
    usbPanel.setName("PicoTAP USB (FTDI based)");
5
    comboUsbDevice= new JComboBox();
6
    String[] devices = null;
7
    try {
8
      // try to enumerate connected chips
9
      devices = UsbFtdiPort.enumerate();
10
    } catch (Throwable t) {
11
      // Some error
12
      devices = null;
13
    }
14
15
    if ((devices != null) && (devices.length > 0)) {
16
      comboUsbDevice.setModel(new DefaultComboBoxModel(devices));
17
      comboUsbDevice.setEnabled(true);
18
    } else {
19
      comboUsbDevice.setModel(new DefaultComboBoxModel(
20
          new String[] {"No FTDI devices connected"}));
21
      comboUsbDevice.setEnabled(false);
22
    }

Er findet also keine FTDI-Ports, obwohl das Gerät einwandfrei im 
Gerätemanager angezeigt wird. Die Treiberversion ist 2.12.28.0

Die enumerate-Routine ist ebenfalls überschaubar:
1
  public static String[] enumerate()
2
  {
3
    String[] devices = null;
4
    
5
    int devCount = FtdiLibrary.INSTANCE.getFtdiDeviceCount();
6
    if(devCount == -1)
7
      return devices;
8
    
9
    byte[] deviceNames = new byte[devCount * 64]; //allocate buffer
10
    devices = new String[devCount]; //and strings for device names
11
12
    int ret = 
13
    FtdiLibrary.INSTANCE.enumerateDevices(deviceNames, devCount); //store device names to byte buffer
14
    if(ret == -1)
15
    {
16
      System.err.println("UsbFtdiPort: Unable to enumerate devices");
17
    //  throw new PortException("Cannot read IO port value");
18
      return devices;
19
    }
20
    
21
    int devCountPortA = 0;
22
    for(int i = 0; i < devCount; i++)
23
    {
24
      int strSize;
25
      for(strSize = 0; strSize < 64 && deviceNames[i*64 + strSize] != 0; strSize++); //get real string size
26
      devices[i] = new String(deviceNames, i*64, strSize, Charset.forName("US-ASCII"));
27
      
28
      // Only count the first port of FTDI chip
29
      if (devices[i].endsWith(" B"))
30
        devices[i] = null;
31
      else
32
        devCountPortA++;
33
    }
34
    
35
    // Filter "port B" devices
36
    String[] devicesPortA = new String[devCountPortA];
37
    devCountPortA = 0;
38
    for (int i = 0; i < devCount; i++) {
39
      if (devices[i] != null)
40
        devicesPortA[devCountPortA++] = devices[i];
41
    }
42
    
43
    return devicesPortA;
44
  }

Ich weiss jedoch nicht genau woher die FTDI funktionen stammen. 
Scheinbar wird diese Klasse aus einer Bibliothek namens "jtagctrl" 
geladen:
1
public class UsbFtdiPort implements Port {
2
  
3
  public interface FtdiLibrary extends Library {
4
    FtdiLibrary INSTANCE = (FtdiLibrary)Native.loadLibrary("jtagctrl",FtdiLibrary.class);

Aber wie gesagt, ich bin nicht der Java-Crack... :-(

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

ES KLAPPT! So schnell kanns gehen :-) Als ich den Beitrag oben schrieb 
ist mir die "jtagctrl.dll" Datei im Programmverzeichnis von goJTAG 
aufgefallen. Die habe ich mal kurz untersucht und die Einstiegspunkte 
für die prozeduren gefunden die ich oben im Javacode vermisst habe. Dann 
habe ich die Datei mal umbenannt und geschaut ob sich das Programm 
anders verhält (ich hätte eine Java-Exception oder sonstige 
Fehlermeldung erwartet), aber nichts.
Dann habe ich den Programmpfad im Startbatch für die gojtag.jar 
hinzugefügt und siehe da, es klappt! Nun lädt er die DLL und kann auch 
den Adapter erkennen. Vermutlich sogar mit der originalen Olimex 
VID/PID, das probier ist jetzt mal als nächstes aus.

Hier mein Start-Batch (von hause aus war beim Programm keins dabei):
1
@echo off
2
set PATH=%~dp0\jre\bin;%~dp0;%PATH%
3
set CLASSPATH=.;%~dp0
4
start javaw -jar gojtag.jar

von Stefan F. (Gast)


Lesenswert?

Schön dass du die Lösung hier präsentiert hast. Das vergessen die Leute 
oft.

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.