EJTAG

From Fritz!Box
Jump to: navigation, search

AVM Wiki >> Zubehör >> EJTAG @ whmf   -   IRC-Chat   -   hu nl it English
Community Modelle Zubehör Environment Konfiguration Shell-Befehle Software Freetz Lexikon Tipps+Tricks Bilder

Telefone+Anlagen WLAN-Zubehör ISDN+DSL-Karten Externe Modems Sonstiges Zubehör Bauanleitungen Todo

Contents

EJTAG.2.jpg
2x14 Pin TI EJTAG an AR7 und UR8 Modellen
EJTAG 7390.jpg
EJTAG an der 7390 (rechts daneben Serielle Konsole)

Begriff

Dasychain Blockschaltbild

JTAG, kurz für Joint Test Action Group, ist ein in IEEE 1149.1 standardisierter, serieller Bus, der in erster Linie zum Prüfen und Steuern von integrierten Schaltungen (IC) während Entwicklung gedacht ist; EJTAG ist eine Erweiterung dieses Standards durch den Hersteller MIPS. Die JTAG-Schnittstelle ermöglicht es, auch auf interne Teile eines IC zuzugreifen, die normalerweise, d.h. über die eigentlich für den Betrieb vorgesehenen Anschlüsse nicht zugängig sind.

JTAG-fähige Bausteine verfügen über fünf Steuerleitungen und können in einer Kette hintereinander geschaltet werden. Während die Taktleitung alle Bausteine parallel bedient, wird der Datenausgang eines IC mit dem Dateneingang des nachfolgenden verbunden. Die Daten werden dann wie in einer Eimerkette von einem IC zum nächsten weitergereicht.

TAP State

Artikel zum Thema

  • Die ursprüngliche Anleitung von HaryDaryMaid und feadi, wie eine FBF 7050 über EJTAG zu flashen ist, gibt es in der Linkliste.
  • Aktuelle wrtjp Softwareversion: IPPF-Posting (Version 5.1 angpasst von Johann Pascher). Momentan sind alle Boxen flashbar.
  • ggf. weitere

Hardware

Die meisten Fritz!Boxen haben auf der Unterseite der Platine einen 2×14-poligen EJTAG-Anschluss. Bei der 7390 (und anderen?) ist das ein 2×7 poliger Anschluss. Das Original-EJTAG-Pinout aus der MIPS-EJTAG-Spezifikation, S. 122 ist wie folgt:

Pinbelegung
   TRST  + o  GND
    TDI  o o  GND
    TDO  o o  GND
    TMS  o o  GND
    TCK  o o  GND
    RST  o    key
   DINT  o o  VIO (3,3V)

Das Original-JTAG-Pinout für die TI DSP C6000-Serie ist wie folgt:

TMS      o o  TRST
TDI      o o  GND
PD(Vcc)  o    key
TOD      o o  GND
TCK_RET  o o  GND
TCK      o o  GND
EMU0     o o  EMU1

Dem ersten Pinout folgt auch der Anschluss auf der Unterseite der Fritzbox.

Um den EJTAG-Anschluss zu benutzen, benötigt man im einfachsten Fall einen PC mit Parallelport und ein geeignetes EJTAG-Kabel. Im Link oben findet man die "passive" Variante des Xilinx DLC5-Kabels, das nur aus einem männlichen DB-25Stecker, fünf Widerständen und einem Stück Flachbandkabel besteht. Bei diesem Kabel wird die "Pegelwandlung" zwischen PC-Parallelport und EJTAG mit Hilfe von simplen Vorwiderständen zur Strombegrenzung und den Eingangsschutzdioden des AR7 vorgenommen. Das funktioniert "meistens", aber das Kabel sollte nicht länger als ca. 20cm werden. Wenn es nicht funktioniert oder das Kabel länger sein soll, benötigt man eine "aktive" Variante des Kabels, die einen 74HC244 oder ähnlich zur Pegelanpassung verwendet. Der oft zitierte Nachteil, ein solches Kabel brauche eine Stromversorgung, ist hier keiner, da die 3.3 V VIO am EJTAG-Anschluss zur Verfügung stehen. Mehr Details dazu gibt es im OpenWrt-Wiki.

Das Flachbandkabel kann man - entsprechendes Geschick vorausgesetzt - direkt an der Platine anlöten. Dabei sollte man nach Möglichkeit abwechselnd eine Ader für ein Signal und die nächste als Masseleitung verwenden. Das macht die Verbindung etwas störsicherer und entspricht auch der Belegung bei der Verwendung von Schneid-Klemm-Federleisten.

