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 |
©2025 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Bit blokujący | Numer bitu | Opis | Wartość standardowa(1) |
7 | – | 1 (niezaprogramowany) | |
6 | – | 1 (niezaprogramowany) | |
5 | – | 1 (niezaprogramowany) | |
4 | – | 1 (niezaprogramowany) | |
3 | – | 1 (niezaprogramowany) | |
2 | – | 1 (niezaprogramowany) | |
LB2 | 1 | Bit blokujący | 1 (niezaprogramowany) |
LB1 | 0 | Bit blokujący | 1 (niezaprogramowany) |
Uwaga: 1. "1" oznacza stan niezaprogramowany, "0" oznacza stan zaprogramowany.
Tryby zabezpieczeń bitów blokujących
Bity blokowania pamięci(1)(2) | Rodzaj zabezpieczenia | ||
Tryb LB | LB2 | LB1 | |
1 | 1 | 1 | Brak funkcji pamięci blokowania. |
2 | 1 | 0 | Dalsze programowanie
pamięci FLASH i EEPROM jest zablokowane w trybach
programowania wysokonapięciowego oraz szeregowego. Bity bezpiecznikowe zostają zablokowane w trybach programowania wysokonapięciowego i szeregowego. Interfejs debugWire jest zablokowany. |
3 | 0 | 0 | Dalsze programowanie i weryfikacja pamięci FLASH i EEPROM są zablokowane w trybach programowania wysokonapięciowego oraz szeregowego. Bity bezpiecznikowe zostają zablokowane w trybach programowania wysokonapięciowego i szeregowego. Interfejs debugWire jest zablokowany. |
Uwagi: | 1. | Zaprogramuj bity bezpiecznikowe przed bitami blokującymi. |
2. | "1" oznacza stan niezaprogramowany, "0" oznacza stan zaprogramowany. |
Górny bajt bitów bezpiecznikowych
Bit bezpiecznikowy | Numer bitu | Opis | Wartość standardowa |
– | 7 | – | 1 (niezaprogramowane) |
– | 6 | – | 1 (niezaprogramowane) |
– | 5 | – | 1 (niezaprogramowane) |
SELFPRGEN(1) | 4 | Uaktywnienie samoprogramowania | 1 (niezaprogramowane) |
DWEN(2) | 3 | Uaktywnienie interfejsu debugWIRE | 1 (niezaprogramowane) |
BODLEVEL1(3) | 2 | Poziom wyzwalania detektora spadku napięcia | 1 (niezaprogramowane) |
BODLEVEL0(3) | 1 | 1 (niezaprogramowane) | |
RSTDISBL(4) | 0 | Zablokowanie zewnętrznego resetu | 1 (niezaprogramowane) |
Uwagi: | 1. | Uaktywnia instrukcję SPM. Zobacz do rozdziału "Samoprogramowanie FLASH" |
2. | DWEN musi zostać odprogramowany, gdy jest potrzebne zabezpieczenie bitami blokującymi. Zobacz do podrozdziału "Bity blokujące pamięci programu i danych". | |
3. | Zobacz do podrozdziału "Parametry systemu i resetu". | |
4. | Zobacz do podrozdziału "Funkcje alternatywne portu B". |
Dolny bajt bitów bezpiecznikowych
Bit bezpiecznikowy | Numer bitu | Opis | Wartość standardowa |
SPIEN(1) | 7 | Włączenie interfejsu programowania szeregowego i ładowania danych | 0 (zaprogramowane) |
EESAVE | 6 | Zachowanie zawartości EEPROM podczas kasowania zawartości układu | 1 (niezaprogramowane) |
WDTON(2) | 5 | Licznik zegarowy zawsze włączony | 1 (niezaprogramowane) |
CKDIV8(3) | 4 | Podział częstotliwości zegara systemowego przez 8 | 0 (zaprogramowane) |
SUT1(4) | 3 | Wybór czasu uruchamiania | 1 (niezaprogramowane) |
SUT0(4) | 2 | 0 (zaprogramowane) | |
CKSEL1(5) | 1 | Wybór źródła zegarowego | 1 (niezaprogramowane) |
CKSEL0(5) | 0 | 0 (zaprogramowane) |
Uwagi: | 1. | Bit bezpiecznikowy SPIEN jest niedostępny w trybie programowania SPI. |
2. | Zaprogramowanie tych bitów wyłącza przerwanie z licznika zegarowego. Zobacz do podrozdziału "Timer licznika zegarowego". | |
3. | Szczegóły w podrozdziale "Preskaler zegara systemowego". | |
4. | Standardowa wartość bitów SUT1..0 daje maksymalny czas uruchamiania dla standardowego źródła zegara. | |
5. | Standardowe ustawienie bitów CKSEL1..0 daje częstotliwość wewnętrznego oscylatora RC równą 9.6 MHz. |
Zauważ, iż bity bezpiecznikowe zostają zablokowane, jeśli bit blokujący LB1 jest zaprogramowany. Programuj bity bezpiecznikowe przed bitami blokującymi. Stan bitów bezpiecznikowych nie jest zmieniany przez kasowanie zawartości układu (ang. Chip Erase).
Bity bezpiecznikowe można odczytać również z poziomu oprogramowania. Zobacz do podrozdziału "Programowy odczyt bitów bezpiecznikowych i blokujących".
Wartości bitów bezpiecznikowych są zatrzaskiwane, gdy mikrokontroler wchodzi w tryb programowania, a zmiany ich stanów nie będą obowiązywały aż do wyjścia z trybu programowania. Nie odnosi się to do bitu bezpiecznikowego EESAVE, który funkcjonuje natychmiast po zaprogramowaniu. Bity bezpiecznikowe są również zatrzaskiwane przy uruchamianiu w trybie normalnym.
Istnieje oddzielny bajt kalibracyjny dla wewnętrznego oscylatora pracującego w trybie 4,8 MHz, lecz dane te nie są wpisywane automatycznie. Podczas resetu sprzętowo zawsze ładowane są dane kalibracyjne dla 9,6 MHz. Aby wykorzystać oddzielne dane kalibracyjne dla oscylatora pracującego w trybie 4,8 MHz, rejestr OSCCAL musi zostać uaktualniony programowo. Dane kalibracyjne dla pracy z częstotliwością 4,8 MHz są umieszczone w górnym bajcie słowa pod adresem 0x01 obszaru sygnaturowego.
Dla ATtiny13 bajty sygnaturowe są następujące:
Liczba słów na stronę oraz liczba stron pamięci FLASH
Rozmiar FLASH | Rozmiar strony | PCWORD | Liczba stron | PCPAGE | PCMSB |
512 słów (1 KB) | 16 słów | PC[3:0] | 32 | PC[8:4] | 8 |
PC | – | bity adresu słowa w pamięci programu |
PCWORD | – | bity adresu słowa na stronie FLASH |
PCPAGE | – | bity adresu strony FLASH |
PCMSB | – | numer najstarszego bitu w adresie |
Liczba słów na stronę oraz liczba stron pamięci EEPROM
Rozmiar EEPROM | Rozmiar strony | EEAWORD | Liczba stron | EEAPAGE | EEAMSB |
64 B | 4 B | EEA[1:0] | 16 | EEA[5:2] | 5 |
EEA | – | bity adresu bajtu w pamięci EEPROM |
EEAWORD | – | bity adresu bajtu na stronie EEPROM |
EEAPAGE | – | bity adresu strony EEPROM |
EEAMSB | – | numer najstarszego bitu w adresie |
Interfejs szeregowy składa się z końcówek SCK, MOSI (wejście) i MISO (wyjście).
Po ustawieniu RESET w stan niski, należy wykonać instrukcję włączającą programowanie zanim operacje programowania/wymazywania będą mogły być wykonywane.
Odwzorowanie końcówek przy programowaniu szeregowym
Symbol | Końcówki | we/wy | Opis |
MOSI | PB0 | we | Wejście danych szeregowych |
MISO | PB1 | wy | Wyjście danych szeregowych |
SCK | PB2 | we | Wejście zegara szeregowego |
Przy programowaniu EEPROM w operacji programowania wbudowany jest cykl samokasowania (TYLKO w trybie szeregowym) i nie ma potrzeby wcześniejszego wykonywania instrukcji kasowania układu (ang. Chip Erase instruction). Operacja kasowania układu zamienia zawartość każdej komórki w obu pamięciach programu i EEPROM w 0xFF.
W zależności od bitów bezpiecznikowych CKSEL musi być obecny poprawny sygnał zegarowy. Minimalne okresy stanu niskiego i wysokiego dla wejścia zegara szeregowego (SCK) są zdefiniowane następująco:
Gdy dane szeregowe są zapisywane do ATtiny13, ich odczyt przez mikroprocesor następuje na narastającym zboczu sygnału zegarowego SCK. Gdy dane są odczytywane z ATtiny13, ich próbkowanie następuje przy opadającym zboczu sygnału SCK. Szczegóły znajdziesz w podrozdziale "Parametry programowania szeregowego".
Aby zaprogramować i zweryfikować mikrokontroler ATtiny13 w trybie programowania szeregowego, zaleca się następujący ciąg operacji:
Minimalne czasy opóźnienia przed zapisem następnej komórki FLASH lub EEPROM
Symbol | Opis | Minimalny czas opóźnienia |
tWD_FLASH | Opóźnienie dla zapisu FLASH | 4,5 ms |
tWD_EEPROM | Opóźnienie dla zapisu EEPROM | 4,0 ms |
tWD_ERASE | Opóźnienie dla kasowania | 9,0 ms |
tWD_FUSE | Opóźnienie dla zapisu bitu bezpiecznikowego | 4,5 ms |
Instrukcja | Format instrukcji | Operacja | |||
Bajt 1 | Bajt 2 | Bajt 3 | Bajt 4 | ||
Programming
Enable Uaktywnienie programowania |
1010 1100 |
0101 0011 |
xxxx xxxx |
xxxx xxxx |
Uaktywnia programowanie
szeregowe po wysterowaniu końcówki RESET stanem niskim. |
Chip Erase Kasowanie zawartości układu |
1010 1100 |
100x xxxx |
xxxx xxxx |
xxxx xxxx |
Kasowanie zawartości EEPROM i FLASH. |
Read Program
Memory Odczyt pamięci programu |
0010 H000 |
0000 000a |
bbbb bbbb |
oooo oooo |
Odczyt danych H
(górny lub dolny bajt) z
pamięci programu spod adresu słowa a:b. |
Load Program
Memory Page Ładowanie do strony pamięci programu |
0100 H000 |
000x xxxx |
xxxx bbbb |
iiii iiii |
Zapis danych H
(górny lub dolny bajt) do strony pamięci programu pod adresem słowa b. Dolny bajt danej musi być zapisany przed górnym bajtem pod tym samym adresem. |
Write Program
Memory Page Zapis strony pamięci programu |
0100 1100 |
0000 000a |
bbbb xxxx |
xxxx xxxx |
Zapis strony pamięci programu pod adresem a:b |
Read EEPROM
Memory Odczyt pamięci EEPROM |
1010 0000 |
000x xxxx |
xxbb bbbb |
oooo oooo |
Odczyt danych o z EEPROM pod adresem b. |
Write EEPROM
Memory Zapis pamięci EEPROM |
1100 0000 |
000x xxxx |
xxbb bbbb |
iiii iiii |
Zapis danych i do EEPROM pod adres b. |
Load EEPROM
Memory Page Ładowanie do strony pamięci EEPROM |
1100 0001 |
0000 0000 |
0000 00bb |
iiii iiii |
Zapis danych i do
bufora strony pamięci EEPROM. Po załadowaniu danych zaprogramuj stronę EEPROM. |
Write EEPROM
Memory Page Zapis strony pamięci EEPROM |
1100 0010 |
00xx xxxx |
xxbb bb00 |
xxxx xxxx |
Zapis strony EEPROM pod adresem b. |
Read Lock
Bits Odczyt bitów blokujących |
0101 1000 |
0000 0000 |
xxxx xxxx |
xxoo oooo |
Odczyt bitów
blokujących. "0" = zaprogramowane, "1" = niezaprogramowane. Szczegóły w tabelce. |
Write Lock
Bits Zapis bitów blokujących |
1010 1100 |
111x xxxx |
xxxx xxxx |
11ii iiii |
Zapis bitów
blokujących. "0" = zaprogramowane, "1" = niezaprogramowane. Szczegóły w tabelce. |
Read Fuse
Byte Odczyt bajtu bezpieczników |
0101 H000 |
0000 H000 |
xxxx xxxx |
oooo oooo |
Odczyt górnego/dolnego
bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane. Zobacz do podrozdziału "Bity bezpiecznikowe". |
Write Fuse
Byte Zapis bajtu bezpieczników |
1010 1100 |
1010 H000 |
xxxx xxxx |
iiii iiii |
Zapis górnego/dolnego
bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane. Zobacz do podrozdziału "Bity bezpiecznikowe". |
Read
Signature Byte Odczyt bajtu sygnatury |
0011 0000 |
000x xxxx |
xxxx xxbb |
oooo oooo |
Odczyt bajtu sygnatury spod adresu b. |
Read
Calibration Byte Odczyt bajtu kalibracyjnego |
0011 1000 |
000x xxxx |
0000 000b |
oooo oooo |
Zobacz do podrozdziału "bajty kalibracyjne". |
Poll RDY/BSY Podgląd RDY/BSY |
1111 0000 |
0000 0000 |
xxxx xxxx |
xxxx xxxo |
Jeśli o = "1", to wciąż
trwa operacja programowania. Poczekaj, aż ten bit powróci na "0", zanim wyślesz kolejny rozkaz. |
Uwaga: | a = górne bity adresu, b = dolne bity adresu, H = 0 - dolny bajt, 1 - górny bajt, o = dane wyjściowe, i = dane wejściowe, x = wartości ignorowane |
Znaczenie nazw końcówek w programowaniu wysokonapięciowym
Nazwa sygnału | Końcówka | We/Wy | Funkcja |
SDI | PB0 | We | Szeregowe wejście danych (ang. Serial Data Input) |
SII | PB1 | We | Szeregowe wejście instrukcji (ang. Serial Instruction Input) |
SDO | PB2 | Wy | Szeregowe wyjście danych (ang. Serial Data Output) |
SCI | PB3 | We | Szeregowe wejście zegara (ang. Serial Clock Input) |
Minimalny okres szeregowego wejścia zegarowego (SCI) podczas wysokonapięciowego programowania szeregowego wynosi 220 ns.
Wartości końcówek przy wejściu w tryb programowania
Końcówka | Symbol | Wartość |
SDI | Prog_enable[0] | 0 |
SII | Prog_enable[1] | 0 |
SDO | Prog_enable[2] | 0 |
Aby zaprogramować i zweryfikować ATtiny13 w trybie wysokonapięciowego programowania szeregowego zalecany jest poniższy ciąg operacji:
Następujący algorytm wprowadza mikrokontroler w tryb wysokonapięciowego programowania szeregowego:
Jeśli czas narastania napięcia zasilającego VCC nie jest w stanie spełnić powyższych wymagań, można użyć alternatywnego algorytmu:
Napięcie zasilania | Próg napięcia programowania na końcówce RESET |
Minimalny czas
zatrzaskiwania stanu końcówek Prog_enable |
VCC | VHVRST | tHVRST |
4,5V | 12V | 100ns |
5,5V | 12V | 100ns |
Instrukcja | Format Instrukcji | Uwagi na temat operacji | ||||
Instr.1/5 | Instr.2/6 | Instr.3 | Instr.4 | |||
Chip Erase Kasowanie układu |
SDI SII SDO |
0_1000_0000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_0100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Po instr.3 czekaj, aż
SDO przejdzie w stan wysoki, aby cykl kasowania się zakończył. |
|
Load “Write
FLASH” Command Załadowanie instrukcji "zapisu pamięci FLASH" |
SDI SII SDO |
0_0001_0000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
Wprowadzenie kodu
programowania pamięci FLASH. |
|||
Load FLASH Page Buffer Załadowanie bufora strony FLASH |
SDI SII SDO |
0_ bbbb_bbbb
_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_eeee_eeee_00 0_0010_1100_00 x_xxxx_xxxx_xx |
0_dddd_dddd_00 0_0011_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1101_00 x_xxxx_xxxx_xx |
Po instrukcjach 1-5
powtarzaj, aż cały bufor strony zostanie wypełniony lub do wypełnienia wszystkich danych na stronie. |
SDI SII SDO |
0_0000_0000_00 0_0111_1100_00 x_xxxx_xxxx_xx |
Instr.5. | ||||
Load FLASH
High Address and Program Page Załadowanie górnego bitu adresu FLASH i zaprogramowanie strony |
SDI SII SDO |
0_0000_000a_00 0_0001_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_0100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Po instr.3 zaczekaj, aż
SDO przejdzie w stan wysoki. Powtarzaj Instr.2-3 dla każdej załadowanej strony FLASH, aż wszystkie dane zostaną zaprogramowane. Powtórz Instr.1 dla nowej 256-bajtowej strony. |
|
Load “Read
FLASH” Command Załadowanie instrukcji "odczytu FLASH" |
SDI SII SDO |
0_0000_0010_00 0_0100_1100_00 x_xxxx_xxxx_xx |
Wejście w tryb odczytu FLASH. | |||
Read FLASH Low and High
Bytes Odczyt dolnego i górnego bajtu z FLASH |
SDI SII SDO |
0_bbbb_bbbb_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_0000_000a_00 0_0001_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 q_qqqq_qqqx_xx |
Powtarzaj instrukcje 1,
3-6 dla każdego nowego adresu. Powtórz instr.2 dla nowej 256-bajtowej strony. |
SDI SII SDO |
0_0000_0000_00 0_0111_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1100_00 p_pppp_pppx_xx |
Instr 5 - 6. | |||
Load “Write
EEPROM” Command Załadowanie instrukcji "zapisu do EEPROM" |
SDI SII SDO |
0_0001_0001_00 0_0100_1100_00 x_xxxx_xxxx_xx |
Wejście w tryb programowania EEPROM. | |||
Load
EEPROM Page Buffer Załadowanie bufora strony EEPROM |
SDI SII SDO |
0_00bb_bbbb_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_eeee_eeee_00 0_0010_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1101_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Powtarzaj Instr.1-4, aż
cały bufor będzie wypełniony lub gdy zostaną wypełnione wszystkie dane na stronie. |
Program EEPROM Page Zaprogramowanie strony EEPROM |
SDI SII SDO |
0_0000_0000_00 0_0110_0100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Po Instr.2 czekaj aż
SDO przejdzie w stan wysoki. Powtarzaj Instr.1-2 dla każdej załadowanej strony, aż zostanie zaprogramowana cała pamięć EEPROM lub wszystkie dane. |
||
Write EEPROM Byte Zapis bajtu EEPROM |
SDI SII SDO |
0_00bb_bbbb_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_eeee_eeee_00 0_0010_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1101_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_0100_00 x_xxxx_xxxx_xx |
Powtarzaj Instr.1-5 dla
każdego nowego adresu. Po Instr.5 zaczekaj, aż SDO przejdzie w stan wysoki. |
SDI SII SDO |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Instr. 5. | ||||
Load “Read
EEPROM” Command Załadowanie instrukcji "odczytu EEPROM" |
SDI SII SDO |
0_0000_0011_00 0_0100_1100_00 x_xxxx_xxxx_xx |
Wejście w tryb odczytu EEPROM. | |||
Read EEPROM Byte Odczyt bajtu z EEPROM |
SDI SII SDO |
0_bbbb_bbbb_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_aaaa_aaaa_00 0_0001_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 q_qqqq_qqq0_00 |
Powtarzaj Instr.1,3-4
dla każdego nowego adresu. Powtórz Instr.2 dla nowej 256-bajtowej strony. |
Write Fuse
Low Bits Zapis dolnych bitów bezpiecznikowych |
SDI SII SDO |
0_0100_0000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_A987_6543_00 0_0010_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_0100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Po Instr.4 czekaj, aż
SDO przejdzie w stan wysoki. Zapisz A-3 stanami "0", aby zaprogramować bity bezpiecznikowe. |
Write Fuse
High Bits Zapis górnych bitów bezpiecznikowych |
SDI SII SDO |
0_0100_0000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_000F_EDCB_00 0_0010_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_0100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1100_00 x_xxxx_xxxx_xx |
Po Instr.4 czekaj, aż
SDO przejdzie w stan wysoki. Zapisz F-B stanami "0", aby zaprogramować bity bezpiecznikowe. |
Write Lock
Bits Zapis bitów blokujących |
SDI SII SDO |
0_0010_0000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_0021_00 0_0010_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_0100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 x_xxxx_xxxx_xx |
Po Instr.4 czekaj, aż
SDO przejdzie w stan wysoki. Zapisz 2-1 stanami "0", aby zaprogramować dany bit blokujący. |
Read Fuse Low
Bits Odczyt dolnych bitów bezpiecznikowych |
SDI SII SDO |
0_0000_0100_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 A_9876_543x_xx |
Odczyt A-3="0" oznacza
bit bezpiecznikowy zaprogramowany. |
|
Read Fuse
High Bits Odczyt górnych bitów bezpiecznikowych |
SDI SII SDO |
0_0000_0100_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1010_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1110_00 x_xxFE_DCBx_xx |
Odczyt F-B="0" oznacza
bit bezpiecznikowy zaprogramowany. |
|
Read Lock
Bits Odczyt bitów blokujących |
SDI SII SDO |
0_0000_0100_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1100_00 x_xxxx_x21x_xx |
Odczyt 2-1="0" oznacza
bit blokujący zaprogramowany. |
|
Read
Signature Bytes Odczyt bajtów sygnaturowych |
SDI SII SDO |
0_0000_1000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_00bb_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0110_1100_00 q_qqqq_qqqx_xx |
Powtórz Instr.2-4 dla
każdego adresu bajtu sygnatury. |
Read
Calibration Byte Odczyt bajtu kalibracyjnego |
SDI SII SDO |
0_0000_1000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
0_0000_000b_00 0_0000_1100_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1000_00 x_xxxx_xxxx_xx |
0_0000_0000_00 0_0111_1100_00 p_pppp_pppx_xx |
|
Load “No
Operation” Command Załadowanie instrukcji pustej |
SDI SII SDO |
0_0000_0000_00 0_0100_1100_00 x_xxxx_xxxx_xx |
Uwaga: | a = górne
bity adresu b = dolne bity adresu d = dane wejściowe dla górnych bitów e = dane wejściowe dla dolnych bitów p = data wyjściowe z górnych bitów q = dane wyjściowe z dolnych bitów x = ignorowane 1 = bit blokujący 1 2 = bit blokujący 2 3 = bit bezpiecznikowy CKSEL0 4 = bit bezpiecznikowy CKSEL1 5 = bit bezpiecznikowy SUT0 6 = bit bezpiecznikowy SUT1 7 = bit bezpiecznikowy CKDIV8 8 = bit bezpiecznikowy WDTON 9 = bit bezpiecznikowy EESAVE A = bit bezpiecznikowy SPIEN B = bit bezpiecznikowy RSTDISBL C = bit bezpiecznikowy BODLEVEL0 D = bit bezpiecznikowy BODLEVEL1 E = bit bezpiecznikowy MONEN F = bit bezpiecznikowy SELFPRGEN |
|
Uwaga: | Pamięć EEPROM zapisywana jest stronami. Lecz tylko bajty załadowane do strony są faktycznie zapisywane do EEPROM. Dostęp na poziomie strony EEPROM jest bardziej efektywny, jeśli wiele bajtów ma być zapisane do tej samej strony. W trybie wysokonapięciowego programowania szeregowego nie jest dostępna funkcja automatycznego wymazywania zapisywanej komórki EEPROM, tylko w trybie programowania SPI. | |
Uwaga: | Zawartość EEPROM zostaje zachowana podczas kasowania mikrokontrolera, jeśli został zaprogramowany bit bezpiecznikowy EESAVE. |
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.
Pamięć FLASH zorganizowana jest w strony. Gdy pamięć FLASH jest programowana, dane programu są zapamiętywane w buforze strony. Pozwala to zaprogramować jednocześnie całą stronę danych programu. Poniższa procedura opisuje programowanie całej pamięci FLASH:
Gdy zapisuje się lub odczytuje dane szeregowe z ATtiny13, dane są taktowane przy narastającym zboczu zegara szeregowego.
Adresowanie
pamięci FLASH, która jest zorganizowana w strony
Przebiegi
sygnałów w wysokonapięciowym programowaniu szeregowym
Pamięć EEPROM zorganizowana jest w strony. Gdy pamięć EEPROM jest programowana, dane są zapamiętywane w buforze strony. Pozwala to zaprogramować jednocześnie całą stronę danych. Algorytm programowania pamięci EEPROM jest następujący:
Algorytm odczytu pamięci FLASH jest następujacy:
Algorytm odczytu pamięci EEPROM jest następujący:
Algorytmy programowania i odczytu bitów bezpiecznikowych i blokujących opisane są w tabeli instrukcji dla wysokonapięciowego programowania szeregowego.
Algorytmy są opisane w tabeli instrukcji dla wysokonapięciowego programowania szeregowego.
Ustaw SCI na "0". Ustaw RESET na "1". Wyłącz napięcie zasilania VCC.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2025 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.