Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Do testowania płytek drukowanych można używać czterech obowiązkowo zdefiniowanych instrukcji JTAG standardu IEEE 1149.1: IDCODE, BYPASS, SAMPLE/PRELOAD i EXTEST, jak również specyficznej, publicznej instrukcji AVR JTAG: AVR_RESET. Początkowe skanowanie ścieżki rejestru danych pokaże kod identyfikacyjny (ID-code) mikrokontrolera, ponieważ IDCODE jest standardową instrukcją JTAG. Może być pożądane utrzymywanie mikrokontrolera AVR w stanie resetu podczas trybu Testu. Jeśli nie ma resetu, to stany wejść mikrokontrolera mogą być określone za pomocą operacji skanowania, a wewnętrzne oprogramowanie może znaleźć się w stanie nieokreślonym przy wyjściu z trybu testu. Wchodząc w reset, wyjścia każdej końcówki portu natychmiast przejdą w stan wysokiej impedancji, co czyni zbędą instrukcję HIGHZ. Jeśli zajdzie potrzeba, można wysłać instrukcję BYPASS, aby wykonać najkrótszy możliwy łańcuch skanowania poprzez mikrokontroler. Mikrokontroler można ustawić w stan resetu albo przez wymuszenie stanu niskiego na zewnętrznej końcówce RESET, albo przez wysłanie instrukcji AVR_RESET z odpowiednim ustawieniem rejestru danych resetu (ang. Reset Data Register).
Instrukcja EXTEST jest używana do próbkowania zewnętrznych końcówek i ładowania końcówek wyjścia danymi. Dane wyjściowe latch (przerzutniki zatrzaskowe) zostaną wstawione na końcówki, gdy tylko instrukcja EXTEST zostanie załadowana do rejestru JTAG IR. Z tego powodu należy również użyć SAMPLE/PRELOAD do ustawienia początkowych wartości w pierścieniu skanowania, aby zapobiec uszkodzenia płyty z mikroprocesorem przy pierwszym wydawaniu instrukcji EXTEST. SAMPLE/PRELOAD można również używać do szybkich ujęć stanu końcówek podczas normalnej pracy układu.
Bit bezpiecznikowy JTAGEN musi być zaprogramowany oraz bit JTD w rejestrze we/wy MCUCSR musi być wyzerowany, aby uaktywnić port dostępu testowego JTAG.
Gdy używany jest interfejs JTAG do skanowania ścieżki krawędziowej, możliwe jest stosowanie wyższej częstotliwości zegara JTAG TCK od wewnętrznej częstotliwości układu. Zegar układu nie musi pracować.
Rejestr pomijania składa się z pojedynczego stopnia rejestru przesuwającego. Gdy rejestr pomijania zostanie wybrany jako ścieżka pomiędzy TDI i TDO, to jest on resetowany na 0 przy opuszczaniu stanu kontrolnego Capture-DR. Rejestru pomijania można używać do skracania łańcucha skanowania w systemie, gdy inne mikrokontrolery mają być testowane.
Poniższy rysunek przedstawia strukturę rejestru identyfikacyjnego:
Wersja jest 4-bitowym numerem określającym odmianę modelu mikrokontrolera. Numery wersji: 0x0 dla wersji A, 0x1 dla B itd.
Jest to 16-bitowy kod identyfikujący model mikrokontrolera.
Mikrokontroler | Numer elementu |
ATmega64 | 0x9608 |
ATmega1280 | 0x9703 |
ATmega1281 | 0x9704 |
ATmega2560 | 0x9801 |
ATmega2561 | 0x9802 |
Jest to 11-bitowy kod identyfikujący wytwórcę danego elementu. Dla firmy ATMEL kod ten jest równy 0x1F (szesnastkowo).
Jest to rejestr danych testu (ang. Test Data Register) używany do resetowania mikrokontrolera. Ponieważ w czasie resetu mikroprocesor AVR wprowadza końcówki portów w stan wysokiej impedancji, to rejestr resetowania może również zastąpić działanie opcjonalnej, niezaimplementowanej instrukcji JTAG HIGHZ.
Wysoka wartość w rejestrze resetowania odpowiada wymuszeniu stanu niskiego na zewnętrznej końcówce RESET. Mikrokontroler jest resetowany tak długo, jak wysoka wartość jest obecna w rejestrze resetowania. Zależnie od ustawień bitów bezpiecznikowych mikroprocesor pozostanie w stanie resetu przez okres upływu czasu resetowania (ang. Reset Time-Out Period) (zobacz do podrozdziału "Źródła zegarowe") po zwolnieniu rejestru resetowania. Wyjście z tego rejestru danych nie jest zatrzaskiwane, zatem reset będzie miał miejsce natychmiast, jak pokazano na poniższym rysunku:
Łańcuch skanowania ścieżki krawędziowej posiada możliwość sterowania poziomami logicznymi i obserwowania ich na cyfrowych końcówkach we/wy jak również na granicy pomiędzy logiką cyfrową i analogową dla obwodów analogowych, które posiadają pozaukładowe połączenia.
Pełny opis znajdziesz w podrozdziale "Łańcuch skanowania ścieżki krawędziowej".
Z definicji w tym rozdziale, najmłodszy bit LSB (ang. Least Significant Bit) jest pierwszym wsuwanym i pierwszym wysuwanym dla wszystkich rejestrów przesuwających.
Kod operacyjny każdej instrukcji jest pokazany za jej nazwą w formacie szesnastkowym. Tekst opisuje, który rejestr danych zostaje wybrany jako ścieżka pomiędzy TDI i TDO dla każdej instrukcji.
Obowiązkowa instrukcja JTAG do wyboru łańcucha skanowania ścieżki krawędziowej jako rejestru danych do testowania obwodów zewnętrznych dla obudowy mikrokontrolera AVR. W łańcuchu skanowania dostępne jest dla końcówek portów wyłączanie oporników podciągających, sterowanie wyjściem, dane wyjściowe i wejściowe. Dla obwodów analogowych posiadających połączenia pozaukładowe interfejs pomiędzy logiką analogową a cyfrową znajduje się w łańcuchu skanowania. Zawartości zatrzaśniętych wyjść są wyprowadzane na zewnątrz, gdy tylko rejestr instrukcji JTAG (ang. JTAG IRregister) zostanie załadowany instrukcją EXTEST.
Aktywne stany:
Opcjonalna instrukcja JTAG wybierająca 32-bitowy rejestr identyfikacji jako rejestr danych. Rejestr identyfikacji składa się z numeru wersji, numeru mikrokontrolera oraz kodu producenta wybranego przez JEDEC. Jest to standardowa instrukcja po włączeniu zasilania.
Aktywne stany:
Obowiązkowa instrukcja JTAG do wstępnego załadowania zatrzasków wyjściowych oraz zrobienia ujęcia stanu końcówek we/wy bez wpływania na pracę systemu. Jednakże zatrzaski wyjściowe nie są połączone z końcówkami. Jako rejestr danych zostaje wybrany łańcuch skanowania ścieżki krawędziowej.
Aktywne stany:
Publiczna instrukcja JTAG specyficzna dla AVR wymuszająca stan resetu w mikrokontrolerze AVR lub zwalniająca źródło resetu JTAG. Kontroler TAP nie jest resetowany przez tą instrukcję. Jednobitowy rejestr resetu zostaje wybrany jako rejestr danych. Zwróć uwagę, iż reset ten będzie aktywny tak długo, jak w łańcuchu resetu znajduje się logiczna jedynka. Wyjście z tego łańcucha nie jest przepuszczane przez przerzutnik zatrzaskowy latch.
Aktywne stany:
Obowiązkowa instrukcja JTAG wybierająca rejestr pomijania (ang. Bypass Register) na rejestr danych.
Aktywne stany:
Komórka skanowania ścieżki krawędziowej dla dwukierunkowej końcówki portu z opornikiem podciągającym
Powyższy rysunek pokazuje komórkę skanowania ścieżki krawędziowej dla dwukierunkowej końcówki portu z funkcją podciągania. Komórka składa się ze standardowej komórki skanowania ścieżki krawędziowej dla funkcji włączania podciągania (ang. Pull-up Enable, PUExn) oraz z komórki dwukierunkowej końcówki, która łączy trzy sygnały: Output Control – OCxn (sterowanie wyjściem), Output Data – ODxn (dane wyjściowe) i Input Data – IDxn (dane wejściowe) w dwustopniowy rejestr przesuwający. Indeksy portu i końcówki nie są używane w dalszym opisie.
Logika skanowania ścieżki krawędziowej nie jest pokazana na rysunkach w tym rozdziale. Poniższy rysunek przedstawia prostą końcówkę portu cyfrowego, jak opisano w rozdziale "Porty we/wy".
Schemat ogólnej końcówki portu z
wydzieleniem obszaru skanowania ścieżki krawędziowej
PUD | Wyłączanie podciągania | WDx | Zapis DDRx | |
PUExn | Włączanie podciągania dla końcówki Pxn | RDx | Odczyt DDRx | |
OCxn | Sterowanie wyjściem końcówki Pxn | WPx | Zapis PORTx | |
ODxn | Dane wyjściowe do końcówki Pxn | RRx | Odczyt rejestru PORTx | |
IDxn | Dane wejściowe z końcówki Pxn | RPx | Odczyt końcówki PORTx | |
SLEEP | Sterowanie uśpieniem | CLKI/O | Zegar we/wy |
Obwód skanowania ścieżki krawędziowej z poprzedniego rysunku zastępuje zielony obszar ograniczony kreskowaną linią. Jeśli nie jest obecna żadna alternatywna funkcja portu, to dane wejściowe ID odpowiadają wartości rejestru PINxn (lecz ID nie ma synchronizatora), dane wyjściowe OD odpowiadają rejestrowi PORT, sterowanie wyjściem OC odpowiada rejestrowi kierunku danych DD, a włączanie podciągania POExn odpowiada wyrażeniu logicznemu PUD · DDxn · PORTxn.
Cyfrowe funkcje alternatywne są podłączone poza obszarem zielonym, aby umożliwiać łańcuchowi skanowania odczyt aktualnej wartości końcówki. Przy funkcji analogowej występuje bezpośrednie połączenie od końcówki zewnętrznej do obwodu analogowego, a łańcuch skanowania jest wstawiony w interfejs pomiędzy logiką cyfrową a modułem analogowym.
Końcówka RESET akceptuje 5V przy aktywności w stanie niskim oraz 12V przy aktywności w stanie wysokim dla równoległego programowania wysokonapięciowego (ang. High Voltage Parallel Programming). Komórka obserwująca, pokazana na rysunku poniżej, jest wstawiona dla 5V sygnału resetu.
Komórka tylko obserwująca
Na przedstawionym poprzednio rysunku komórki skanowania ścieżki krawędziowej (który umieściliśmy powyżej dla przypomnienia) PXn.Data odpowiada FF0, PXn.Control odpowiada FF1 i PXn.Pullup_Enable odpowiada FF2. Bity 2, 3, 4 i 5 portu C nie występują w łańcuchu skanowania, ponieważ końcówki te tworzą końcówki TAP, gdy JTAG zostaje uaktywniony.
PUD | Wyłączanie podciągania | WDx | Zapis DDRx | |
PUExn | Włączanie podciągania dla końcówki Pxn | RDx | Odczyt DDRx | |
OCxn | Sterowanie wyjściem końcówki Pxn | WPx | Zapis PORTx | |
ODxn | Dane wyjściowe do końcówki Pxn | RRx | Odczyt rejestru PORTx | |
IDxn | Dane wejściowe z końcówki Pxn | RPx | Odczyt końcówki PORTx | |
SLEEP | Sterowanie uśpieniem | CLKI/O | Zegar we/wy |
Numer bitu | Nazwa sygnału | Moduł |
164 | PG5.Data | Port G |
163 | PG5.Control | |
162 | PE0.Data | Port E |
161 | PE0.Control | |
160 | PE1.Data | |
159 | PE1.Control | |
158 | PE2.Data | |
157 | PE2.Control | |
156 | PE3.Data | |
155 | PE3.Control | |
154 | PE4.Data | |
153 | PE4.Control | |
152 | PE5.Data | |
151 | PE5.Control | |
150 | PE6.Data | |
149 | PE6.Control | |
148 | PE7.Data | |
147 | PE7.Control | |
146 | PH0.Data | Port H |
145 | PH0.Control | |
144 | PH1.Data | |
143 | PH1.Control | |
142 | PH2.Data | |
141 | PH2.Control | |
140 | PH3.Data | |
139 | PH3.Control | |
138 | PH4.Data | |
137 | PH4.Control | |
136 | PH5.Data | |
135 | PH5.Control | |
134 | PH6.Data | |
133 | PH6.Control | |
132 | PB0.Data | Port B |
131 | PB0.Control | |
130 | PB1.Data | |
129 | PB1.Control | |
128 | PB2.Data | |
127 | PB2.Control | |
126 | PB3.Data | |
125 | PB3.Control | |
124 | PB4.Data | |
123 | PB4.Control | |
122 | PB5.Data | |
121 | PB5.Control | |
120 | PB6.Data | |
119 | PB6.Control | |
118 | PB7.Data | |
117 | PB7.Control | |
116 | PH7.Data | Port H |
115 | PH7.Control | |
114 | PG3.Data | Port G |
113 | PG3.Control | |
112 | PG4.Data | |
111 | PG4.Control | |
110 | RSTT | Logika Resetu (tylko do obserwacji) |
109 | PL0.Data | Port L |
108 | PL0.Control | |
107 | PL1.Data | |
106 | PL1.Control | |
105 | PL2.Data | |
104 | PL2.Control | |
103 | PL3.Data | |
102 | PL3.Control | |
101 | PL4.Data | |
100 | PL4.Control | |
99 | PL5.Data | |
98 | PL5.Control | |
97 | PL6.Data | |
96 | PL6.Control | |
95 | PL7.Data | |
94 | PL7.Control | |
93 | PD0.Data | Port D |
92 | PD0.Control | |
91 | PD1.Data | |
90 | PD1.Control | |
89 | PD2.Data | |
88 | PD2.Control | |
87 | PD3.Data | |
86 | PD3.Control | |
85 | PD4.Data | |
84 | PD4.Control | |
83 | PD5.Data | |
82 | PD5.Control | |
81 | PD6.Data | |
80 | PD6.Control | |
79 | PD7.Data | |
78 | PD7.Control | |
77 | PG0.Data | Port G |
76 | PG0.Control | |
75 | PG1.Data | |
74 | PG1.Control | |
73 | PC0.Data | Port C |
72 | PC0.Control | |
71 | PC1.Data | |
70 | PC1.Control | |
69 | PC2.Data | |
68 | PC2.Control | |
67 | PC3.Data | |
66 | PC3.Control | |
65 | PC4.Data | |
64 | PC4.Control | |
63 | PC5.Data | |
62 | PC5.Control | |
61 | PC6.Data | |
60 | PC6.Control | |
59 | PC7.Data | |
58 | PC7.Control | |
57 | PJ0.Data | Port J |
56 | PJ0.Control | |
55 | PJ1.Data | |
54 | PJ1.Control | |
53 | PJ2.Data | |
52 | PJ2.Control | |
51 | PJ3.Data | |
50 | PJ3.Control | |
49 | PJ4.Data | |
48 | PJ4.Control | |
47 | PJ5.Data | |
46 | PJ5.Control | |
45 | PJ6.Data | |
44 | PJ6.Control | |
43 | PG2.Data | Port G |
42 | PG2.Control | |
41 | PA7.Data | Port A |
40 | PA7.Control | |
39 | PA6.Data | |
38 | PA6.Control | |
37 | PA5.Data | |
36 | PA5.Control | |
35 | PA4.Data | |
34 | PA4.Control | |
33 | PA3.Data | |
32 | PA3.Control | |
31 | PA2.Data | |
30 | PA2.Control | |
29 | PA1.Data | |
28 | PA1.Control | |
27 | PA0.Data | |
26 | PA0.Control | |
25 | PJ7.Data | Port J |
24 | PJ7.Control | |
23 | PK7.Data | Port K |
22 | PK7.Control | |
21 | PK6.Data | |
20 | PK6.Control | |
19 | PK5.Data | |
18 | PK5.Control | |
17 | PK4.Data | |
16 | PK4.Control | |
15 | PK3.Data | |
14 | PK3.Control | |
13 | PK2.Data | |
12 | PK2.Control | |
11 | PK1.Data | |
10 | PK1.Control | |
9 | PK0.Data | |
8 | PK0.Control | |
7 | PF3.Data | Port F |
6 | PF3.Control | |
5 | PF2.Data | |
4 | PF2.Control | |
3 | PF1.Data | |
2 | PF1.Control | |
1 | PF0.Data | |
0 | PF0.Control |
Numer bitu | Nazwa sygnału | Moduł |
100 | PG5.Data | Port G |
99 | PG5.Control | |
98 | PE0.Data | |
97 | PE0.Control | |
96 | PE1.Data | |
95 | PE1.Control | |
94 | PE2.Data | |
93 | PE2.Control | |
92 | PE3.Data | |
91 | PE3.Control | |
90 | PE4.Data | |
89 | PE4.Control | |
88 | PE5.Data | |
87 | PE5.Control | |
86 | PE6.Data | |
85 | PE6.Control | |
84 | PE7.Data | |
83 | PE7.Control | |
82 | PB0.Data | Port B |
81 | PB0.Control | |
80 | PB1.Data | |
79 | PB1.Control | |
78 | PB2.Data | |
77 | PB2.Control | |
76 | PB3.Data | |
75 | PB3.Control | |
74 | PB4.Data | |
73 | PB4.Control | |
72 | PB5.Data | |
71 | PB5.Control | |
70 | PB6.Data | |
69 | PB6.Control | |
68 | PB7.Data | |
67 | PB7.Control | |
66 | PG3.Data | Port G |
65 | PG3.Control | |
64 | PG4.Data | |
63 | PG4.Control | |
62 | RSTT | Logika resetu (tylko do podglądu) |
61 | PD0.Data | Port D |
60 | PD0.Control | |
59 | PD1.Data | |
58 | PD1.Control | |
57 | PD2.Data | |
56 | PD2.Control | |
55 | PD3.Data | |
54 | PD3.Control | |
53 | PD4.Data | |
52 | PD4.Control | |
51 | PD5.Data | |
50 | PD5.Control | |
49 | PD6.Data | |
48 | PD6.Control | |
47 | PD7.Data | |
46 | PD7.Control | |
45 | PG0.Data | Port G |
44 | PG0.Control | |
43 | PG1.Data | |
42 | PG1.Control | |
41 | PC0.Data | Port C |
40 | PC0.Control | |
39 | PC1.Data | |
38 | PC1.Control | |
37 | PC2.Data | |
36 | PC2.Control | |
35 | PC3.Data | |
34 | PC3.Control | |
33 | PC4.Data | |
32 | PC4.Control | |
31 | PC5.Data | |
30 | PC5.Control | |
29 | PC6.Data | |
28 | PC6.Control | |
27 | PC7.Data | |
26 | PC7.Control | |
25 | PG2.Data | Port G |
24 | PG2.Control | |
23 | PA7.Data | Port A |
22 | PA7.Control | |
21 | PA6.Data | |
20 | PA6.Control | |
19 | PA5.Data | |
19 | PA5.Control | |
17 | PA4.Data | |
16 | PA4.Control | |
15 | PA3.Data | |
14 | PA3.Control | |
13 | PA2.Data | |
12 | PA2.Control | |
11 | PA1.Data | |
10 | PA1.Control | |
9 | PA0.Data | |
8 | PA0.Control | |
7 | PF3.Data | Port F |
6 | PF3.Control | |
5 | PF2.Data | |
4 | PF2.Control | |
3 | PF1.Data | |
2 | PF1.Control | |
1 | PF0.Data | |
0 | PF0.Control |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 (0x55) | JTD | – | – | PUD | – | – | IVSEL | IVCE | MCUCSR |
Zapis/Odczyt | Z/O | O | O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | Zobacz na opis bitów |
Gdy ten bit ma stan zero, to interfejs JTAG będzie włączony, jeśli zaprogramowano bit bezpiecznikowy JTAGEN. Jeśli bit ma stan 1, interfejs JTAG jest wyłączony. Aby zapobiec niezamierzonemu włączeniu lub wyłączeniu interfejsu JTAG, zmiana tego bitu wymaga użycia sekwencji czasowej. Aplikacja musi wpisać pożądaną wartość do tego bitu dwukrotnie w ciągu czterech taktów zegara. Bit JTD nie powinien być zmieniany podczas korzystania z wbudowanego systemu debugowania.
Rejestr MCUSR dostarcza informacji na temat źródła, które spowodowało reset mikrokontrolera.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 (0x54) | – | – | – | JTRF | WDRF | BORF | EXTRF | PORF | MCUSR |
Zapis/Odczyt | O | O | O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | Zobacz na opis bitów |
Ten bit jest ustawiany, jeśli reset powoduje logiczne 1 w rejestrze resetu JTAG (JTAG Reset Register) wybranym przez instrukcję JTAG AVR_RESET. Bit jest zerowany przez reset przy włączaniu lub przez zapis logicznego zera do tego znacznika.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.