Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega32

Interfejs JTAG i wbudowany system uruchomieniowy

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Cechy

Cytat z Wikipedii:

JTAG (ang. Joint Test Action Group) to nazwa standardu IEEE 1149.1 definiującego protokół używany do testowania połączeń na płytkach drukowanych, stosowany także do uruchamiania i programowania układów programowalnych i systemów mikroprocesorowych. Żeby można było wykorzystywać JTAG do wymienionych celów, układy scalone umieszczone w testowanym systemie muszą posiadać wewnątrz odpowiednią warstwę sprzętową tego interfejsu. Jednym z najważniejszych założeń standardu JTAG jest możliwość programowania układu w gotowym urządzeniu, bez konieczności odłączania (ang. In-System Programming, w skrócie ISP).

Zaimplementowany w ATmega32 standard JTAG posiada następujące cechy:

Na początek:  podrozdziału   strony 

Przegląd

Interfejs AVR JTAG (kompatybilny ze standardem IEEE 1149.1) może być używany do:

W kolejnych podrozdziałach podano krótki opis. Szczegółowy opis programowania za pomocą JTAG i używania łańcucha skanowania ścieżki krawędziowej znajduje się w rozdziałach "Programowanie poprzez interfejs JTAG" i  "Skanowanie ścieżki krawędziowej IEEE 1149.1 (JTAG)".

Poniższy rysunek pokazuje schemat blokowy interfejsu JTAG oraz wbudowanego systemu debugowania.

Kontroler TAP jest pewną maszyną stanów sterowaną sygnałami TCK i TMS. Kontroler TAP wybiera albo rejestr instrukcji JTAG, albo jeden z kilku rejestrów danych jako łańcuch skanowania (rejestr przesuwający) pomiędzy wejściem TDI a wyjściem TDO. Rejestr instrukcji przechowuje instrukcje JTAG kontrolujące zachowanie się rejestru danych. Rejestr ID, rejestr Bypass i Łańcuch Skanowania Ścieżki Krawędziowej (ang. Boundary-scan Chain) są rejestrami danych używanymi do testowania na poziomie płytki z mikrokontrolerem. Interfejs programowania JTAG (faktycznie składający się z kilku fizycznych i wirtualnych rejestrów danych) używany jest do szeregowego programowania JTAG poprzez interfejs JTAG. Wewnętrzny łańcuch skanowania i łańcuch skanowania punktów wstrzymania używane są jedynie do wewnątrzukładowego debugowania.

Na początek:  podrozdziału   strony 

Port dostępu dla testu – TAP

Dostęp do interfejsu JTAG odbywa się poprzez cztery końcówki AVR.

W terminologii JTAG końcówki te tworzą port dostępu dla testu (ang. Test Access Port, TAP). Są to:

Standard IEEE 1149.1 określa również opcjonalny sygnał TAP: TRST – Test ReSeT – Reset testu  – który nie jest tu dostarczony.

Gdy bit bezpiecznikowy JTAGEN nie jest zaprogramowany, to te cztery końcówki TAP są normalnymi końcówkami portu, a kontroler TAP znajduje się w stanie resetu. Gdy bit ten zostanie zaprogramowany i bit JTD w rejestrze MCUCSR jest wyzerowany, to linie sygnałowe TAP zostają podciągnięte wewnętrznie do stanu wysokiego, a JTAG włącza się do skanowania ścieżki krawędziowej i programowania. W tym przypadku końcówka wyjściowa TAP (TDO) staje się wiszącą bez podłączenia w stanach, w których kontroler TAP nie przesuwa danych i z tego powodu musi być podłączona do opornika podciągającego lub innego urządzenia wyposażonego w oporniki podciągające (na przykład wejścia TDI następnego mikrokontrolera w łańcuchu skanowania). Mikrokontroler sprzedawany jest z zaprogramowanym bitem bezpiecznikowym JTAGEN.

Dla wbudowanego systemu debugowania, dodatkowo do końcówek interfejsu JTAG, końcówka RESET jest monitorowana przez debuger w celu możliwości wykrywania zewnętrznych źródeł resetu. Debuger może również wymusić stan niski na końcówce RESET, aby zresetować cały system, zakładając użycie w aplikacji tylko otwartych kolektorów na linii resetowania.

Na początek:  podrozdziału   strony 

Kontroler TAP

Diagram stanów kontrolera TAP

Kontroler TAP jest 16-stanowym automatem skończonym, który steruje działaniem obwodu skanowania ścieżki krawędziowej, obwodu programowania JTAG lub wbudowanym systemem debugowania. Przejścia stanów zilustrowane na powyższym rysunku zależą od sygnału obecnego na końcówce TMS (pokazanego obok każdego przejścia stanu) w czasie narastającego zbocza na końcówce TCK. Stanem początkowym po resecie przy włączeniu zasilania (ang. Power-On Reset) jest stan Test-Logic-Reset.