Etwas eleganter ist natürlich die Verwendung einer zweireihigen Pfostenleiste im 1,27 mm-Raster, die man auf die Platine auflötet. Darauf kann man dann einfach z.B. eine kleine Adapterplatine mit dem passenden Gegenstück aufstecken. Passende Stiftleisten gibt es z. B. bei SAMTEC in der CLP-Serie. Bestellen kann man sie z.B. bei Farnell oder direkt bei Samtec. Bei Reichelt und Conrad bisher nicht gefunden.

Software

Ein für 14 Tage kostenlos verwendbares Tool, das verwendet werden könnte, um den JTAG-Bus zu scannen: IPPF-Posting

wrt54g

wrt54g debrick-Utility von HairyDairyMaid

Das ist das klassische JTAG-Flash-Utility aus der OpenWrt-Szene und funktioniert auch mit den Fritz!Boxen. Der Sourcecode kann bei Openwrt heruntergeladen werden. Ab Version 0.45 ist der AR7-Prozessor bereits ins Programm eingebaut und wird erkannt. Bei neueren Boxen mit meheren ICs in der Kette ist das nicht der Fall, und es müssen wie von feadi beschrieben die Parameter

/skipdetect
/instrlen:5

angegeben werden. Funktioniert jedoch sehr unzuverlässig und man muss die Kettenlänge kennen.

wrtjp

wrtjp v5.1 im IPPF von Johann Pascher

Eine erweiterte HairyDairyMaid-Software, die auch einen W701 erkennt, heißt wrtjp. Diese ist auch bei allen AVM-Routern brauchbar. wrtjp Version v5.2 (IPPF-Posting) ist um viele CPU- und Flash-Typen erweitert worden sollte big und little endian unterstützen, jedoch gibt es bis jetzt keine Erkennung der CPUs (IKS6850), die im W722 und in der 7390 verwendet werden. BSDL-Datei für diese CPU wird dringend gesucht! Es ist zu beachten, dass man unter Windows die giveio.sys braucht. Das beiliegenden Tool (ddw_ntdriver.exe) registriert den Dienst, Gleiches gilt für die originale HairyDairyMaid-Software.

Folgende Kommndozeile funktioniert praktisch bei allen AVM-Routern:

Urlader lesen: 
wrtjp.5.1 -backup:custom /bypass /skipdetect /instrlen:5 /window:90000000 /start:90000000 /length:10000

Urlader schreiben: 
wrtjp.5.1 -flash:custom /bypass /skipdetect /instrlen:5 /window:90000000 /start:90000000 /length:10000

Das Flash-Layout der Fritz!Boxen ist nicht ins Programm eingebaut. Daher werden immer die "custom"-Varianten der Befehle verwendet und die Adressen der Flash-Bereiche manuell angegeben. Die Parameter dafür lauten wie folgt:

/window:90000000 # Basisadresse des Flash-EPROMs
/start: <startadresse in HEX>
/length: <länge in HEX>

Dabei gilt für /start und /length:

Flashgröße Bereich mtd /start /length
4MiB/8MiB Urlader mtd2 90000000 10000
16MiB Urlader mtd2 90000000 20000
4MiB Kernel/FS mtd0 90010000 3B0000
Environment 1 mtd3 903C0000 20000
Environment 2 mtd4 903E0000 20000
8MiB Kernel/FS mtd0 90010000 7B0000
Environment 1 mtd3 907C0000 20000
Environment 2 mtd4 907E0000 20000
16MiB Kernel/FS mtd0 90020000 F60000
Environment 1 mtd3 90F80000 40000
Environment 2 mtd4 90FC0000 40000

Beispiel Backupprozedere von einem 7113:

==================================================
WRT54G/GS/AVM/Speedport EJTAG Debrick Utility v5.1
==================================================

***--------------------------------------------------------------------------------------------------------------***

Beginning dedect scan leangth... 
Switch on power!...
Chain lenght: 14 IR-Chain: 00010010000011 (00000483)
Probing bus ...

*** CHIP Device number: '1' SET BY COMMANDLINE OPTION ***
Device number: '1' Chip ID: 00000000000000000001000000001111 (0000100F)
 *** Found a TI AR7WRD TNETD7200ZWD Rev 1 CPU chip ***
