Bettyhacks.com

German - BettyHacks.com => Software => Thema gestartet von: temp12 am 25. Sep 2008, 13:44

Titel: JTAG
Beitrag von: temp12 am 25. Sep 2008, 13:44
Hi alle,

weiss jemand, ob ich für BOOP einen JTAG-Adapter benutzen kann? Ich habe irgendwo hier gelesen, dass einige erfolglos versucht haben, JTAG zu verwenden?

Danke
Titel: Re: JTAG
Beitrag von: Telekatz am 25. Sep 2008, 18:16
Debuggen mit JTAG geht. Ein Programm mit JTAG ins RAM laden und starten müsste auch gehen. BOOP flashen mit JTAG geht nicht.
Titel: Re: JTAG
Beitrag von: famos am 28. Sep 2008, 22:01
Zitat
Debuggen mit JTAG geht. Ein Programm mit JTAG ins RAM laden und starten müsste auch gehen. BOOP flashen mit JTAG geht nicht.


Stimmt, da hat mir Vista einen Streich gespielt. Unter Windows 2000 konnte ich sogar ins Flasch schreiben. Keil mit uLink2 unterstützt diverse Flasch Typen. Nur habe ich noch kein Programm zum laufen gebracht (Startupcode Probleme).

Gruss famos
Titel: Re: JTAG
Beitrag von: gunnar am 05. Mär 2010, 11:23
Hallo Telekatz,


Debuggen mit JTAG geht. Ein Programm mit JTAG ins RAM laden und starten müsste auch gehen. BOOP flashen mit JTAG geht nicht.