Z definicji w tym dokumencie bit najmniej znaczący LSB jest wsuwany i wysuwany jako pierwszy bit dla wszystkich rejestrów przesuwających. Zakładając, iż bieżącym stanem jest Run-Test/Idle, typowy scenariusz wykorzystania interfejsu JTAG jest następujący:

Jak pokazano na diagramie stanów nie musi występować wejście w stan Run-Test/Idle pomiędzy wybieraniem rejestrów instrukcji JTAG i danych, a niektóre instrukcje JTAG mogą wybierać pewne funkcje do wykonania w stanie Run-Test/Idle, co czyni go nieodpowiednim dla stanu bezczynności (ang. Idle state).

Uwaga: Niezależnie od początkowego stanu kontrolera TAP, zawsze można wejść w stan Test-Logic-Reset przez utrzymanie TMS w stanie wysokim przez pięć taktów zegara TCK.

Szczegółową informację na temat specyfikacji JTAG znajdziesz w literaturze wymienionej w podrozdziale "Biografia".

Na początek:  podrozdziału   strony 

Używanie łańcucha ścieżki krawędziowej

Pełny opis możliwości skanowania ścieżki krawędziowej znajduje się w rozdziale "Skanowanie ścieżki krawędziowej IEEE 1149.1 (JTAG)".
Na początek:  podrozdziału   strony 

Używanie wbudowanego systemu debugowania

Jak pokazano na powyższym rysunku wsparcie sprzętowe dla wewnątrzukładowego debugowania składa się głównie z:

Wszystkie operacje odczytu lub modyfikacji/zapisu potrzebne do zaimplementowania debugera są wykonywane przez stosowanie instrukcji AVR poprzez wewnętrzny łańcuch skanowania mikroprocesora AVR. Mikroprocesor przesyła wynik do komórki odwzorowanej w pamięci we/wy, która jest częścią interfejsu komunikacyjnego pomiędzy mikroprocesorem a systemem JTAG.

Moduł punktów wstrzymania (ang. Break Point Unit) implementuje wstrzymanie przy zmianie przepływu programu (ang. Break on Change of Program Flow), wstrzymywanie krokowe (ang. Single Step Break),  2 punkty wstrzymania w pamięci programu (ang. 2 Program Memory Break Points) i 2 połączone punkty wstrzymania. Łącznie można skonfigurować 4 punkty wstrzymania jako:

Debuger, podobnie jak AVR Studio, może jednakże użyć jednego lub więcej z tych zasobów dla swoich wewnętrznych celów, pozostawiając mniej możliwości użytkownikowi końcowemu. Listę specyficznych instrukcji JTAG debugowania wewnętrznego znajdziesz w następnym podrozdziale.

Bit bezpiecznikowy JTAGEN musi zostać zaprogramowany, aby uaktywnić Port JTAG dostępu testowego. Dodatkowo musi być zaprogramowany bit bezpiecznikowy OCDEN i nie może być ustawiony żaden z bitów blokujących, aby wbudowany system debugowania działał. Ze względów bezpieczeństwa system ten jest nieaktywny po ustawieniu dowolnego bitu blokującego. W przeciwnym razie wbudowany system debugowania udostępniałby tylne wejście do zabezpieczonego mikrokontrolera.

AVR JTAG ICE firmy Atmel jest zaawansowanym narzędziem do testowania i uruchamiania wszystkich 8-bitowych mikrokontrolerów RISC AVR posiadających interfej JTAG zgodny ze standardem IEEE 1149.1. JTAG ICE i interfejs AVR Studio dają użytkownikowi zupełną kontrolę nad wewnętrznymi zasobami mikrokontrolera, pomagając zredukować czas projektowania dzięki uproszczeniu debugowania. JTAG ICE wykonuje emulację w czasie rzeczywistym mikrokontrolera, podczas jego pracy w systemie docelowym.

Pełny opis AVR JTEG ICE znajdziesz w Internecie. Stamtąd również możesz pobrać darmowe AVR Studio (obecnie firma Atmel została przejęta przez Microchip i wszelkie narzędzia znajdują się w witrynie tej firmy).

