VanHeden Old VanHeden

Datablad

Robot-plattformar Digitala/analoga komponenter AVR/Raspberry Kommunikation Kringutrustning Displayer Sensorer Knappar & LEDs Gott & Blandat Alla PDF:er

Övrig information

Handledningar Karta över ISY Tips o Trix Kuriosa FAQ

Handledningar

Kom igång med JTAG ICE 3 för AVR

Emulatorn JTAG ICE 3 kommer nedan för enkelhets skull att kallas “JTAG-burken” (grå eller vit burk). Mikrokontrollern, i vårat fall AVR Mega 16, kallas nedan “AVR:en” alternativt "mikrokontrollern".

Grå JTAG-burk
Vit JTAG-burk

Kolla gärna på videon jtag-guide på microsoft stream (kräver liu-inloggning): Jtag-guide.

Syfte

Poängen med att använda JTAG-burken är att man via den direkt från programmet Atmel Studio kan programmera sin AVR och emulera programmet. Med emulering menas att programmet faktiskt körs i den fysiska AVR:en. Dvs när man stegar igenom programmet och t ex skriver ett värde till någon av AVR:ens portar så kan man mäta upp motsvarande elektriska signalnivåer på själva AVR:en. Omvänt om man läser in ett värde från AVR:ens fysiska port så kan det sedan studeras i portregistret i programmet Atmel Studio.

Inkoppling

JTAG-burken har en 10-polig IDC-kontakt (Q.1 Hur räknar man anslutningarna på ett flatkabeldon?) som måste anslutas mot AVR:en. Inkopplingen beskrivs i Atmel Studio under “Help / View Help”, och vidare under “JTAGICE3 User Guide / Connecting the Atmel JTAGICE3” och klicka på Figure 10, “JTAG header pinout”. Där kan man hitta bl a följande figur.

Åtminstone dom fyra signalerna TCK, TMS, TDI och TDO måste anslutas till AVR:en. Signalen VTG ska anslutas till matningsspänningen (5V), dock inte nödvändigtvis direkt på AVR:en. Koppla även in BÅDA GND-anslutningarna (ben 2 och 10). Signalen nSRST kan också vara behändig att ha inkopplad till AVR:ens reset-ingång. På så sätt kan nämligen AVR Studio veta om man har gjort reset på sin AVR, t ex via en tryckknapp, och därmed hoppa till början av programmet under emulering.

I sammanhanget kan nämnas att själva AVR:en med fördel också ska vara korrekt inkopplad till rätt matningsspänning. Dvs anslut alla jordanslutningar (GND) och matningsspänningar (VCC och AVCC).

JTAG-burkens IDC-kontakt kan kopplas samman med en kontakt av samma storlek som finns på vissa av våra virkort. Det är den svarta 10-poliga LIGGANDE kontakten på virkortet, och INTE den svarta kontakt som står upprätt. Om fel kontakt används kan JTAG-burken GÅ SÖNDER. Observera dock att den korrekta kontakten som ligger ner har en generell bennumrering som inte stämmer med hur man räknar anslutningarna på den JTAG-burkens IDC-kontakt. Se tabellen nedan för hur det hänger ihop.

JTAG-burk Signalnamn Liggande
virkortskontakt
Beskrivning
1 TCK 16 Test Clock (clock signal from the JTAGICE3 into the target device)
2 GND 15 Ground. Both pin 2 and 10 must be connected to ensure that the JTAGICE3 and the target device share the same ground reference.
3 TDO 14 Test Data Out (data transmitted from the target device into the JTAGICE3)
4 VTG 13 Target voltage reference. The JTAGICE3 samples the target voltage on this pin in order to power the level converters correctly. The JTAGICE3 draws less than 1mA from this pin.
5 TMS 12 Test Mode Select (control signal from the JTAGICE3 into the target device)
6 nSRST 11 Reset (optional) Used to reset the target device. Connecting this pin is recommended since it allows the JTAGICE3 to hold the target device in a reset state, which can be essential to debugging in certain scenarios.
7 N.C. 10 No connection
8 nTRST 9 Test Reset (optional, only on some AVR devices). Used to reset the JTAG TAP controller
9 TDI 8 Test Data In (data transmitted from the JTAGICE3 into the target device)
10 GND 7 Ground. Both pin 2 and 10 must be connected to ensure that the JTAGICE3 and the target device share the same ground reference.

Programmering av mikrokontroller i Atmel Studio

Under förutsättning att allt är korrekt inkopplat och rätt spänning påslagen kan man i Atmel Studio välja “Tools / Device Programming”. I dialogrutan som kommer fram väljer man Tool till JTAGICE3, Device till ATmega16A (eller vilken mikrokontroller man nu har), Interface till JTAG och klickar på Apply. Det ska sedan likna följande figur:

OBSERVERA, att om man nu använder sig av en JTAG-kedja (JTAG Daisy chain, se nedan) så måste inställningarna för kejdan vara korrekta för att programmering av kretsen och dialogrutan ska fungera korrekt. Får man något felmeddelande så bör man kontrollera inställningarna samt virningarna för själva JTAG-kedjan. Dessa inställningar för JTAG-kedjan gäller bara vid programmering. För emulering (debugging) gäller andra inställningar (se nedan).

Om man sedan i dialogrutan för "Device Programming" väljer alternativet "Memories" så ser den ut enligt följande:

I rutan "Flash (16KB)" anger man namnet på den kompilerade hex-filen för projektet och klickar sedan på "Program". Går allt bra ska det stå "Verifying Flash...OK" längst ned. Här kan man även, i rutan "EEPROM (512bytes)", ange den hex-fil som man eventuellt vill programmera i AVR:ens EPROM-minne. Förväxla inte detta med programminnet.