Ich habe versucht, einen Wiggler Nachbau (http://www.anvilex.de/Extern/Datasheets/DS_P009_06.pdf) mit der Betty zu verbinden. Ich kann aber mittels urjtag nicht die Device ID auslesen. Beim TAE Adapter klappt das, also ist die Umgebung ansonsten in Ordnung.
Ich habe die Verbindung so gemacht:
Pin B.   Belegung Betty    Pin Wiggler    Belegung Wiggler
1   TMS      7      TMS
2   TDO      13      TDO
3   TDI      5      TDI
4   RTCK      offen
5   nTRST   3      TRST
6   TCK      9      TCK
7   VCC      1+2      VCC
8   GND      4,6,8...20   GND
9   nRes      offen (später Taster nach GND)
10   BootEn      offen (später Schalter nach GND)
11   RX      offen (später Handykabel)
12   TX      offen (später Handykabel)

Ist bei der Verbindung etwas falsch? Muss Pin5 (nTRST) invertiert benutzt werden? Sollte ich ihn vielleicht offen lassen, beim PCD des Scart Adapters ist (n)TRST ja gar nicht erst herausgeführt und JTAG geht dort trotzdem. Muss man das JTAG Interface am LPC irgendwie einschschalten? Ich habe irgendwo gelesen (aber noch nicht probiert) man soll dazu einen 10K Widerstand von RTCK nach GND legen. An anderer Stelle stand, man soll BootEnable auf GND legen. Wie hat es bei Dir  geklappt?
Hast Du irgendwo eine bsdl für den lpc2220 gefunden?

Eigentlich will ich den PCD des TAE Adapters programmieren, ich dachte mir nur es wäre besser erstmal mit dem LPC2220 in der Betty etwas Erfahrungen mit OpenOCD und Urjtag zu sammeln, bevor ich mit diesen Tools dem PCD zuleibe rücke...

Viele Grüße

Gunnar

Titel: Re: JTAG
Beitrag von: Telekatz am 05. Mär 2010, 19:26
Hallo Gunnar,

die Belegung sieht richtig aus. Ein 10K Widerstand von RTCK nach GND ist bei mir auch nicht notwendig damit JTAG funktioniert. Die entsprechenden Pins werden von Boop als JTAG Pins konfiguriert.

Ich verwende ein JTAG Interface auf Basis des FTDI bei dem nTRST und nRes verbunden wird. JTAG funktioniert allerdings auch dann, wenn in OpenOCD keine Resetpins definiert sind (reset_config none).

Der Fehler wird daran liegen, dass Boop in den idle und power down Modus geht. Dann funktioniert JTAG nicht mehr. Schreibe in die erste Zeile von cpu_idle() in der main.c ein return; und der idle und power down Modus ist deaktiviert.

void cpu_idle ()
{ return;
/* fall through if a key was pressed */


Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: gunnar am 05. Mär 2010, 23:02
Hallo Telekatz,


Die Belegung sieht richtig aus. Ein 10K Widerstand von RTCK nach GND ist bei mir auch nicht notwendig damit JTAG funktioniert. Die entsprechenden Pins werden von Boop als JTAG Pins konfiguriert.


An welcher Stelle im Code steht das?


Der Fehler wird daran liegen, dass Boop in den idle und power down Modus geht. Dann funktioniert JTAG nicht mehr. Schreibe in die erste Zeile von cpu_idle() in der main.c ein return; und der idle und power down Modus ist deaktiviert.

void cpu_idle ()
{ return;
/* fall through if a key was pressed */



Volltreffer, genau das war es! :-)
Zitat

jtag> detect
IR length: 4
Chain length: 1
Device Id: 01001111000111110000111100001111 (0x000000004F1F0F0F)
  Manufacturer: ARM
Cannot open /opt/urjtag//share/urjtag/arm/PARTS
  Unknown part!
chain.c(149) Part 0 without active instruction
chain.c(200) Part 0 without active instruction
chain.c(149) Part 0 without active instruction


Kannst Du noch die von Dir verwendete OpenOCD Config schicken und falls Du das hast das BSDL File zum LPC2220?
Wenn alles zusammen ist und bei mir funktioniert, werde ich im Wiki was über Jtag, Debugging und BoundaryScan schreiben.

Viele Grüße
Gunnar
Titel: Re: JTAG
Beitrag von: Telekatz am 07. Mär 2010, 10:45
Hallo Gunnar,

Zitat

An welcher Stelle im Code steht das?


Das Steht im Startup Code (crt.s)
ldr r0, =PINSEL2
ldr r1, =0x0de049d4
str r1, [r0]


Zitat
Kannst Du noch die von Dir verwendete OpenOCD Config schicken und falls Du das hast das BSDL File zum LPC2220?

Config File ist im Anhang, ein BSDL File hab ich nicht.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: famos am 07. Mär 2010, 17:28
Hallo,

wie sieht es eigentlich mit in-circuit debugging über JTAG aus?

Gruss famos
Titel: Re: JTAG
Beitrag von: Telekatz am 07. Mär 2010, 20:01
Zum debuggen verwende ich GDB und Insight. Einstellungen siehe Anhang.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: famos am 07. Mär 2010, 21:24
Hallo Telekatz,

mit welchem System arbeitest Du? Linux, Cygwin, Winarm?? Der Screenshot sieht nach Windows aus.
Wenn das was ich gefunden habe richtig ist: "Insight is a graphical user interface to GDB" (scheint ein PHP Script zu sein),  benötigst Du noch ein JTAG Adapter. Wie sieht der Adapter aus? FTDI, Parallelport Wiggler? Was sind Deine Erfahrungen mit dieser Konfiguration? Scheint nicht trivial zu sein.

Vielen Dank
famos
Titel: Re: JTAG
Beitrag von: Telekatz am 08. Mär 2010, 21:34
Hallo Famos,

Ich verwende Windows mit Winarm. Mein JTAG Adapter basiert auf einen FT2232 von FTDI. Dem ist ein CPLD nachgeschaltet um flexibel in der Beschaltung zu sein.

Funktionieren tut das ganze eigentlich ganz gut, JTAG anstecken, OpenOCD starten, Insight starten, boop_rom.elf laden und verbinden.
Allerdings kann man nur die zwei Hardware Breakpoints des LPC2220 verwenden, Softwarebreakpoints funktionieren im Flash nicht. Und wie bereits erwähnt den Energiesparmodus in Boop deaktivieren.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: famos am 08. Mär 2010, 21:48
Zitat
Ich verwende Windows mit Winarm. Mein JTAG Adapter basiert auf einen FT2232 von FTDI. Dem ist ein CPLD nachgeschaltet um flexibel in der Beschaltung zu sein.

Funktionieren tut das ganze eigentlich ganz gut, JTAG anstecken, OpenOCD starten, Insight starten, boop_rom.elf laden und verbinden.
Allerdings kann man nur die zwei Hardware Breakpoints des LPC2220 verwenden, Softwarebreakpoints funktionieren im Flash nicht. Und wie bereits erwähnt den Energiesparmodus in Boop deaktivieren.


Selbstgebaut oder gekauft? Findet man dazu Infos im Wiki?

Danke
famos
Titel: Re: JTAG
Beitrag von: Telekatz am 08. Mär 2010, 22:03
Selbstgebaut. Infos findet man keine dazu im Wiki, schien mir nicht Massenmarkttauglich genug.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: famos am 08. Mär 2010, 23:10
Hallo Telekatz,

sieht interessant aus. Würde mich freuen wenn man die Unterlagen irgendwo downloaden könnte. Ganz nach dem Motto Wissen ist das Einzige, dass sich vermehrt wenn man es teilt. Es werden sicher viele nichts mit dem anfangen könne, aber für die, die sich damit beschäftigen ist das sehr informativ. Über ARM Debugging mit freeware Programmen finden man wenig brauchbares. Und dies scheint mir nicht gebastelt --> Nachbau also möglich.


Gruss
famos
Titel: Re: JTAG
Beitrag von: gunnar am 09. Mär 2010, 12:19
Hallo Famos,

ich habe diesen JTAG Adapter für 8€ Preisvorschlag + Versand (Brief) bei Ebay gekauft und der funktioniert ganz gut bei mir:
http://shop.anvilex.com/pi2/pd10.html
Wenn man einen Parallelport hat und erstmal in die Materie hineinschnuppern will ist das wohl der günstigste Einstieg. Vom gleichen Anbieter habe ich auch das Altera Kabel genommen und damit erfolgreich über Quartus am CPLD auf dem Scart Adapter herumgespielt.
Aus dem embedded-projects Shop habe ich einen MSP430 JTAG Adapter gekauft, ca 15€. Flashen und Debuggen geht damit ohne große Einstellungen einfach von der Hand. Für den MCS51 kompatiblen Controller auf dem ScartAdapter wollte ich eine kleine Software für das AvrUsbLab machen, das ich sonst zum Programmieren von AVR Controllern nehme.
http://wiki.ullihome.de/index.php/USBAVR-ISP/de
So kann ich einen hübschen Zoo von Controllern programmieren und größtenteils auch debuggen. Anwendungszwecke habe ich schon einige im Hinterkopf. Praktisch ist, dass alle zur Betty gehörende Hardware über die CC1100 kommunizieren können, egal welchen Controller sie nun gerade benutzen. Für fast alles gibt es funktionierenden Code in Boop, das ist ideal zum Lernen und Spielen. :-)

Bei den ARMs kann man mittels GDB auf jeden Fall Code ins Ram laden und dort ausführen. Das Flashen über JTAG geht nicht so einfach, aber da kann man ja ein Tool machen, das im Ram des ARM läuft und von dort aus das Flash beschreibt. So macht es ja auch das LPCTool.

Wenn ich das mit dem Debuggen von Betty und PCD des TAE Adapters raushabe werde ich eine Wikiseite darüber machen.

Viele Grüße
Gunnar
Titel: Re: JTAG
Beitrag von: Telekatz am 09. Mär 2010, 22:21
Hallo Famos,

Anbei der Schaltplan zu meinem Programmiergerät.

Ich wollte nicht für jedes Device ein eigenes Programmiergerät bauen, sondern ein Gerät dem ich per Software (im CPLD) die unterschiedlichsten Parallelport/Seriell/FTDI Programmiergeräte beibringen kann. Aktuell geht damit die Betty programmieren/debuggen, Scartadapter und TAE Adapter (MSP) programmieren.

Falls es jemand nachbauen möchte soll er sich melden. Dann such ich den Rest auch noch zusammen und stell ihn hier rein.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: Astralix am 11. Apr 2010, 19:29
Hallo, ich bin er Neue :)

