Beste CO'ers, ik heb jullie hulp weer eens nodig,

Ik had bedacht maar eens te beginnen aan het echte werk en een ARM starters kitje samen met een wiggler JTAG interface besteld bij voti.

Nu heb ik na een klein uurtje zenuwslopend geklungel de LPC2103 toch nog netjes op het LQFP-naar-DIP printje gekregen. Geen van de pinnetjes maken verbinding met elkaar en ieder DIP pinnetje maakt verbinding mij het LQFP pinnetje op de ARM processor.

Maar dan moet er nog geprogrammeert worden...

Ik gebruik hiervoor een paralelle poort verleng kabel van ongeveer een meter waaraan ik de wiggler JTAG interface hang en op het breadboard prik. De JTag interface kabel is aangesloten op deze manier: http://www.olimex.com/dev/pdf/arm-jtag.pdf (Dus ik gebruik op mijn breadboard 3 pullups, 10KOhm, voor nTRST, TDI en TMS).

Verder heb ik op de LPC2103 alle voedingen voorzien, dit betekend 4X 3.3v en 1X 1.8v. Daarnaast heb ik ook het 10Mhz kristal aangesloten over XTAL1, XTAL2 en met de 10Pf condensatortjes naar de grond toe.

Om deze setup te testen heb ik 2 verschillende JTag interface software pakketten gebruikt, de eerste is H-JTag, geconfigureerd zoals aangegeven: http://www.olimex.com/dev/images/H-JTAG.gif met als enigste verschil de TCK speed dropdown op MAX/1 - deze dropdown staat niet op het screenshot maar is wel aanwezig in de laatste versie.

H-JTag wanneer ik 'Detect target' gebruik geeft de melding 'unable to find device'.

Daarnaast heb ik OpenOCD geprobeerd op basis van de volgende configuratie:


#daemon configuration
telnet_port 4444
gdb_port 3333

#interface
interface parport
parport_port 0
parport_cable wiggler
jtag_speed 0
#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_pulls_trst

#jtag scan chain
#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
jtag_device 4 0x1 0xf 0xe

#target configuration
daemon_startup reset
#target <type> <startup mode>
#target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4
target_script 0 reset h2294_init.script
run_and_halt_time 0 30
working_area 0 0x40000000 0x40000 nobackup

#flash configuration
flash bank lpc2000 0x0 0x40000 0 0 lpc2000_v2 0 10000 calc_checksum
flash bank cfi 0x80000000 0x400000 2 2 0

(Ik gebruik OpenOCD onder Linux, vandaar parport_port 0 ipv een hexadicimaal poort nummer).

Wanneer ik met OpenOCD verbinding probeer te maken krijg ik steenvast de volgende melding:


Info:    openocd.c:92 main(): Open On-Chip Debugger (2007-07-31 19:00 CEST)
Error:   jtag.c:1346 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f
Error:   jtag.c:1346 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f
Error:   jtag.c:1346 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f
Error:   jtag.c:1346 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f
Error:   jtag.c:1346 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f
Error:   jtag.c:1346 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f

Als ik de spanning van de wiggler afhaal, of ik haal de parallele poort kabel weg dan krijg ik dezelfde melding met het getal 0 ipv 0x3f, dit doet denken dat de parallele poort communicatie goed gaat.

Verder heb ik gewerkt met de aanname dat het zwarte driehoekje op de flat-cable vanuit de wiggler pin 1 aangeeft.

Misschien heeft iemand een idee waar ik de fout in ga, of misschien een voorbeeld van een JTag connector op een breadboard, op google lijken ze meestal de wat duurdere ontwikkelborden te gebruiken.

Sorry dat ik dit wat oudere topic omhoog schop. Ik heb namelijk een oplossing voor dit probleem zodat mogelijk wat meer mensen gebruik kunnen maken van deze krachtige microcontroller.

Ik had dus zelf de Olimex parallele poort wiggler gekocht (die voti.nl verkoopt).

Voor Hjtag moet je de volgende instellingen gebruiken:

Jtag selection -> Wiggler
nTRST -> Pin6 D4
nSRST -> Pin2 D0
Reset Signal Output -> nSRST output inverted

Een detect werkt dan perfect.

Voor open OCD (me grootste struikelblok) heb ik deze config file gebrouwen voor de LPC2103 draaiend op 14.7456MHz.


#daemon configuration
telnet_port 4444
gdb_port 3333

#interface
interface parport
parport_port 0x378
parport_cable wiggler 
jtag_speed 0

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

#jtag scan chain
#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
jtag_device 4 0x1 0xf 0xe

#target configuration
daemon_startup reset
#target <type> <startup mode>
#target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
target arm7tdmi little run_and_init 0 arm7tdmi-s_r4
run_and_halt_time 0 30
working_area 0 0x40000000 0x2000 nobackup

#flash configuration
flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v1 14765 calc_checksum

Het probleem die veel voorkomt met openocd is dat veel voorbeelden een oudere versie gebruiken. Daar had het flash bank commando een andere set argumenten. Welke met de nieuwe versie niet werkt.

Hopelijk heeft hier iemand wat aan.

Op 31 mei 2008 00:11:06 schreef Nico.c:
[...]

Een seriele bootloader is vrijwel altijd software die achteraf wordt gemaakt en eerst helemaal doorgetest kan worden. Ik snap ook niet dat de TS met JTAG gaat klooien bij een controller die je in een vloek en een zucht via de seriele poort kunt programmeren.

Het grote voordeel van JTAG is gewoon dat je ook in circuit debugging kan doen. Ik gebruik tegenwoordig niets anders dan controllers die het goed ondersteunen. Het helpt zoveel bij gare problemen die zich voor kunnen doen bij het programmeren en ontwikkelen. Geef mij maar JTAG boven andere interfaces.

Daisy chaining is ook erg handig, zoals F_E het al aanhaalde en je kan met dezelfde methode best wel veel parts aanspreken.

Over open OCD heb ik niet veel te klagen, het werkt goed vind ik en support redelijk wat ARM cores. Dus zo "Broken" vind ik het ook weer niet, en is er wat broken. Dan trek je de subversion revisie van de server, fixt het, maak een patch aan en stuurt het naar de ontwikkelaar. Zo wordt iedereen er beter van.