Väljer man alternativet "Fuses" får man följande utseende:

Här finns inställningar för olika byglar i mikrokontrollern. Den sista "SUT_CKSEL" anger vilken klockkälla mikrokontrollern har. I vårat fall använder vi antingen EXTCLK (extern klocka, t ex EXO-3) eller INTRCOSC (intern klocka: 1, 2, 4 eller 8 MHz). Klockkällan har även olika alternativ för startuptid (den tid det tar från spänningstillslag tills det att mikrokontrollern börjar arbeta), vilka anges med ett antal klockcykler och en tid i millisekunder. Det kan t ex stå "EXTCLK_6CK_64MS" vilket alltså betyder extern klocka med en startuptid på 6 klockcykler och 64 ms. En startuptid är bra att ha då spänningar hinner att stabilisera sig efter spänningstillslag innan mikrokontrollern börjar köra. Ändrar man något här måste man också klicka på "Program" för att ändringen ska gälla.

Emulering (debugging) av mikrokontroller i Atmel Studio

För att kunna emulera måste först inställningarna för JTAG ICE 3 vara korrekta. Dessa finns under "Project / Projektnamn Properties ..." (eller tryck ALT + F7). Då visas följande dialogruta:

Som "Selected debugger/programmer" välj "JTAGICE3" och till "Interface:" välj "JTAG". Viktigt är också att "JTAG Clock" är inställd på en frekvens som är lägre än 1/4 av klockfrekvensen för mikrokontrollern. Använder man dessutom en JTAG-kedja (JTAG Daisy chain) så måste inställningarna för denna vara korrekt (se JTAG-kedja nedan).

Efter detta kan man börja emulera (debugga) genom att välja "Debug / Start Debugging and Break" (eller tryck ALT + F5). Atmel Studio går då in i debug-mode och en gul pil pekar på den programrad som ska köras härnäst, ungefär som i figuren nedan:

Om detta inte fungerar är det vanligaste felet att man glömt eller inte har gjort korrekta inställningar, alternativt har kopplat in JTAG ICE 3 på fel sätt, dvs virat fel.

JTAG-kedja, inkoppling och inställningar

Flera AVR:er kan kopplas i en s k JTAG-kedja då det sedan blir möjligt att via Atmel Studio välja vilken av AVR:erna som man för ögonblicket vill programmera eller emulera. Inkoppling sker på samma sätt som för en enda AVR, men med en liten skillnad. Signalerna TCK och TMS kopplas parallellt till alla AVR:er i kedjan. Signalen TDI kopplas till den första AVR:ens TDI, TDO på den första AVR:en kopplas till TDI på nästa AVR o s v, och TDO på den sista AVR:en i kedjan kopplas tillbaka till JTAG-burkens TDO.

OBSERVERA, att det är INTE rådligt att koppla flera AVR:er i en JTAG-kedja via en bandkabel, t ex mellan två virkort, då det lätt blir överhörning i en sådan kabel för högfrekventa signaler såsom JTAG signalerna. Om man trots allt måste göra detta så bör JTAG-signalerna separeras i bandkabeln så mycket som möjligt och “isoleras” från varandra genom att jordledare ansluts mellan varje signal. Bäst är förstås att istället ha separata JTAG-kedjor på respektive virkort.

Sedan måste man i Atmel Studio ställa in att man har en JTAG-kedja, dels för programmering och dels för emulering.

För programmering används den första dialogrutan under avsnittet “Programmering av mikrokontroller i Atmel Studio” ovan, och för emulering används den första dialogrutan under avsnittet “Emulering (debugging) av mikrokontroller i Atmel Studio” ovan. Båda dialogrutorna har samma inställningsmöjligheter enligt följande bild:

Klicka på radioknappen “Daisy chain”. Sedan måste man ange vilken AVR i kedjan man vill programmera alt. emulera. Det görs genom att ange hur många “Devices” (AVR:er) som sitter före och hur många som sitter efter den aktuella AVR:en i kedjan. Dessutom ska antalet “Instruction bits” anges. Dessa är 4 per AVR (för AVR Mega 16). I exemplet i dialogrutan ovan finns alltså totalt 2 AVR:er i kedjan och vi vill programmera / emulera den första av dom. Om vi hade haft 3 AVR:er i en JTAG-kedja och ville använda den första av dom skulle "Devices after" vara "2" och "Instruction bits after" vara "8" och om vi ville använda den mittersta (den andra) AVR:en i JTAG-kedja om 3 AVR:er skulle "Devices before" vara "1", "Instruction bits before" vara "4", "Devices after" vara "1" och "Instruction bits after" vara "4".

Observera, att vid emulering av en AVR i en JTAG-kedja så kör förstås dom övriga AVR:erna sina program i full fart. Det är bara den valda AVR:ens program som kan stegas igenom, programrad för programrad.

Vanliga felorsaker

Dom vanligaste problemen med JTAG och framförallt en JTAG-kedja brukar bero på felkopplingar, avsaknad av korrekta matningsspänningar, jordanslutningar och klocksignaler till AVR:erna, att JTAG-kedjan går via en bandkabel, inkorrekta inställningar i AVR Studio eller att själva JTAG-interfacet inte är aktiverat för AVR:en i fråga. Kontrollera dessa saker. Hjälper inte det så prova med en annan AVR, den kan ju vara trasig. I annat fall, kontakta handledaren.


W3.CSS

Thursday