... gelockt von Chris mit einem Satz Betties.

Habe zuerst mal das mit dem JTAG probiert. Ich nutze openocd zusammen mit einem openocd-usb dongle. Dabei ist mir aufgefallen, dass das hier publizierte Script für openocd etwas veraltet ist, jedenfalls, wenn man openocd 0.4.0 verwendet. Dank Chris habe ich die Init für den LPC2220 fertig. Leider funktioniert das Flashen noch nicht. Das Flash selbst sollte via CFI erkannt werden, ob openocd das flashen direkt, bzw. mit einer Helper-Routine im RAM unterstützt, weiß ich (noch) nicht.

Trotzdem, für die, die mit machen wollen, hier schon mal das Script. Eigentlich müsste es noch gesplittet werden in board/betty.cfg und target/lpc2220.cfg. Naja, bis alles läuft erst einfach mal zusammen.


#
if { [info exists CHIPNAME] } {
   set  _CHIPNAME $CHIPNAME
} else {
   set  _CHIPNAME lpc2220
}

if { [info exists ENDIAN] } {
   set  _ENDIAN $ENDIAN
} else {
   set  _ENDIAN little
}

if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
   set _CPUTAPID 0x4f1f0f0f
}

#coonfigure reset options
jtag_nsrst_delay 200
jtag_ntrst_delay 200

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_pulls_trst
#trst_push_pull srst_push_pull