Wszystkie niezbędne rozkazy wykonawcze są dostępne w AVR Studio, zarówno na poziomie źródłowym jak i na poziomie kodu maszynowego. Użytkownik może wykonywać program krokowo albo wchodząc do funkcji, albo przechodząc ponad nimi, wychodząc z funkcji, umieszczając kursor na rozkazie i wykonując program, aż rozkaz ten zostanie osiągnięty, zatrzymywać wykonanie oraz resetować wykonywanie programu na docelowym mikrokontrolerze. Dodatkowo użytkownik może mieć nieograniczoną liczbę programowych punktów wstrzymania (przez użycie instrukcji BREAK) oraz do dwóch punktów wstrzymania w pamięci danych, alternatywnie połączonych w zakresowy punk wstrzymania.

Na początek:  podrozdziału   strony 

Specyficzne instrukcje JTAG debugowania wewnętrznego

Uważa się, iż wsparcie wewnątrzukładowego debugowania to prywatne instrukcje JTAG używane tylko wewnątrz firmy ATMEL oraz wśród jej wybranych kooperantów. Poniższe kody podane są jedynie do wglądu.

PRIVATE0; $8 Prywatna instrukcja JTAG dająca dostęp do wewnętrznego systemu debugowania.
PRIVATE1; $9 Prywatna instrukcja JTAG dająca dostęp do wewnętrznego systemu debugowania.
PRIVATE2; $A Prywatna instrukcja JTAG dająca dostęp do wewnętrznego systemu debugowania.
PRIVATE3; $B Prywatna instrukcja JTAG dająca dostęp do wewnętrznego systemu debugowania.

Na początek:  podrozdziału   strony 

Rejestr w pamięci we/wy związany z debugowaniem wewnętrznym

OCDR – On-chip Debug Register – Rejestr wewnętrznego debugowania

Bit 7 6 5 4 3 2 1 0  
0x31 (0x51) MSB/IDRD             LSB OCDR
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr OCDR udostępnia kanał komunikacyjny od pracującego programu w mikrokontrolerze do debugera. Mikroprocesor może przesłać jakiś bajt do debugera przez zapis pod ten adres. W tym samym czasie znacznik wewnętrzny zapisu do rejestru we/wy debugowania (ang. I/O Debug Register Dirty, IDRD) zostaje ustawiony, aby poinformować debuger, iż rejestr ten został zapisany. Gdy mikroprocesor odczytuje rejestr OCDR, to 7 młodszych bitów będą pochodziły z rejestru OCDR, podczas gdy najstarszy bit MSB będzie bitem IDRD. Debuger zeruje bit IDRD, gdy odczyta informację z rejestru.

W niektórych mikrokontrolerach AVR rejestr OCDR jest współdzielony ze standardowym rejestrem we/wy. W takim przypadku dostęp do rejestru OCDR staje się możliwy dopiero po zaprogramowaniu bitu bezpiecznikowego OCDEN, a dostęp ten uaktywnia debuger. We wszystkich pozostałych przypadkach dostęp następuje do standardowego rejestru we/wy (w przypadku mikrokontrolera ATmega32 jest to rejestr kalibracyjny OSCCAL). Sposób wykorzystywania rejestru OCDR znajdziesz w dokumentacji swojego debugera.

Na początek:  podrozdziału   strony 

Używanie możliwości programowania poprzez JTAG

Programowanie mikrokontrolera AVR poprzez JTAG wykonywane jest przy pomocy 4-końcówkowego portu JTAG: TCK, TMS, TDI i TDO. Są to jedyne końcówki, które muszą być sterowane przy wykonywaniu programowania JTAG (dodatkowo do końcówek zasilania). Nie ma potrzeby zastosowania zewnętrznie napięcia 12V. Aby uaktywnić port dostępu testowego JTAG (ang. JTAG Test Access Port), bit bezpiecznikowy JTAGEN musi być zaprogramowany oraz należy wyzerować bit JTD w rejestrze MCUCSR.

Programowanie poprzez interfejs JTAG obsługuje:

Zabezpieczenia bitami blokującymi są dokładnie takie same jak w trybie programowania równoległego. Jeśli zostały zaprogramowane bity blokujące LB1 i LB2, to bitu bezpiecznikowego OCDEN nie można zaprogramować bez wcześniejszego wyczyszczenia mikrokontrolera (ang. Chip Erase). Jest to zabezpieczenie uniemożliwiające włamanie się tylnymi drzwiami do zabezpieczonego mikrokontrolera i odczytanie jego zawartości.

Szczegóły na temat programowania przez interfejs JTAG oraz instrukcji JTAG specyficznych dla programowania znajdziesz w podrozdziale "Programowanie poprzez interfejs JTAG".

Na początek:  podrozdziału   strony 

Bibliografia

Aby otrzymać więcej informacji na temat ogólnej ścieżki skanowania krawędziowego, skonsultuj się z następującą literaturą:
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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.