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.

Ik heb dus exact hetzelfde probleem gehad met de olimex JTAG programmer die bij voti.nl te koop is en dezelfde CPU.

Eerst om er zeker van te zijn dat je ARM chip werkt, kun je proberen contact te maken met de serieele bootloader. Zo kun je proberen of je geen fouten hebt gemaakt met aansluiten of wat dan ook.

Weet je het zeker dat de JTAG pinnen enabled zijn (debug sel laag houden bij reset geloof ik, controleer datasheet)?

Ik heb na een dagje frustratie zelf een parallele poort wiggler gebouwd. Deze werkte gelijk via H-JTAG, en OCD-commander.

Ik heb zelf ook h-jtag gebruikt, en dan moet je idd geval een target kunnen detecteren. Bij mij was het probleem dat of de reset niet werkte, of dat het kristal niet opstarte. Beide kun je met een scope controleren, hetzelfde geld voor tck daar moet je een klok signaal op zien als je detect target doet.
Zet je snelheid eens op /4 misschien werkt het dan wel.

Ontzettend bedankt voor de reacties ! - Ik heb zojuist mijn eerste contact gemaakt met het chipje !

H-JTag heeft hem succesvol herkend nadat ik de chip heb gerest met zowel DBGSEL als RTCK hoog. Dit gaat nog niet altijd goed dus volgens mij is dit ook niet helemaal de goede oplossing..

Maar ik zal zowieso eens onderzoeken hoe ik contact kan maken met de seriele bootloader bijvoorbeeld, deze informatie vind ik zo snel niet in de datasheet waar ik tot nog toe in heb zitten turen: http://www.nxp.com/#/pip/pip=[pip=LPC2101_02_03_2]|pp=[v=d,t=pip,i=LPC…

Eindelijk de JTag interface robuust en wel aan de praat gekregen.

In mijn eerste post heb ik een link gezet naar een arm-jtag pdf, maar wat hierin staat beschreven lijkt toch niet helemaal de juiste manier te zijn.

De maker van dit http://www.olimex.com/dev/images/lpc-mt-2138-sch.gif schema is iets scheutiger met pullups en pulldowns en wanneer dit aangehouden wordt werkt het ineens wel iedere keer.

Iemand die er meer verstand van heeft mag uitleggen wat het verschil is, ik ben voorlopig maar weer even aan het coden :D

Ik adviseer om altijd met een grote boog om jtag heen te lopen. Als een 'device' een andere manier van programmeren heeft, gebruik die bij voorkeur.

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 18 februari 2008 23:04:39 schreef Nico.c:
Ik adviseer om altijd met een grote boog om jtag heen te lopen. Als een 'device' een andere manier van programmeren heeft, gebruik die bij voorkeur.

wtf ????
JTAG is zowat het meest gebruikte in de industrie. ALs er nu eens iets is waar geen vodden mee zijn dan is het wel JTAG. Dat werkt gewoon en het is universeel. En nou kom jij verklaren daa rmet ene grote boog omheen te lopen ?
Nu wil ik wel eens weten waarom !

