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 |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Mikrokontroler ATmega 48A/48PA nie posiada wydzielonej sekcji boot-loadera, a instrukcja SPM jest włączona dla całej pamięci FLASH, jeśli został zaprogramowany bit bezpiecznikowy SELFPRGEN ("0"). W przeciwnym razie instrukcja SPM jest wyłączona.
Bajt z bitami blokującymi(1)
Nazwa bitu blokującego | Numer bitu | Opis | Standardowa wartość(1) |
7 | – | 1 (niezaprogramowany) | |
6 | – | 1 (niezaprogramowany) | |
BLB12(2) | 5 | Bit blokujący boot-loadera | 1 (niezaprogramowany) |
BLB11(2) | 4 | Bit blokujący boot-loadera | 1 (niezaprogramowany) |
BLB02(2) | 3 | Bit blokujący boot-loadera | 1 (niezaprogramowany) |
BLB01(2) | 2 | Bit blokujący boot-loadera | 1 (niezaprogramowany) |
LB2 | 1 | Bit blokujący | 1 (niezaprogramowany) |
LB1 | 0 | Bit blokujący | 1 (niezaprogramowany) |
Uwagi: | 1. | "1" oznacza bit niezaprogramowany, "0" oznacza bit zaprogramowany. |
2. | Tylko w mikrokontrolerze ATmega88A/88PA/168A/168PA/328/328P. |
Tryby zabezpieczeń bitów blokujących(1)(2)
Bity blokujące pamięci | Rodzaj zabezpieczenia | ||
Tryb LB | LB2 | LB1 | |
1 | 1 | 1 | Cechy blokowania pamięci wyłączone |
2 | 1 | 0 | Dalsze programowanie FLASH i EEPROM jest zablokowane w trybie programowania równoległego i szeregowego. Bity bezpiecznikowe są zablokowane w obu trybach programowania(1). |
3 | 0 | 0 | Dalsze programowanie i weryfikacja FLASH oraz EEPROM są zablokowane w trybie programowania równoległego i szeregowego. Bity bezpiecznikowe są zablokowane w obu trybach programowania(1). |
Tryby zabezpieczeń bitów blokujących(1)(2). Tylko dla ATmega88A/88PA/168A/168PA/328/328P.
Bity blokujące pamięci | Rodzaj zabezpieczenia | ||
Tryb BLB0 | BLB02 | BLB01 | |
1 | 1 | 1 | Nie ma ograniczeń dostępu instrukcji SPM i LPM do sekcji aplikacji. |
2 | 1 | 0 | Instrukcja SPM nie może zapisywać w sekcji aplikacji. |
3 | 0 | 0 | Instrukcja SPM nie może zapisywać w sekcji aplikacji, a instrukcja LPM wykonywana z sekcji boot-loadera nie może odczytywać z sekcji aplikacji. Jeśli wektory przerwań są umieszczone w sekcji boot-loadera, przerwania są zablokowane podczas wykonywania z sekcji aplikacji. |
4 | 0 | 1 | Instrukcja LPM wykonująca się z sekcji boot-loadera nie może odczytywać z sekcji aplikacji. Jeśli wektory przerwań są umieszczone w sekcji boot-loadera, przerwania są zablokowane podczas wykonywania z sekcji aplikacji. |
Tryb BLB1 | BLB12 | BLB11 | |
1 | 1 | 1 | Nie ma ograniczeń dostępu instrukcji SPM i LPM do sekcji boot-loadera. |
2 | 1 | 0 | Instrukcja SPM nie może zapisywać w sekcji boot-loadera. |
3 | 0 | 0 | Instrukcja SPM nie może zapisywać w sekcji boot-loadera, a instrukcja LPM wykonywana z sekcji aplikacji nie może odczytywać z sekcji boot-loadera. Jeśli wektory przerwań są umieszczone w sekcji aplikacji, przerwania są zablokowane podczas wykonywania z sekcji boot-loadera. |
4 | 0 | 1 | Instrukcja LPM wykonująca się z sekcji aplikacji nie może odczytywać z sekcji boot-loadera. Jeśli wektory przerwań są umieszczone w sekcji aplikacji, przerwania są zablokowane podczas wykonywania z sekcji boot-loadera. |
Uwagi: | 1. | Zaprogramuj bity bezpiecznikowe i bity blokujące boot-loadera przed zaprogramowaniem bitów blokujących LB1 i LB2. |
2. | "1" oznacza bit niezaprogramowany, "0" oznacza bit zaprogramowany. |
Rozszerzony bajt bitów bezpiecznikowych w ATmega48A/48PA
Rozszerzony bajt bitów bezpiecznikowych | Numer bitu | Opis | Standardowa wartość |
– | 7 | – | 1 |
– | 6 | – | 1 |
– | 5 | – | 1 |
– | 4 | – | 1 |
– | 3 | – | 1 |
– | 2 | – | 1 |
– | 1 | – | 1 |
SELFPRGEN | 0 | Uaktywnienie samoprogramowania | 1 (niezaprogramowane) |
Rozszerzony bajt bitów bezpiecznikowych dla ATmega88A/88PA/168A/168PA
Rozszerzony bajt bitów bezpiecznikowych | Numer bitu | Opis | Standardowa wartość |
– | 7 | – | 1 |
– | 6 | – | 1 |
– | 5 | – | 1 |
– | 4 | – | 1 |
– | 3 | – | 1 |
BOOTSZ1 | 2 | Wybór rozmiaru obszaru boot-loadera | 0 (zaprogramowane)(1) |
BOOTSZ0 | 1 | Wybór rozmiaru obszaru boot-loadera | 0 (zaprogramowane)(1) |
BOOTRST | 0 | Wybór wektora resetu | 1 (niezaprogramowane) |
Uwaga: | 1. | Standardowa wartość BOOTSZ[1:0] daje w wyniku maksymalny rozmiar obszaru boot-loadera.. |
Rozszerzony bajt bitów bezpiecznikowych dla ATmega328/328P
Rozszerzony bajt bitów bezpiecznikowych | Numer bitu | Opis | Standardowa wartość |
– | 7 | – | 1 |
– | 6 | – | 1 |
– | 5 | – | 1 |
– | 4 | – | 1 |
– | 3 | – | 1 |
BODLEVEL2(1) | 2 | Poziom wyzwalania dla detektora spadku napięcia zasilającego | 1 (niezaprogramowane) |
BODLEVEL1(1) | 1 | Poziom wyzwalania dla detektora spadku napięcia zasilającego | 1 (niezaprogramowane) |
BODLEVEL0(1) | 0 | Poziom wyzwalania dla detektora spadku napięcia zasilającego | 1 (niezaprogramowane) |
Uwagi: | 1. | Opis dekodowania bitów bezpiecznikowych BODLEVEL znajdziesz w podrozdziale "Parametry systemu i resetu". |
Górny bajt bitów bezpiecznikowych dla ATmega48A/48PA/88A/88PA/168A/168PA
Górny bajt bitów bezpiecznikowych | Numer bitu | Opis | Standardowa wartość |
RSTDISB(1) | 7 | Wyłączenie zewnętrznego resetu | 1 (niezaprogramowane) |
DWEN | 6 | Uaktywnienie systemu debugWIRE | 1 (niezaprogramowane) |
SPIEN(2) | 5 | Włączenie szeregowego programowania i odczytu pamięci | 0 (zaprogramowane) |
WDTON(3) | 4 | Timer licznika zegarowego zawsze włączony | 1 (niezaprogramowane) |
EESAVE | 3 | Zachowanie zawartości pamięci EEPROM podczas kasowania układu | 1 (niezaprogramowane) |
BODLEVEL2(4) | 2 | Poziom wyzwalania dla detektora spadku napięcia zasilającego | 1 (niezaprogramowane) |
BODLEVEL1(4) | 1 | Poziom wyzwalania dla detektora spadku napięcia zasilającego | 1 (niezaprogramowane) |
BODLEVEL0(4) | 0 | Poziom wyzwalania dla detektora spadku napięcia zasilającego | 1 (niezaprogramowane) |
Uwagi: | 1. | Opis bitu bezpiecznikowego RSTDISBL znajdziesz w podrozdziale "Alternatywne funkcje portu C". |
2. | Bit bezpiecznikowy SPIEN jest niedostępny w trybie programowania szeregowego. | |
3. | Szczegóły znajdziesz w opisie rejestru WDTCSR. | |
4. | Opis dekodowania bitów bezpiecznikowych BODLEVEL znajdziesz w podrozdziale "Parametry systemu i resetu". |
Górny bajt bitów bezpiecznikowych dla ATmega328/328P
Górny bajt bitów bezpiecznikowych | Numer bitu | Opis | Standardowa wartość |
RSTDISB(1) | 7 | Wyłączenie zewnętrznego resetu | 1 (niezaprogramowane) |
DWEN | 6 | Uaktywnienie systemu debugWIRE | 1 (niezaprogramowane) |
SPIEN(2) | 5 | Włączenie szeregowego programowania i odczytu pamięci | 0 (zaprogramowane) |
WDTON(3) | 4 | Timer licznika zegarowego zawsze włączony | 1 (niezaprogramowane) |
EESAVE | 3 | Zachowanie zawartości pamięci EEPROM podczas kasowania układu | 1 (niezaprogramowane) |
BOOTSZ1 | 2 | Wybór rozmiaru obszaru boot-loadera | 0 (zaprogramowane)(4) |
BOOTSZ0 | 1 | Wybór rozmiaru obszaru boot-loadera | 0 (zaprogramowane)(4) |
BOOTRST | 0 | Wybór wektora resetu | 1 (niezaprogramowane) |
Uwagi: | 1. | Opis bitu bezpiecznikowego RSTDISBL znajdziesz w podrozdziale "Alternatywne funkcje portu C". |
2. | Bit bezpiecznikowy SPIEN jest niedostępny w trybie programowania szeregowego. | |
3. | Szczegóły znajdziesz w opisie rejestru WDTCSR. | |
4. | Standardowa wartość BOOTSZ[1:0] daje w wyniku maksymalny rozmiar obszaru boot-loadera. |
Dolny bajt bitów bezpiecznikowych
Dolny bajt bitów bezpiecznikowych | Numer bitu | Opis | Standardowa wartość |
CKDIV8(4) | 7 | Poziom wyzwalania detektora spadku napięcia zasilającego | 0 (zaprogramowane) |
CKOUT(3) | 6 | Włączenie detektora spadku napięcia zasilającego (BOD) | 1 (niezaprogramowane) |
SUT1 | 5 | Wybór czasu uruchamiania się mikrokontrolera | 1 (niezaprogramowane)(1) |
SUT0 | 4 | Wybór czasu uruchamiania się mikrokontrolera | 0 (zaprogramowane)(1) |
CKSEL3 | 3 | Wybór źródła zegarowego | 0 (zaprogramowane)(2) |
CKSEL2 | 2 | Wybór źródła zegarowego | 0 (zaprogramowane)(2) |
CKSEL1 | 1 | Wybór źródła zegarowego | 1 (NIEzaprogramowane)(2) |
CKSEL0 | 0 | Wybór źródła zegarowego | 0 (niezaprogramowane)(2) |
Uwagi: | 1. | Standardowe ustawienie bitów bezpiecznikowych SUT1..0 daje maksymalny czas uruchamiania mikrokontrolera. |
2. | Standardowe ustawienie bitów bezpiecznikowych CKSEL3..0 daje w wyniku taktowanie wewnętrznym oscylatorem RC przy 8MHz. | |
3. | Bit bezpiecznikowy CKOUT Fuse umożliwia wyprowadzenie zegara systemowego na końcówkę PB0. | |
4. | Szczegóły znajdziesz w podrozdziale "Preskaler zegara systemowego". |
Stan bitów bezpiecznikowych nie jest zmieniany przez kasowanie układu (ang. Chip Erase). Zauważ, iż bity bezpiecznikowe są zablokowane, jeśli został zaprogramowany bit blokujący LB1. Zaprogramuj bity bezpiecznikowe przed zaprogramowaniem bitów blokujących.
Wartości bitów bezpiecznikowych zostają zapamiętane, gdy mikrokontroler wchodzi w tryb programowania i zmiany ich wartości zaczną obowiązywać dopiero po wyjściu z trybu programowania . Nie odnosi się to do bitu bezpiecznikowego EESAVE, którego funkcja rozpoczyna działania zaraz po zaprogramowaniu. Bity bezpiecznikowe są również zapamiętywane przy uruchamianiu w trybie normalnym.
Dla ATmega48A/PA/88A/PA/168A/PA/328/P bajty sygnaturowe są następujące:
Mikrokontroler | Adres bajtu sygnatury | ||
0x000 | 0x001 | 0x002 | |
ATmega48A | 0x1E | 0x92 | 0x05 |
ATmega48PA | 0x1E | 0x92 | 0x0A |
ATmega88A | 0x1E | 0x93 | 0x0A |
ATmega88PA | 0x1E | 0x93 | 0x0F |
ATmega168A | 0x1E | 0x94 | 0x06 |
ATmega168PA | 0x1E | 0x94 | 0x0B |
ATmega328 | 0x1E | 0x95 | 0x14 |
ATmega328P | 0x1E | 0x95 | 0x0F |
Liczba słów na stronę i liczba stron w pamięci FLASH
Mikrokontroler | Rozmiar FLASH | Rozmiar strony | PCWORD | Liczba stron | PCPAGE | PCMSB |
ATmega48A | 2K słów (4KB) | 32 słowa | PC[4:0] | 64 | PC[10:5] | 10 |
ATmega48PA | 2K słów (4KB) | 32 słowa | PC[4:0] | 64 | PC[10:5] | 10 |
ATmega88A | 4K słów (8KB) | 32 słowa | PC[4:0] | 128 | PC[11:5] | 11 |
ATmega88PA | 4K słów (8KB) | 32 słowa | PC[4:0] | 128 | PC[11:5] | 11 |
ATmega168A | 8K słów (16KB) | 64 słowa | PC[5:0] | 128 | PC[12:6] | 12 |
ATmega168PA | 8K słów (16KB) | 64 słowa | PC[5:0] | 128 | PC[12:6] | 12 |
ATmega328 | 16K słów (32KB) | 64 słowa | PC[5:0] | 256 | PC[13:6] | 13 |
ATmega328P | 16K słów (32KB) | 64 słowa | PC[5:0] | 256 | PC[13:6] | 13 |
Liczba słów na stronę i liczba stron w pamięci EEPROM
Mikrokontroler | Rozmiar EEPROM | Rozmiar strony | PCWORD | Liczba stron | PCPAGE | EEAMSB |
ATmega48A | 256B | 4B | EEA[1:0] | 64 | EEA[7:2] | 7 |
ATmega48PA | 256B | 4B | EEA[1:0] | 64 | EEA[7:2] | 7 |
ATmega88A | 512B | 4B | EEA[1:0] | 128 | EEA[8:2] | 8 |
ATmega88PA | 512B | 4B | EEA[1:0] | 128 | EEA[8:2] | 8 |
ATmega168A | 512B | 4B | EEA[1:0] | 128 | EEA[8:2] | 8 |
ATmega168PA | 512B | 4B | EEA[1:0] | 128 | EEA[8:2] | 8 |
ATmega328 | 1024B | 4B | EEA[1:0] | 256 | EEA[9:2] | 9 |
ATmega328P | 1024B | 4B | EEA[1:0] | 256 | EEA[9:2] | 9 |
W tym rozdziale niektóre końcówki mikrokontrolera ATmega48A/PA/88A/PA/168A/PA/328/P nazwane są wg nazw sygnałów opisujących ich funkcje podczas programowania równoległego. Do końcówek nieopisanych w poniższej tablicy odwołujemy się przez ich normalne nazwy.
Przydział nazw do końcówek
Nazwa sygnału w trybie programowania | Nazwa końcówki | we/wy | Funkcja |
RDY/BSY | PD1 | wy | 0: mikrokontroler jest zajęty programowaniem, 1: mikrokontroler jest gotowy na nowy rozkaz |
OE | PD2 | we | Uaktywnienie wyjścia (aktywne w stanie niskim) |
WR | PD3 | we | Impuls zapisu (aktywne w stanie niskim) |
BS1 | PD4 | we | Wybór bajtu 1 ("0" wybiera dolny bajt, "1" wybiera górny bajt) |
XA0 | PD5 | we | Bit 0 działania XTAL |
XA1 | PD6 | we | Bit 1 działania XTAL |
PAGEL | PD7 | we | Ładowanie strony pamięci programu i danych EEPROM |
BS2 | PC2 | we | Wybór bajtu 2 ("0" wybiera dolny drugi bajt, "1" wybiera górny drugi bajt) |
DATA | {PC[1:0]: PB[5:0]} | we/wy | Dwukierunkowa szyna danych (wyjście, gdy OE jest w stanie niskim) |
Wartości końcówek używane do wejścia w tryb programowania
Końcówka | Symbol | Wartość |
PAGEL | Prog_enable[3] | 0 |
XA1 | Prog_enable[2] | 0 |
XA0 | Prog_enable[1] | 0 |
BS1 | Prog_enable[0] | 0 |
Końcówki XA1/XA0 określają wykonywane działania, gdy na końcówce XTAL1 pojawi się dodatni impuls. Kodowanie bitów przedstawia poniższa tabelka.
Kodowanie XA1 i XA0
XA1 | XA0 | Działanie przy impulsie na końcówce XTAL1 |
0 | 0 | Załadowanie adresu FLASH lub EEPROM (górny lub dolny bajt adresu określa BS1) |
0 | 1 | Załadowanie danych (górny lub dolny bajt danych dla FLASH określa BS1) |
1 | 0 | Ładowanie rozkazu |
1 | 1 | Brak działania, bezczynność |
Gdy impuls pojawia się na końcówce WR lub OE, załadowany rozkaz określa wykonywane działanie. Rozkazy są pokazane w tabelce poniżej.
Kodowanie bitów w bajcie rozkazu
Bajt rozkazu | Wykonywany rozkaz |
1000 0000 | Kasowanie układu |
0100 0000 | Zapis bitów bezpiecznikowych |
0010 0000 | Zapis bitów blokujących |
0001 0000 | Zapis FLASH |
0001 0001 | Zapis EEPROM |
0000 1000 | Odczyt bajtów sygnaturowych i bajtu kalibracyjnego |
0000 0100 | Odczyt bitów bezpiecznikowych i bitów blokujących |
0000 0010 | Odczyt FLASH |
0000 0011 | Odczyt EEPROM |
Poniższy algorytm wprowadza mikrokontroler w tryb wysokonapięciowego programowania równoległego:
Upewnij się, iż napięcie na końcówce VCC osiąga co najmniej 1,8V w ciągu następnych 20 μs.
Jeśli wzrost napięcia zasilania na końcówce VCC nie jest w stanie spełnić powyższych wymagań, można użyć zastępczo następującego algorytmu:
Rozkaz Chip Erase skasuje zawartość pamięci FLASH i EEPROM (zawartość EEPROM zostaje zachowana podczas kasowania, jeśli został zaprogramowany bit bezpiecznikowy EESAVE) plus bity blokowania. Bity blokowania (ang. lock bits) nie są resetowane aż cała pamięć programu nie zostanie całkowicie skasowana. Bity bezpiecznikowe nie są zmieniane. Rozkaz Chip Erase musi być wykonany przed przeprogramowaniem pamięci FLASH i/lub EEPROM.
Uwaga: 1. Pamięć EEPRPOM jest zachowywana podczas kasowania układu, jeśli zaprogramowano bit bezpiecznikowy EESAVE.
Pamięć FLASH zorganizowana jest w strony. Przy programowaniu dane programu są zapamiętywane w buforze strony. Pozwala to na jednoczesne zaprogramowanie jednej strony z danymi programu. Poniższa procedura opisuje sposób zaprogramowania całej pamięci FLASH:
Podczas gdy dolne bity adresu odwzorowują słowa wewnątrz strony, to starsze bity adresują strony wewnątrz pamięci FLASH. Przedstawiono to na rysunku poniżej. Zauważ, że jeśli do adresowania słów w obrębie strony potrzebne jest mniej niż osiem bitów (rozmiar strony < 256), to najbardziej znaczący bit (lub bity) w dolnym bajcie adresu są używane do adresowania strony, gdy będzie wykonywany zapis strony.
Adresowanie
pamięci FLASH, która jest zorganizowana w strony
Przebiegi
sygnałów w wysokonapięciowym programowaniu szeregowym
Litery odpowiadają krokom w algorytmie
XX oznacza wartość nieistotną
ADDR. LOW | – | dolny bajt adresu |
DATA LOW | – | dolny bajt danych |
DATA HIGH | – | górny bajt danych |
ADDR. HIGH | – | górny bajt adresu |
Pamięć EEPROM zorganizowana jest w strony. Gdy pamięć ta jest programowana, dane są zapamiętywane w buforze strony. Pozwala to jednocześnie programować jedną stronę danych. Algorytm programowania pamięci danych EEPROM jest następujący:
Przebiegi sygnałów w
wysokonapięciowym programowaniu szeregowym
Litery odpowiadają krokom w algorytmie
XX oznacza wartość nieistotną
ADDR. HIGH | – | górny bajt adresu |
ADDR. LOW | – | dolny bajt adresu |
DATA | – | bajt danych |
Algorytm odczytywania pamięci FLASH jest następujący:
Algorytm odczytywania pamięci EEPROM jest następujący:
Algorytm programowania dolnych bitów bezpiecznikowych jest następujący:
Algorytm programowania górnych bitów bezpiecznikowych jest następujący:
Algorytm programowania rozszerzonych bitów bezpiecznikowych jest następujący:
Algorytm programowania bitów blokujących jest następujący:
Algorytm odczytywania bitów bezpiecznikowych i blokujących jest następujący:
Odwzorowanie pomiędzy BS1, BS2
a bitami bezpiecznikowymi i bitami blokującymi podczas odczytywania
Algorytm odczytywania bajtów sygnaturowych jest następujący:
Algorytm odczytywania bajtu kalibracyjnego jest następujący:
Czasy w programowaniu
równoległym, łącznie z niektórymi ogólnymi wymaganiami czasowymi
Czasy w programowaniu
równoległym, sekwencja ładowania z wymaganiami czasowymi(1)
Uwaga: | 1. | Wymagania czasowe z poprzedniego rysunku (tj. tDVXH, tXHXL i tXLDX) odnoszą się również do operacji ładowania. |
Czasy w programowaniu
równoległym, sekwencja odczytu (wewnątrz tej samej strony)
z wymaganiami czasowymi(1)
Parametry programowania równoległego, VCC = 5V ±10%
Symbol | Parametr | Min. | Typ. | Max. | Jednostki |
VPP | Napięcie włączania trybu programowania | 11,5 | 12,5 | V | |
IPP | Prąd włączania trybu programowania | 250 | µA | ||
tDVXH | Ustalenie danych i sterowania przed stanem wysokim XTAL1 | 67 | ns | ||
tXLXH | Czas pomiędzy stanem niskim XTAL1 a stanem wysokim XTAL1 | 200 | |||
tXHXL | Szerokość stanu wysokiego impulsu XTAL1 | 150 | |||
tXLDX | Utrzymanie danych i sterowania po przejściu XTAL1 w stan niski | 67 | |||
tXLWL | Czas od stanu niskiego XTAL1 do stanu niskiego WR | 0 | |||
tXLPH | Czas od stanu niskiego XTAL1 do stanu wysokiego PAGEL | 0 | |||
tPLXH | Czas od stanu niskiego PAGEL do stanu wysokiego XTAL1 | 150 | |||
tBVPH | Ustalenie BS1 przed stanem wysokim PAGEL | 67 | |||
tPHPL | Szerokość stanu wysokiego impulsu PAGEL | 150 | |||
tPLBX | Utrzymanie BS1 po stanie niskim PAGEL | 67 | |||
tWLBX | Utrzymanie BS2/1 po stanie niskim WR | 67 | |||
tPLWL | Czas od stanu niskiego PAGEL do stanu niskiego WR | 67 | |||
tBVWL | Utrzymanie BS1 po stanie niskim WR | 67 | |||
tWLWH | Szerokość stanu niskiego impulsu WR | 150 | |||
tWLRL | Czas od stanu niskiego WR do stau niskiego RDY/BSY | 0 | 1 | µs | |
tWLRH | Czas od stanu niskiego WR do stanu wysokiego RDY/BSY(1) | 3,7 | 4,5 | ms | |
tWLRH_CE | Czas od stanu niskiego WR do stanu wysokiego RDY/BSY dla kasowania układu(2) | 7,5 | 9 | ||
tXLOL | Czas od stanu niskiego XTAL1 do stanu niskiego OE | 0 | ns | ||
tBVDV | Utrzymanie BS1 do ważności danych DATA | 0 | 250 | ||
tOLDV | Czas od stanu niskiego OE do ważności danych DATA | 250 | |||
tOHDZ | Czas od stanu wysokiego OE do przejścia DATA w stan wysokiej impedancji | 250 |
Uwagi: | 1. | tWLRH dotyczy rozkazów zapisu FLASH, zapisu EEPROM, zapisu bitów bezpiecznikowych i zapisu bitów blokujących. |
2. | tWLRH_CE dotyczy rozkazu kasowania układu. |
Obie pamięci FLASH i EEPROM można programować przy wykorzystaniu magistrali szeregowej SPI, gdy końcówka RESET zostanie zwarta do masy GND. Interfejs szeregowy składa się z końcówek SCK, MOSI (wejście) i MISO (wyjście).
Gdy na końcówkę RESET poda się stan niski, należy najpierw wykonać instrukcję włączającą programowanie, zanim będzie można wykonywać operacje wymazywania/programowania.
Przydział końcówek dla programowania szeregowego
Symbol | Końcówka | We/wy | Opis |
MOSI | PB3 | We | Wejście danych szeregowych |
MISO | PB4 | Wy | Wyjście danych szeregowych |
SCK | PB5 | We | Zegar szeregowy |
Programowanie szeregowe i
weryfikacja(1)
Przy programowaniu pamięci EEPROM cykl samokasowania jest wbudowany w samotaktującą się operację programowania (tylko w trybie szeregowym) i nie ma potrzeby wykonywania najpierw instrukcji kasowania układu (ang. Chip Erase). Operacja kasowania układu zmienia zawartość każdej komórki w pamięci programu FLASH i w pamięci EEPROM w 0xFF.
Zależnie od bitów bezpiecznikowych CKSEL musi być obecny właściwy zegar. Minimalne okresy stanów niskich i wysokich dla zegara szeregowego (SCK) są zdefiniowane następująco:
Stan niski: > 2 taktów zegara mikroprocesora dla fck < 12MHz, 3
taktów zegara mikroprocesora dla fck >= 12MHz
Stan wysoki: > 2 taktów zegara mikroprocesora dla fck < 12MHz, 3
taktów zegara mikroprocesora dla fck >= 12MHz
Gdy dane szeregowe są zapisywane w mikrokontrolerze ATmega48A/PA/88A/PA/168A/PA/328/P, ich taktowanie następuje przy narastającym zboczu sygnału SCK. Gdy dane są odczytywane z ATmega48A/PA/88A/PA/168A/PA/328/P, taktowanie odbywa się przy opadającym zboczu SCK.
Do programowania i weryfikacji mikrokontrolera ATmega48A/PA/88A/PA/168A/PA/328/P zalecana jest następująca
sekwencja operacji:
Gdy strona pamięci jest programowana wewnątrz FLASH, odczyt komórki w obrębie tej strony da wartość 0xFF. Gdy mikrokontroler będzie gotowy na nową stronę, programowana wartość zostanie odczytana prawidłowo. Używa się tego do określenia, kiedy można zapisać następną stronę. Zwróć uwagę, iż cała strona jest zapisywana równocześnie i można użyć dowolnej jej komórki do podglądu. Podgląd nie zadziała z wartością 0xFF, zatem przy programowaniu tej wartości użytkownik będzie musiał odczekać przez czas co najmniej tWD_FLASH przed programowaniem następnej strony. Ponieważ skasowany układ zawiera wartości 0xFF we wszystkich komórkach, programowanie ich można pominąć.
Gdy nowy bajt został zapisany i jest programowany w EEPROM, odczyt komórki zawierającej go da wartość 0xFF. Gdy pamięć będzie gotowa na nowy bajt, programowana komórka da prawidłowy odczyt. Używa się tego do określenia, kiedy można zapisać następny bajt. Nie zadziała to z wartością 0xFF, lecz użytkownik powinien pamiętać, że skasowane urządzenie zawiera wartości 0xFF w każdej komórce, zatem ich programowanie można pominąć. Nie ma to zastosowania, gdy pamięć EEPROM podlega przeprogramowaniu bez kasowania układu mikrokontrolera. W takim przypadku wartość 0xFF nie może być użyta do podglądu i użytkownik będzie musiał odczekać przez czas co najmniej tWD_EEPROM, przed zaprogramowaniem następnego bajtu.
Minimalne czasy opóźnień przed zapisem następnych komórek we FLASH lub w EEPROM
Symbol | Minimalny czas opóźnienia |
tWD_FUSE | 4,5ms |
tWD_FLASH | 4,5ms |
tWD_EEPROM | 3,6ms |
tWD_ERASE | 9,0ms |
Instrukcje programowania szeregowego (wartości szesnastkowe)
Instrukcja | Format instrukcji | |||
Bajt 1 | Bajt 2 | Bajt 3 | Bajt 4 | |
Programming Enable Uaktywnienie programowania |
0xAC | 0x53 | 0x00 | 0x00 |
Chip Erase
(Program Memory/EEPROM) Kasowanie (pamięci programu/EEPROM) |
0xAC | 0x80 | 0x00 | 0x00 |
Poll RDY/BSY Podgląd RDY/BSY |
0xF0 | 0x00 | 0x00 | wyjściowy bajt danych |
Instrukcje ładowania | ||||
Load Extended Address
byte(1) Ładowanie bajtu rozszerzonego adresu |
0x4D | 0x00 | Rozszerzony adres | 0x00 |
Load Program Memory Page,
High byte Ładowanie strony pamięci programu, górny bajt |
0x48 | 0x00 | młodszy bajt adresu | wejściowy górny bajt danych |
Load Program Memory Page,
Low byte Ładowanie strony pamięci programu, dolny bajt |
0x40 | 0x00 | młodszy bajt adresu | wejściowy dolny bajt danych |
Load EEPROM Memory Page
(page access) Ładowanie strony EEPROM (dostęp do stronamy) |
0xC1 | 0x00 | 0000 000aa | wejściowy bajt danych |
Instrukcje odczytu | ||||
Read Program Memory, High
byte Odczyt pamięci programu, górny bajt |
0x28 | starszy bajt adresu | młodszy bajt adresu | wyjściowy górny bajt danych |
Read Program Memory, Low
byte Odczyt pamięci programu, dolny bajt |
0x20 | starszy bajt adresu | młodszy bajt adresu | wyjściowy dolny bajt danych |
Read EEPROM Memory Odczyt pamięci EEPROM |
0xA0 | 0000 00aa | aaaa aaaa | wyjściowy bajt danych |
Read Lock bits Odczyt bitów blokujących |
0x58 | 0x00 | 0x00 | wyjściowy bajt danych |
Read Signature Byte Odczyt bajtu sygnaturowego |
0x30 | 0x00 | 0000 000aa | wyjściowy bajt danych |
Read Fuse Low bits Odczyt dolnych bitów bezpiecznikowych |
0x50 | 0x00 | 0x00 | wyjściowy bajt danych |
Read Fuse High bits Odczyt górnych bitów bezpiecznikowych |
0x58 | 0x08 | 0x00 | wyjściowy bajt danych |
Read Fuse Extended bits Odczyt rozszerzonych bitów bezpiecznikowych |
0x50 | 0x08 | 0x00 | wyjściowy bajt danych |
Read Calibration Byte Odczyt bajtu kalibracyjnego |
0x38 | 0x00 | 0x00 | wyjściowy bajt danych |
Instrukcje zapisu(6) | ||||
Write Program Memory Page Zapis strony pamięci programu |
0x4C | starszy bajt adresu(8) | młodszy bajt adresu(8) | 0x00 |
Write EEPROM Memory Zapis pamięci EEPROM |
0xC0 | 0000 00aa | aaaa aaaa | wejściowy bajt danych |
Write EEPROM Memory Page
(page access) Zapis strony pamięci EEPROM (dostęp do strony) |
0xC2 | 0000 00aa | aaaa aa00 | 0x00 |
Write Lock bits Zapis bitów blokujących |
0xAC | 0xE0 | 0x00 | wejściowy bajt danych |
Write Fuse Low bits Zapisz dolnych bitów bezpiecznikowych |
0xAC | 0xA0 | 0x00 | wejściowy bajt danych |
Write Fuse High bits Zapisz górnych bitów bezpiecznikowych |
0xAC | 0xA8 | 0x00 | wejściowy bajt danych |
Write Fuse Extended bits Zapisz rozszerzonych bitów bezpiecznikowych |
0xAC | 0xA4 | 0x00 | wejściowy bajt danych |
Uwagi: | 1. | Nie wszystkie instrukcje można stosować z każdym mikrokontrolerem. |
2. | a = adres. | |
3. | Zaprogramowane bity mają stan ‘0’, niezaprogramowane mają stan ‘1’. | |
4. | Aby zapewnić kompatybilność z przyszłymi modelami mikrokontrolerów, nieużywane bity bezpiecznikowe i blokujące powinny pozostać niezaprogramowane (‘1’) . | |
5. | Zobacz do podrozdziałów dotyczących bitów bezpiecznikowych, blokujących, bajtów kalibracyjnego i sygnaturowych oraz rozmiaru strony. | |
6. | Instrukcje dostępu do pamięci programu używają adresów słów. Ten adres może być dowolny w obrębie zakresu strony. | |
7. | Zobacz na stronę http://www.microchip.com, gdzie znajdziesz informacje o programowaniu i programatorach. | |
8. | Słowa |
Jeśli najmłodszy bit LSB w bajcie danych RDY/BSY ma stan ‘1’, to operacja programowania jest ciągle wykonywana. Odczekaj, aż bit ten zwróci ‘0’, zanim wykonasz następną instrukcję.
Wewnątrz tej samej strony dolny bajt musi być załadowany przed bajtem górnym.
Po załadowaniu danych do bufora strony, zaprogramuj stronę EEPROM, zobacz na poniższy rysunek.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.