Device number: '2' Chip ID: 00001011011011000000000000101111 (0B6C002F)
 *** Found a 0B6C002F ????? chip ***
Device number: '3' Chip ID: 00010001110000010000000010010011 (11C10093)
 *** Found a XC3S100E FPGE chip ***
---- Selected: '1' Chip ID: 00000000000000000001000000001111 (0000100F)
 *** Found a TI AR7WRD TNETD7200ZWD Rev 1 CPU chip ***


Count devives: '3' selected device: '3' count header bits added to DR: '2' count trailing bits added to DR: '0'
Chain length: '14' Selected IR length: '5' Sum of added header bits to IR: '9' Sum of added trailer bits to IR: '0'

Chip ID: 00000000000000000001000000001111 (0000100F)
 *** Found a TI AR7WRD TNETD7200ZWD Rev 1 CPU chip ***

check EJTAG ... 
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG IMPCODE ....... : 01000001010000000100000000000000 (41404000)
    - EJTAG Version ....... : 2.6
    - EJTAG DMA Support ... : No


Issuing Processor / Peripheral Reset ... 
Done
-- > Halting Processor ... 
<------ Processor Entered Debug Mode ------>
Clearing Watchdog (0xb8000080) ... Done

Probing Flash at (Flash Window: 0x90000000) Done

Flash Vendor ID: 00000000000000000000000011000010 (000000C2)
Flash Device ID: 00000000000000000010001001111110 (0000227E)
*** Found a MX  29lv640MTTC 2Mx16 TopB (8MB) Flash Chip ***

    - Flash Chip Window Start .... : 90000000
    - Flash Chip Window Length ... : 00400000
    - Selected Area Start ........ : 90000000
    - Selected Area Length ....... : 00010000

*** You Selected to Backup the CUSTOM.BIN ***
 100%   byte count: 65536
Done  (CUSTOM.BIN.SAVED_20090812_132627 saved to Disk OK)

bytes written: 65536
=========================
Backup Routine Complete
=========================
elapsed time: 264 seconds


 *** REQUESTED OPERATION IS COMPLETE ***

openwince

jtag-Tools des openwince-Projekts

Es gibt eine um EJTAG erweiterte Version der jtag-Tools aus dem openwince-Projekt, das ebenfalls verwendet werden kann. Nach Auspacken der ZIP-Datei kann man die Software mit folgenden Kommandos bauen:

$ patch -p1 <<'EOF'
--- b/src/flash.c       2006-02-28 19:49:27.000000000 +0100
+++ a/src/flash.c       2007-03-25 12:22:21.000000000 +0200
@@ -64,7 +64,7 @@
 };
 
 extern cfi_array_t *cfi_array;
-static flash_driver_t *flash_driver = NULL;
+flash_driver_t *flash_driver = NULL;
 
 static void
 set_flash_driver( void )
EOF
$ ./configure --with-include=$PWD/include-0.4.2
$ make

In den jtag-Tools ist keine Beschreibung des AR7 oder der Fritz!Boxen enthalten, so dass man die Parameter entweder manuell einstellen oder mit folgendem Skript setzen kann (ist im Prinzip eine erweiterte Kopie des ADM5120-Skripts aus den jtag-Tools):

cable ppdev /dev/parport0 DLC5
detect

register        BR               1
register        BSR              1
register        DIR             32
register        EJIMPCODE       32
register        EJADDRESS       32
register        EJDATA          32
register        EJCONTROL       32
register        EJALL           96
register        EJFASTDATA      33

instruction length 5

instruction     BYPASS          11111   BR
instruction     SAMPLE/PRELOAD  00010   BSR
instruction     IDCODE          00001   DIR
instruction     EJTAG_IMPCODE   00011   EJIMPCODE
instruction     EJTAG_ADDRESS   01000   EJADDRESS
instruction     EJTAG_DATA      01001   EJDATA
instruction     EJTAG_CONTROL   01010   EJCONTROL
instruction     EJTAG_ALL       01011   EJALL
instruction     EJTAGBOOT       01100   BR
instruction     NORMALBOOT      01101   BR
instruction     EJTAG_FASTDATA  01110   EJFASTDATA

initbus ejtag
endian little
detectflash 0x30000000
print

Warum das Flash hier bei Adresse 0x30000000 erscheint, ist seltsam. Mit diesem Skript erhält man z.B. folgende Ausgabe (4MiB Fritz!Box Fon ATA mit Macronix Flash):