#jtag scan chain
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi

$_TARGETNAME configure -event reset-init {
# setup PLL
# PLLCON: Enable PLL, connect PLL
mww 0xe01fc080 0x03
# VBPDIV: no division
mww 0xe01fc100 0x0
# PLLCFG: 0x42 = psel = 10 (4) = msel= 00010 (3) = 240 mhz Fcco*/
mww 0xe01fc084 0x45
# Activate PLL settings
mww 0xe01fc08c 0xaa
mww 0xe01fc08c 0x55
sleep 20

# Memory Bank Configuration
# BCFG0: 16bit, rble, 6wst - 60 mhz : Betty: FLASH 0 @ 0x80000000
mww 0xffe00000 0x100004A0
# BCFG2: 16bit, rble, 6wst - 60 mhz : Betty: FLASH 1 @ 0x82000000
mww 0xffe00008 0x100004A0

# BCFG1: 8 bit, 3 sram wst, rble, 5 wst 3 idcy : Betty: LCD @ 0x81000000
#mww 0xffe00004 0x00000C42

# GPIO Pin COnfiguration for Flash access
# PINSEL0:
mww 0xe002c000 0x00008005
# PINSEL1:
mww 0xe002c004 0x00000000
# PINSEL2:
mww 0xe002c014 0x0de049d4

# IO2SET: Set Outputs
mww 0xe0028024 0x1FC0000
# IO2DIR: Set Direction
mww 0xe0028028 0x1FC0000

# IO0DIR:
mww 0xe0028008 0x002018D0

# disable watchdog
#mww 0xfffffd44 0x00008000
# enable user reset
#mww 0xfffffd08 0xa5000001
sleep 100

arm7_9 fast_memory_access enable
}

arm7_9 dcc_downloads enable

$_TARGETNAME configure -work-area-phys 0x40000000 -work-area-size 0x4000 -work-area-backup 0