het is WEL belangrijk dat je TRST en TCK koest houdt ( pull up / down : zie datasheet van device.

Ik heb goede ervaring met de serieele bootloader van de LPC serie. Een knopje om het bootloader lijntje omlaag te trekken en een andere aan de reset zijn voldoende. FlashMagic werkt redelijk, is alleen wel windows (http://www.flashmagictool.com/).

Op 30 mei 2008 06:53:05 schreef free_electron:
[...]
wtf ????
JTAG is zowat het meest gebruikte in de industrie. ALs er nu eens iets is waar geen vodden mee zijn dan is het wel JTAG. Dat werkt gewoon en het is universeel. En nou kom jij verklaren daa rmet ene grote boog omheen te lopen ?
Nu wil ik wel eens weten waarom !

het is WEL belangrijk dat je TRST en TCK koest houdt ( pull up / down : zie datasheet van device.

Dan moet je JTAG eens gaan gebruiken :-) Serieus, ik heb te vaak mijn vingers aan JTAG gebrand. Ik kies bij voorkeur controllers die eenvoudig via de seriele poort geprogrammeerd kunnen worden (zoals de LPC2103).

JTAG is een feature die niet direct geld oplevert (een sluitpost) en in de hardware van de chip moet zitten. Dat is een recept voor een ramp. En dat blijkt in de praktijk ook. Met JTAG komt het regelmatig voor dat een chip niet lekker te programmeren is. En het is ontzettend gevoelig voor storingen. Logisch ook, want je gaat met TTL signalen met hoge frequenties over een los kabeltje.

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.

Huh ? Waar haal je dat in hemelsnaam vandaan ? JTAG zet in elke redelijke digitale chip tegenwoordig simpelweg omdat dat de enige manier is om de boel te testen in productie. JTAG is daarom door en door betrouwbaar. Het is de enige toegang om een component te testen alvorens het de fabriek verlaat ( ALLE chips worden volledig getest alvorens ze de fabriek verlaten )

Die seriele bootloader wordt trouwens via de JTAG geladen tijdens productie.

Als er nu eens iets is wat bulletproof is dan is het wel JTAG. Het is niet gebonden aan snelheid. je mag de TCK zo snel en zo langzaam laten gaan als je maar wilt.

Het probleem wat je aanhaalt van die lange kabels is omdat je met rotzooi werkt. niet omdat het JTAg poort is.
Maak... eh scrap dat. KOOP eens een defige JTAG probe.

En seriele bootloader : dat zetten ze in elkaar met trial en error.

JTAG MOET first time right zijn. als de JTAG poort niet werkt kan de chip de productietest niet doorlopen.

JTAG spaart net enorm veel geld. Alle production testers (teradyne,agilent,keithley en consoorten) blazen allemaal over JTAG. 4 pinnen en klaar. en in heel veel gevallen wordt de JTAG gemuxt ( er zijn veel chips waarbij je zelfs niet weet dat er JTAG opzit. je moet 1 pin tijdens powerup in een bepaalde toestand zetten om de poort te enablen.

JTAG scan insertion is hedentendage zelfs volautomatisch. Je kan gewoon een list maken met alle flipflops die je wilt kunnen sturen via de JTAG en gans dat spul injecteert vanzelf. je kan dat via een script en dat spul injecteert direct de nodige verilog of vhdl code in je design.

Ik gebruik continue JTAG. Altera byteblaster , Xilinx downloadkabel. Keil JTAg probe voor ARM , IAR JTAG probe voor ARM, Raisonnance JTAG probe voor ARM. Segger Jlink voor ARM , Silicon labs downloader voor hun 8051's dat is allemaal JTAG. Ik gebruik ook de wiggler alsook de ARM-ICE en Multi-ICE. al dat spul is JTAG . daar zijn NOOIT vodden mee. plug dat in en het werkt. Heck , mijn inifiniium scoop heeft zelfs een JTAG poort zodat ik kan gaan debuggen in de FPGA. Onze Logic analyser kunnen JTAG opwekken. ik kan al die devices op mijn bord daisy chainen. de JTAg chain pikt dat automatisch op.
zowat elk bedrijf ter wereld wat hardware ontwikkleing doet is allemaal over JTAG. Bij Alcatel zijn ganse telefooncentrales testbaar via JTAG ( we praten over scanchains met honderden chips op 1 bord ). EEndert welk bedrijfn wat met FPGA werkt is allemaal JTAG ( altera,xilinx,lattice,actel,quicklogic en anderen)

Het probleem is als je met halve implementaties voor zowel hardware als software werkt. Laat me raden. Een zelfbouw jtag bestaande uit 2 weerstanden en aangestuurd over een printerpoort met een hoop 'broken source' zeker ?

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.

Op 31 mei 2008 06:01:18 schreef free_electron:
Huh ? Waar haal je dat in hemelsnaam vandaan ? JTAG zet in elke redelijke digitale chip tegenwoordig simpelweg omdat

Als er nu eens iets is wat bulletproof is dan is het wel JTAG. Het is niet gebonden aan snelheid. je mag de TCK zo snel en zo langzaam laten gaan als je maar wilt.

Dat is theorie en niet de praktijk. In de praktijk blijkt dat JTAG domweg een kostenpost is. Er zijn chips waarin de JTAG kan vastlopen (uit & aanzetten is de enige optie om JTAG dan weer aan de gang te krijgen). Dat is niet leuk als je JTAG gebruikt voor het laden van data tijdens het draaien van een apparaat.

Het probleem wat je aanhaalt van die lange kabels is omdat je met rotzooi werkt. niet omdat het JTAg poort is. Maak... eh scrap dat. KOOP eens een defige JTAG probe.

Ook met de officiele Xilinx JTAG kabel heb je signaalproblemen. Eigenlijk werkt die kabel alleen goed met 1 device. Bij 2 devices begint het al minder te worden (1 op de zoveel keer gaat het fout).

JTAG MOET first time right zijn. als de JTAG poort niet werkt kan de chip de productietest niet doorlopen.

Dat hoeft niet perse zo te zijn. Van veel microcontrollers bestaan er meerdere revisies vanwege kleinen bugjes. Die kunnen ook in de JTAG interface zitten. Dan lijkt het te werken totdat je JTAG echt een keer flink op de staart trapt en dan blijkt het opeens niet zo betrouwbaar.

Het probleem is als je met halve implementaties voor zowel hardware als software werkt. Laat me raden. Een zelfbouw jtag bestaande uit 2 weerstanden en aangestuurd over een printerpoort met een hoop 'broken source' zeker ?

Nope. Allemaal problemen gehad met officiele software/hardware.

Waarom gebruik je geen seriele RS232 kabel? In de LPC210x series zit er al een bootprogramma door de fabrikant in geprogrameerd. Als je JTAG gebruikt moet je zelf een bootprogrammatje gaan programeren...

Heb je toevallig je microcontroller van elektor?

Greets, rebel

RS232 owns!xD

[Bericht gewijzigd door rebelater op (14%)]