$ ./src/jtag 
JTAG Tools 0.6-cvs-20051228
Copyright (C) 2002, 2003 ETC s.r.o.
JTAG Tools is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for JTAG Tools.

Warning: JTAG Tools may damage your hardware! Type "quit" to exit!

Type "help" for help.

jtag> script init.fbox
Initializing Xilinx DLC5 JTAG Parallel Cable III on ppdev port /dev/parport0
IR length: 5
Chain length: 1
Device Id: 00000000000000000001000000001111
Cannot open /usr/local/share/jtag/MANUFACTURERS
  Unknown manufacturer!
chain.c(110) Part 0 without active instruction
chain.c(133) Part 0 without active instruction
chain.c(110) Part 0 without active instruction
ImpCode=01000001010000000100000000000000
EJTAG version: 2.6
EJTAG Implementation flags: R4k DINTsup ASID_8 NoDMA MIPS32
dev ID=22a7   man ID=00c2
Using CFI flash chip detection, not jedec
Query identification string:
        Primary Algorithm Command Set and Control Interface ID Code: 0x0002 (AMD/Fujitsu Standard Command Set)
        Alternate Algorithm Command Set and Control Interface ID Code: 0x0000 (null)
Query system interface information:
        Vcc Logic Supply Minimum Write/Erase or Write voltage: 2700 mV
        Vcc Logic Supply Maximum Write/Erase or Write voltage: 3600 mV
        Vpp [Programming] Supply Minimum Write/Erase voltage: 0 mV
        Vpp [Programming] Supply Maximum Write/Erase voltage: 0 mV
        Typical timeout per single byte/word program: 16 us
        Typical timeout for maximum-size multi-byte program: 0 us
        Typical timeout per individual block erase: 1024 ms
        Typical timeout for full chip erase: 0 ms
        Maximum timeout for byte/word program: 512 us
        Maximum timeout for multi-byte program: 0 us
        Maximum timeout per individual block erase: 16384 ms
        Maximum timeout for chip erase: 0 ms
Device geometry definition:
        Device Size: 4194304 B (4096 KiB, 4 MiB)
        Flash Device Interface Code description: 0x0002 (x8/x16)
        Maximum number of bytes in multi-byte program: 1
        Number of Erase Block Regions within device: 2
        Erase Block Region Information:
                Region 0:
                        Erase Block Size: 8192 B (8 KiB)
                        Number of Erase Blocks: 8
                Region 1:
                        Erase Block Size: 65536 B (64 KiB)
                        Number of Erase Blocks: 63
 No. Manufacturer              Part                 Stepping Instruction          Register  
---------------------------------------------------------------------------------------------
   0                                                         EJTAG_DATA           EJDATA    

Active bus:
*0: EJTAG compatible bus driver via PrAcc (JTAG part No. 0)
        start: 0x00000000, length: 0x20000000, data width: 8 bit
        start: 0x20000000, length: 0x20000000, data width: 16 bit
        start: 0x40000000, length: 0x20000000, data width: 32 bit
jtag> 

Und hier noch ein Beispiel für das Auslesen des AR7-Bootroms, z.B. zur Verwendung im AR7 qemu als mips_bios.bin:

jtag> readmem 0x1fc00000 4096 mips_boot.bin
address: 0x1FC00000
length:  0x00001000
reading:
addr: 0x1FC01000
Done.
jtag> quit
$ od -tx1 mips_boot.bin | head
0000000 04 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00
0000020 00 10 08 0c 61 a8 1a 3c 00 1a 5a 37 00 00 5a 8f
0000040 07 00 5a 33 01 00 01 24 13 00 41 13 00 00 00 00
0000060 02 00 01 24 13 00 41 13 00 00 00 00 03 00 01 24
0000100 1a 00 41 13 00 00 00 00 04 00 01 24 1a 00 41 13
0000120 00 00 00 00 05 00 01 24 21 00 41 13 00 00 00 00
0000140 06 00 01 24 1e 00 41 13 00 00 00 00 07 00 01 24
0000160 17 00 41 13 00 00 00 00 00 b0 1a 3c 08 00 40 03
0000200 00 00 00 00 61 a8 1a 3c 08 16 5a 37 00 00 5a 8f
0000220 03 00 5a 33 03 00 01 24 f7 ff 41 17 00 00 00 00

Galerie

Bitte die Galerie nach Belieben mit eigenen Werken erweitern, auch per E-Mail. Siehe auch die Inspiration zu Bildern.