#flash bank <name> <driver> <base_addr> <size> <chip_width> <bus_width> <target_number> [<target_name> <banks> <sectors_per_bank> <pages_per_sector> <page_size> <num_nvmbits> <ext_freq_khz>]
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME cfi 0x80000000 0x00100000 2 2 $_TARGETNAME
flash bank $_FLASHNAME cfi 0x82000000 0x00100000 2 2 $_TARGETNAME


# For more information about the configuration files, take a look at:
# openocd.texi


Gruß, Ulrich
Titel: Re: JTAG
Beitrag von: Astralix am 12. Apr 2010, 22:08
Ok, das Script funktioniert noch garnicht...
Naja, es funktioniert, wenn vorher das originale betty im Flash ist. Mit der boop im Flash geht JTAG nicht mehr. Also wird vermutlich die PLL oder das Interface nicht korrekt programmiert.

Ich werde das dann noch korrigieren, sobald ich einen Erfolg habe.

Gruß, Ulrich
Titel: Re: JTAG
Beitrag von: Telekatz am 13. Apr 2010, 22:26
Wenn ich die Reset Konfiguration ändere, dann funktioniert das Script bei mir:

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_push_pull
#trst_push_pull srst_push_pull


Und nicht vergessen den Energiesparmodus in Boop auszuschalten!

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: Telekatz am 14. Apr 2010, 22:38
Zitat
Das Flash selbst sollte via CFI erkannt werden, ob openocd das flashen direkt, bzw. mit einer Helper-Routine im RAM unterstützt, weiß ich (noch) nicht.


Es funktioniert,  wenn man openocd anpasst und den Flashbaustein der Betty hinzufügt (siehe Patch im Anhang).

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: Telekatz am 16. Apr 2010, 19:59
So, mit diesem Script funktioniert es jetzt zufriedenstellend:

#
if { [info exists CHIPNAME] } {
   set  _CHIPNAME $CHIPNAME
} else {
   set  _CHIPNAME lpc2220
}

if { [info exists ENDIAN] } {
   set  _ENDIAN $ENDIAN
} else {
   set  _ENDIAN little
}

if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
   set _CPUTAPID 0x4f1f0f0f
}

#coonfigure reset options
jtag_nsrst_delay 50
jtag_ntrst_delay 50

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_pulls_trst trst_push_pull srst_push_pull

jtag_khz 1000

#jtag scan chain
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi

# Event handlers
$_TARGETNAME configure -event reset-start {jtag_khz 1000}
$_TARGETNAME configure -event reset-init  {betty_init}

arm7_9 dcc_downloads enable

$_TARGETNAME configure -work-area-phys 0x40000000 -work-area-size 0x10000 -work-area-backup 0

#flash bank <name> <driver> <base_addr> <size> <chip_width> <bus_width> <target_number> [<target_name> <banks> <sectors_per_bank> <pages_per_sector> <page_size> <num_nvmbits> <ext_freq_khz>]
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME cfi 0x80000000 0x00100000 2 2 $_TARGETNAME
flash bank $_FLASHNAME cfi 0x82000000 0x00100000 2 2 $_TARGETNAME

arm7_9 fast_memory_access enable

proc betty_init { } {   

   # setup PLL
   # PLLCON: Enable PLL, connect PLL
   mww 0xe01fc080 0x03
   # VBPDIV: no division
   mww 0xe01fc100 0x02
   # PLLCFG: 0x42 = psel = 10 (4) = msel= 00010 (3) = 240 mhz Fcco*/
   mww 0xe01fc084 0x42
   # Activate PLL settings
   #mww 0xe01fc08c 0xaa
   #mww 0xe01fc08c 0x55
   #sleep 100
   
   # Memory Bank Configuration
   # BCFG0: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 0 @ 0x80000000
   mww 0xffe00000 0x10000420
   # BCFG2: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 1 @ 0x82000000
   mww 0xffe00008 0x10000420

   # BCFG1: 8 bit, 3 sram wst, rble, 5 wst 3 idcy : Betty: LCD @ 0x81000000
   #mww 0xffe00004 0x00000400

   # GPIO Pin COnfiguration for Flash access
   # PINSEL0:
   mww 0xe002c000 0x00008005
   # PINSEL1:
   mww 0xe002c004 0x00000000
   # PINSEL2:
   mww 0xe002c014 0x0de049d4
   
   # IO2SET: Set Outputs
   mww 0xe0028024 0x1FC0000
   # IO2DIR: Set Direction
   mww 0xe0028028 0x1FC0000
   
   # IO0DIR:
   mww 0xe0028008 0x002018D0
   
    # disable watchdog
   #mww 0xfffffd44 0x00008000
   # enable user reset
   #mww 0xfffffd08 0xa5000001
}

proc flash_boop {IMAGE} {
   reset init
   flash erase_sector 0 0 last
   flash write_bank 0 $IMAGE 0
   reset run
}

# For more information about the configuration files, take a look at:
# openocd.texi
Titel: Re: JTAG
Beitrag von: Astralix am 16. Apr 2010, 23:49
Hi!

Habs gerade noch nicht testen können und es ist jetzt auch etwas spät. Aber schon mal vielen Dank für die Mithilfe.
Report folgt.

Gruß, Ulrich aka Astralix
Titel: Re: JTAG
Beitrag von: Astralix am 21. Apr 2010, 21:41
Hi!

Habe meinen openocd gepatcht, vielen Dank dafür, Telekatz!
Das Script funktioniert leider noch nicht ganz. Habe aber noch keine Zeit gehabt, genauer nach zu sehen.
Wenn die originale Firmware drin ist, funktioniert es. Sobald die boop drin ist, funktioniert es nicht mehr:

>openocd -f interface/openocd-usb.cfg -f target/lpc2220.cfg -c init -c "flash_boop boop_rom.bin"

Open On-Chip Debugger 0.5.0-dev-00101-gcc197c8-dirty (2010-04-21-22:16)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.berlios.de/doc/doxygen/bugs.html
1000 kHz
adapter_nsrst_delay: 50
jtag_ntrst_delay: 50
trst_and_srst srst_pulls_trst srst_gates_jtag trst_push_pull srst_push_pull
1000 kHz
dcc downloads are enabled
fast memory access is enabled
Info : device: 4 "2232C"
Info : deviceID: 67330064
Info : SerialNumber: A
Info : Description: Dual RS232 A
Info : clock speed 1000 kHz
Info : JTAG tap: lpc2220.cpu tap/device found: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
Info : Embedded ICE version 4
Info : lpc2220.cpu: hardware has 2 breakpoint/watchpoint units
1000 kHz
Info : JTAG tap: lpc2220.cpu tap/device found: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.
target state: halted
target halted in ARM state due to debug-request, current mode: Abort
cpsr: 0x40000097 pc: 0x00000038
Info : Flash Manufacturer/Device: 0x007f 0x225b
erased sectors 0 through 18 on flash bank 0 in 4.484375s
wrote 239340 bytes from file boop_rom.bin to flash bank 0 at offset 0x00000000 in 4.296875s (54.395 kb/s)
1000 kHz

Bis hier geht es und nach dem reset run im Script gibt auch den boop-Startbildschirm. Aber der JTAG verliert etwas früh die Verbindung:

Info : TAP lpc2220.cpu does not have IDCODE
Warn : JTAG tap: lpc2220.cpu       UNEXPECTED: 0x00000000 (mfg: 0x000, part: 0x0000, ver: 0x0)
Error: JTAG tap: lpc2220.cpu  expected 1 of 1: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
Warn : Unexpected idcode after end of chain: 1 0x00000000
Warn : Unexpected idcode after end of chain: 33 0x00000000
Warn : Unexpected idcode after end of chain: 65 0x00000000
Warn : Unexpected idcode after end of chain: 97 0x00000000
Warn : Unexpected idcode after end of chain: 129 0x00000000
Warn : Unexpected idcode after end of chain: 161 0x3c3c0000
Warn : Unexpected idcode after end of chain: 193 0x80013c7c
Warn : Unexpected idcode after end of chain: 225 0x8000007f
Warn : Unexpected idcode after end of chain: 257 0x8000007f
Warn : Unexpected idcode after end of chain: 481 0x00001fff
Warn : Unexpected idcode after end of chain: 513 0x00000000
Warn : Unexpected idcode after end of chain: 545 0x00000000
Warn : Unexpected idcode after end of chain: 577 0x00000000
Error: double-check your JTAG setup (interface, speed, missing TAPs, ...)
error: -100
Command handler execution failed