Siehe auch

Elektronik: (113)

Anschlussbelegungen: (69) (im Bau)

12V DC Trafo-Netzteile:

13V DC Schaltnetzteile:

12V DC Schaltnetzteile:

Noch unbekannte Netzteile:

Wechselspannungs-Netzteile:

  • AVM01012 (TODO: 8V 500mA 4VA 2: 22V 220mA 4.84VA, UK)
  • AVM01014 (8V AC, 5.2VA + 22V AC, 5.3VA)
  • AVM01019 (6.7V AC, 3VA + 22V AC, 2.4VA)
  • AVM01022 (TODO: Vermutlich 8V AC + 22V AC)
  • AVM01023 (TODO: 5V 480mA + 22V 171mA)
  • AVM01026 (5V AC, 3.9VA + 22V AC, 3.7VA)
  • AVM01028 (TODO: FRITZ!X USB v3.0 int)
  • AVM01029 (TODO: Teledat X130 DSL)
  • AVM01031 (5.2V AC, 4VA + 22V AC, 3.7VA)
  • AVM01034 (TODO: BlueFRITZ! DSL?)

Links

  1. http://www.xjtag.com/support-jtag/jtag-technical-guide.php
    http://www.universalscan.com
    Grundlagen erklärt und freie Testsoftware für 30 Tage kostenlos verwendbar zum runterladen
  2. http://www.topjtag.com/probe/
    JTAG/Boundary-Scan Testsoftware zur Schaltung Visualisierung und Debuggen (20 Tage kostenlos).
  3. http://www.topjtag.com/flash-programmer/
    Programmierung Flash über Boundary-Scan (JTAG).
  4. http://feadispace.fe.funpic.de/
    ursprüngliche Beschreibung der Rettung einer Fritz!Box 7050
  5. http://www.mips.com/secure-download/index.cfm?filename=application-notes-secure/MD00071%2D2B%2DEJTAG%2DAPP%2D01.00.pdf
    http://www.mips.com/secure-download/index.cfm?filename=mips-architecture/MD00047%2D2B%2DEJTAG%2DSPC%2D03.10.pdf
    Entfernt: MIPS-EJTAG-Spezifikation, ganz unten auf der Seite. Zum Download der PDFs ist eine kostenlose Registrierung erforderlich. BACKUP:
    http://downloads.nas-central.org/LS2_MIPSel/DevelopmentTools/JTAG/MD00047-2B-EJTAG-SPC-03.10.pdf
    http://www.ti.com/litv/pdf/spru641
    http://focus.ti.com/lit/an/spra439d/spra439d.pdf
    http://tiexpressdsp.com/wiki/index.php?title=BSDL
    http://focus.ti.com/lit/ug/spru732g/spru732g.pdf
    TMS320C6000 DSP Designing for JTAG Emulation Reference Guide, Texas jtag Tool beschreibung, Texas wiki zu BSDL, C6000 Prozessordatenblatt
  6. http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/JTAG_Cable
    OpenWrt-Wiki-Eintrag zum Thema JTAG
  7. http://downloads.openwrt.org/utils/HairyDairyMaid_WRT54G_Debrick_Utility_v45.zip
    wrt54g EJTAG Flash-Leser/Schreiber von HairyDairyMaid
  8. http://openwince.sourceforge.net
    http://urjtag.org/book/_compilation_and_installation.html#_installing_from_subversion_repository
    openwince-Projekt JTAG-Software, Urjtag svn Beschreibung
  9. http://www.amelek.gda.pl/rtl8181/jtag/, http://star.oai.pp.ru/jtag/jtag-brecis-ok.zip
    Erweiterte Versionen der openwince-JTAG-Software mit EJTAG-Unterstützung. Die ZIP-Datei im zweiten Link enthält auch die openwince-includes, die zum Compilieren benötigt werden.
  10. http://ar7-firmware.berlios.de/qemu/index.html.de
    Erweiterte Version von QEMU mit AR7- und Fritz!Box-Unterstützung.
  11. http://focus.ti.com/lit/an/ssya002c/ssya002c.pdf
    1149.1 TAPI Standard-pdf.
  12. http://www.freelabs.com/~whitis/electronics/jtag/
    Ausfühliche Erklärung, als Einführung zu empfehlen aber in englischer Sprache.
  13. http://www.xilinx.com/support/documentation/application_notes/xapp139.pdf
    Mehr Details in den Applikationnotes von Xilinx