Danach kann der JTAG die betty nicht mehr erreichen:

openocd -f interface/openocd-usb.cfg -f target/lpc2220.cfg -c init

Open On-Chip Debugger 0.5.0-dev-00101-gcc197c8-dirty (2010-04-21-22:16)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.berlios.de/doc/doxygen/bugs.html
1000 kHz
adapter_nsrst_delay: 50
jtag_ntrst_delay: 50
trst_and_srst srst_pulls_trst srst_gates_jtag trst_push_pull srst_push_pull
1000 kHz
dcc downloads are enabled
fast memory access is enabled
Info : device: 4 "2232C"
Info : deviceID: 67330064
Info : SerialNumber: A
Info : Description: Dual RS232 A
Info : clock speed 1000 kHz
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Command handler execution failed
Warn : jtag initialization failed; try 'jtag init' again.


Das ist dann der Punkt, wo ich dann auch hängen geblieben bin. Die CPU wird noch nicht komplett initialisiert. Irgendwas ist da noch anders, als es sein muss.

Ich bleibe drann...
Gruß, Astralix aka Ulrich
Titel: Re: JTAG
Beitrag von: Telekatz am 22. Apr 2010, 09:46
Hallo Astralix,

das ist so schon alles korrekt. Der Hintergrund ist folgender.

Beim LPC2220 wird zusammen mit dem System Reset auch der TAP Controller zurückgesetzt  (deshalb srst_pulls_trst). Dadurch ist es nicht möglich die Programmausführung bereits am Resetvektor zu unterbrechen.

Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.

Bis OpenOCD dann das halt schickt ist Boop bereits mit der Initialisierung fertig und in der Main-Loop bereits in cpu_idle() gesprungen. Dort wird die CPU in den Idle Mode geschickt und der Prozessortakt abgeschaltet. Dadurch läuft der TAP Controller auch nicht mehr und es ist keine Verbindung über JTAG möglich.

Um dennoch eine Verbindung zu erhalten musst du auf der Betty die ANYKEY ;D Taste gedrückt halten:
void cpu_idle ()
{
/* fall through if a key was pressed */
if (ANYKEY)
return;

Dadurch wird cpu_idle() sofort wieder verlassen.

In der neuesten Version von Boop hab ich deshalb ein Flag eingebaut, dass den Idle Mode ausschaltet. Es wird erst dann gelöscht, wenn  der Power Down Modus aktiviert wird. Dies passiert frühestens, wenn die Hintergrundbeleuchtung erlischt. Genug Zeit für OpenOCD sich zu verbinden und das System anzuhalten.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: Astralix am 24. Apr 2010, 22:19
Hi,

danke für die Info, jetzt ist das klar. Ist mir bei meinen bisherigen ARM Experimenten nicht aufgefallen, weil ich immer Nut/OS als System drunter liegen habe. Dort werden am Anfang erst einmal alle Peripherie initialisiert, Zeit genug für den oocd das System auch in Halt zu schicken.

Nagut, dann kann ich mich ja jetzt an die Integration des LPC2220 ins Nut/OS machen.

Gruß, Ulrich

Titel: Re: JTAG
Beitrag von: jannis am 23. Okt 2010, 23:17
Wozu wird denn der PLD benutzt im originalen Aufbau?
Und koennen wir den komplett ueberschreiben oder geht dann irgendwas nicht mehr?
Titel: Re: JTAG
Beitrag von: Telekatz am 24. Okt 2010, 16:47
Der PLD auf dem Scart Adapter? Der decodiert den Videotext und teilt die Quarzfrequenz für den LPC runte. Ganz platt machen geht also nicht.
Titel: Re: JTAG
Beitrag von: jannis am 24. Okt 2010, 21:14
Aber wenn man da jetzt einfach selbst sonen prescaler mit einprogrammiert koennte man schon auch mit eigenen Sachen ueberschreiben, ja?
Titel: Re: JTAG
Beitrag von: Telekatz am 24. Okt 2010, 21:40
Dann vermutlich schon.
Titel: Re: JTAG
Beitrag von: gunnar am 10. Feb 2011, 23:20
Hallo Telekatz,


So, mit diesem Script funktioniert es jetzt zufriedenstellend:


ich habe mal mit den eingecheckten Einstellungen versucht (scheinen die gleichen zu sein, wie aus Deinem Post), die Betty per JTAG zu flashen, aber das Flash wird nicht erkannt:


Open On-Chip Debugger 0.4.0 (2011-02-10-22:46)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
jtag_nsrst_delay: 50
jtag_ntrst_delay: 50
trst_and_srst srst_pulls_trst srst_gates_jtag trst_push_pull srst_push_pull
1000 kHz
dcc downloads are enabled
fast memory access is enabled
parport port = 0x378
Info : clock speed 500 kHz
Info : JTAG tap: lpc2220.cpu tap/device found: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
Info : Embedded ICE version 4
Info : lpc2220.cpu: hardware has 2 breakpoint/watchpoint units
500 kHz
Info : JTAG tap: lpc2220.cpu tap/device found: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.
target state: halted
target halted in ARM state due to debug-request, current mode: System
cpsr: 0x6000001f pc: 0x80000604
Info : Flash Manufacturer/Device: 0x007f 0x225b
Error: Could not probe bank: no QRY
Try workaround w/0x555 instead of 0x55 to get QRY.
Error: Could not probe bank: no QRY
Error: auto_probe failed -900

flash bank '0' not found


Hast Du oder jemand anderes es schonmal hinbekommen, die Betty über ein Wiggler Interface geflasht zu bekommen? Prinzipiell sollte das Interface doch egal sein, oder?

Viele Grüße
Gunnar
Titel: Re: JTAG
Beitrag von: Telekatz am 11. Feb 2011, 08:18
Hallo Gunnar,

du mußt OpenOCD noch anpassen, damit der Flash Baustein der Betty erkannt wird. http://bettyhacks.com/forum/index.php?topic=160.msg1642#msg1642 (http://bettyhacks.com/forum/index.php?topic=160.msg1642#msg1642)
Dann funktioniert auch das Flashen.

Gruß
Telekatz
Titel: Re: JTAG
Beitrag von: gunnar am 12. Feb 2011, 22:51
Hallo Telekatz,

du mußt OpenOCD noch anpassen, damit der Flash Baustein der Betty erkannt wird...
Dann funktioniert auch das Flashen.


Danke für den Tip, ich hatte den Patch übersehen. Mit dem Patch hat es geklappt und zwar superschnell. :-)
Viel unkomplizierter und schneller als mit dem seriellen Bootloader.
Man muss nur darauf achten, dass die Hintergrundbeleuchtung an ist, dann ist die CPU nicht im Sleep Modus.
Ich musste bei mir noch in scripts/interface/parport.cfg diese Änderung machen, ansonsten wurde versucht, das Device /dev/parport888 zu benutzen:

#parport_port 0x378
parport_port 0

Mit der eingecheckten betty.cfg ging das Flashen zunächst nicht, ich habe dann die eingecheckte betty.cfg mit der OpenOCD Konfiguration aus deinem Posting (das nach dem CFI Patch) verglichen und zwei Zeilen geändert, danach klappte es dann. Die Änderungen habe ich eingecheckt.

Viele Grüße
Gunnar