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

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny2313A/4313

Programowanie zewnętrzne

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

Ten rozdział opisuje jak programować i weryfikować pamięć FLASH, EEPROM, bity blokowania i bity blokujące w mikrokontrolerze ATtiny2313A/4313.

Parametry pamięci

Poniższa tabelka podsumowuje parametry pamięci FLASH:

Mikrokontroler Rozmiar FLASH Rozmiar strony PCWORD Strony PCPAGE PCMSB
ATtiny2313A 1K słów
(2KB)
16 słów PC[3:0] 64 PC[9:4] 9
ATtiny4313 2K słów
(4KB)
32 słowa PC[4:0] 64 PC[10:5] 10
Zmienna Opis
PCPAGE Adres strony licznika rozkazów. Wybiera stronę słów i jest używane przez operacje kasowani i zapisu strony.
PCMSB Najbardziej znaczący bit licznika rozkazów.
PCWORD Adres słowa licznika rozkazów. Wybiera słowo wewnątrz strony. Wykorzystywane jest do wypełniania bufora tymczasowego i musi być równe zero podczas operacji zapisu strony.

Poniższa tabelka podsumowuje parametry pamięci EEPROM:

Mikrokontroler Rozmiar EEPROM Rozmiar strony PCWORD Strony PCPAGE PCMSB
ATtiny2313A 128 B 4 B EEA[1:0] 32 EEA[6:2] 6
ATtiny4313 256 B 4 B EEA[1:0] 64 EEA[7:2] 7
Na początek:  podrozdziału   strony 

Programowanie równoległe

Na poniższym rysunku przedstawiono sygnały programowania równoległego oraz połączenia:

Tabelka poniżej opisuje nazwy końcówek i sygnałów używanych w trybie programowania:

Nazwa sygnału Końcówka 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 (aktywny w stanie niskim)
BS1/PAGEL PD4 we Wybór bajtu 1 ("0" wybiera bajt dolny, "1" wybiera bajt górny)
Ładowanie strony pamięci programu i danych EEPROM
XA0 PD5 we Bit  0 działania XTAL
XA1/BS2 PD6 we Bit  1 działania XTAL
Wybór bajtu 2 ("0" wybiera bajt dolny, "1" wybiera bajt górny)
DATA PB7...0 we/wy Dwukierunkowa szyna danych (wyjście, gdy OE ma stan niski)

Zakłada się, że impulsy mają długość 250 ns, chyba że podano inaczej.

Poniższa tabelka przedstawia wartości końcówek używane przy wejściu w tryb programowania:

Końcówka Symbol Wartość
XA1 Prog_enable[3] 0
XA0 Prog_enable[2] 0
BS1 Prog_enable[1] 0
WR Prog_enable[0] 0

Końcówki XA1 i XA0 określają rodzaj działania, gdy na CLKI pojawi się dodatni impuls, co pokazuje poniższa tabelka:

XA1 XA0 Działanie przy impulsie na końcówce CLKI
0 0 Ładowanie adresu FLASH lub EEPROM (górny lub dolny bajt, określony przez BS1).
0 1 Ładowanie danych (górny lub dolny bajt dla FLASH, określony przez BS1).
1 0 Rozkaz ładowania.
1 1 Brak działania, bezczynność

Gdy pojawi się impuls na końcówce WR lub OE, załadowany rozkaz określa wykonywane działanie. Różne opcje rozkazów pokazuje poniższa tabelka:

Bajt rozkazu Rozkaz
1000 0000 Kasowanie układu (ang. Chip Erase).
0100 0000 Zapis bitów bezpiecznikowych.
0010 0000 Zapis bitów blokujących.
0001 0000 Zapis pamięci FLASH.
0001 0001 Zapis pamięci EEPROM.
0000 1000 Odczyt bajtów sygnaturowych i bajtu kalibracyjnego.
0000 0100 Odczyt bitów bezpiecznikowych i blokujących.
0000 0010 Odczyt pamięci FLASH.
0000 0011 Odczyt pamięci EEPROM.
0000 0000 Operacja pusta

Wejście w tryb programowania

Następujący algorytm wprowadza mikrokontroler w tryb wysokonapięciowego programowania równoległego (ang. Parallel High-voltage Programming Mode):

  1. Ustaw końcówki prog_enable w stan “0000”, końcówki RESET i VCC na 0 V.
  2. Przyłóż napięcie 4,5 ... 5,5 V pomiędzy VCC a GND.
  3. Upewnij się, iż VCC osiąga co najmniej 1,8 V w ciągu następnych 20 μs.
  4. Odczekaj 20 ... 60 μs i przyłóż 11,5 ... 12,5V do RESET.
  5. Utrzymuj końcówki prog_enable w stanie niezmienionym przez co najmniej 10 μs po przyłożeniu wysokiego napięcia, aby upewnić się iż sygnatura prog_enable została zapamiętana.
  6. Odczekaj przynajmniej 300 μs przed wydaniem jakichkolwiek rozkazów programowania szeregowego.
  7. Wyjdź z trybu programowania przez wyłączenie zasilania lub sprowadzenie końcówki RESET do poziomu 0 V.

Jeśli czas narastania VCC nie spełnia wymienionych wyżej wymagań, można zastosować alternatywny algorytm:

  1. Ustaw końcówki prog_enable na “0000”, końcówki RESET i VCC na 0 V.
  2. Przyłóż napięcie 4,5 ... 5,5 V pomiędzy VCC a GND.
  3. Monitoruj VCC i jak tylko osiągnie 0,9 - 1,1 V, przyłóż 11,5 ... 12,5V do RESET.
  4. Utrzymuj końcówki prog_enable w stanie niezmienionym przez co najmniej 10 μs po przyłożeniu wysokiego napięcia, aby upewnić się iż sygnatura prog_enable została zapamiętana.
  5. Odczekaj, aż VCC faktycznie osiągnie 4,5 ... 5,5 V przed wydaniem jakichkolwiek rozkazów programowania równoległego.
  6. Wyjdź z trybu programowania przez wyłączenie zasilania lub sprowadzenie końcówki RESET do poziomu 0 V.

Zagadnienia efektywnego programowania

Załadowane rozkazy i adresy są przechowywane w mikrokontrolerze podczas programowania. Aby programować oszczędnie i efektywnie, zaleca się przestrzegać poniższych punktów:

Kasowanie układu (ang. Chip Erase)

Rozkaz Chip Erase musi zostać wykonany przed ponownym zaprogramowaniem FLASH i/lub EEPROM. Rozkaz Chip Erase wymaże całą pamięć FLASH i EEPROM plus bity blokujące. Jeśli został zaprogramowany bit bezpiecznikowy EESAVE, to pamięć EEPROM nie jest kasowana.

Bity blokujące nie są resetowane do momentu całkowitego skasowania pamięci. Bity bezpiecznikowe nie są zmieniane.

Rozkaz Chip Erase jest ładowany następująco:

  1. Ustaw XA1, XA0 na “10”. Aktywuje to ładowanie rozkazu.
  2. Ustaw  BS1 na “0”.
  3. Ustaw DATA na “1000 0000”. Jest to kod rozkazu kasowania układu (ang. Chip Erase).
  4. Prześlij przez XTAL1 dodatni impuls. Rozkaz zostanie załadowany.
  5. Prześlij przez WR ujemny impuls. Rozpocznie to kasowanie układu. RDY/BSY przejdzie w stan niski.
  6. Poczekaj, aż RDY/BSY powróci w stan wysoki przed załadowaniem nowego rozkazu.

Programowanie pamięci FLASH

Pamięć FLASH zorganizowana jest w strony, co pokazuje poniższa tabelka:

Mikrokontroler Rozmiar FLASH Rozmiar strony PCWORD Strony PCPAGE PCMSB
ATtiny2313A 1K słów
(2KB)
16 słów PC[3:0] 64 PC[9:4] 9
ATtiny4313 2K słów
(4KB)
32 słowa PC[4:0] 64 PC[10:5] 10

Przy programowaniu FLASH dane programu są najpierw umieszczane w buforze strony. Pozwala to jednocześnie zaprogramować jedną stronę danych programu. Poniższa procedura opisuje, jak zaprogramować całą pamięć FLASH:

A. Ładowanie rozkazu zapisu FLASH (ang. Write FLASH):

  1. Ustaw XA1, XA0 na “10”. Aktywuje to ładowanie rozkazu.
  2. Ustaw  BS1 na “0”.
  3. Ustaw DATA na “0001 0000”. Jest to kod rozkazu zapisu pamięci FLASH (ang. Write FLASH).
  4. Prześlij przez XTAL1 dodatni impuls. Rozkaz zostanie załadowany.

B. Ładowanie dolnego bajtu adresu:

  1. Ustaw XA1, XA0 na “00”. Aktywuje to ładowanie adresu.
  2. Ustaw BS1 na “0”. Wybiera to dolny adres.
  3. Ustaw DATA = dolny bajt adresu (0x00 - 0xFF).
  4. Prześlij przez XTAL1 dodatni impuls. Załaduje to dolny bajt adresu.

C. Ładowanie dolnego bajtu danych:

  1. Ustaw XA1, XA0 na “01”. Aktywuje to ładowanie danych.
  2. Ustaw DATA = dolny bajt danych (0x00 - 0xFF).
  3. Prześlij przez XTAL1 dodatni impuls. Załaduje to bajt danych.

D. Ładowanie górnego bajtu danych:

  1. Ustaw BS1 na “1”. Wybiera to górny bajt danych.
  2. Ustaw XA1, XA0 na “01”. Aktywuje to ładowanie danych.
  3. Ustaw DATA = górny bajt danych (0x00 - 0xFF).
  4. Prześlij przez XTAL1 dodatni impuls. Załaduje to bajt danych.

E. Powtarzaj od B do E, aż cały bufor zostanie wypełniony lub wszystkie dane wewnątrz strony zostaną załadowane.

Dolne bity w adresie odwzorowują położenie słów wewnątrz strony, natomiast wyższe bity adresują strony w pamięci FLASH. Pokazuje to poniższy rysunek:

Zauważ, iż jeśli do adresowania słów na stronie potrzebne jest mniej niż osiem bitów (rozmiar strony < 256), to najbardziej znaczące bity w dolnym bajcie adresu są używane do adresowania strony, gdy jest wykonywany zapis strony (ang. Page Write).

F. Ładowanie górnego bajtu adresu

  1. Ustaw XA1, XA0 na “00”. Aktywuje to ładowanie adresu.
  2. Ustaw BS1 na “1”. Wybiera to górny bajt adresu.
  3. Ustaw DATA = górny bajt adresu (0x00 - 0xFF).
  4. Prześlij przez XTAL1 dodatni impuls. Załaduje to górny bajt adresu.

G. Programowanie strony

  1. Prześlij przez WR ujemny impuls. Uruchomi to programowanie całej strony danych. RDY/BSY przejdzie w stan niski.
  2. Odczekaj, aż RDY/BSY powróci do stanu wysokiego.

H. Powtarzaj od B do H, aż cała pamięć FLASH zostanie zaprogramowana lub aż zostaną zaprogramowane wszystkie dane.

I. Zakończenie programowania strony

  1. Ustaw XA1, XA0 na “10”. Aktywuje to ładowanie rozkazu.
  2. Ustaw DATA na “0000 0000”. Jest to kod operacji pustej (ang. No Operation).
  3. Prześlij przez XTAL1 dodatni impuls. Załaduje to ten rozkaz, a wewnętrzne sygnały zapisu zostaną zresetowane.

Poniższy rysunek ilustruje adresowanie stron pamięci FLASH. Tabelka poniżej rysunku wyjaśnia znaczenia użytych oznaczeń.

Zmienna Opis
PCPAGE Adres strony licznika rozkazów. Wybiera stronę słów i jest używane przez operacje kasowani i zapisu strony.
PCMSB Najbardziej znaczący bit licznika rozkazów.
PCWORD Adres słowa licznika rozkazów. Wybiera słowo wewnątrz strony. Wykorzystywane jest do wypełniania bufora tymczasowego i musi być równe zero podczas operacji zapisu strony.

Więcej informacji znajdziesz w podrozdziale "Parametry pamięci"

Na poniższym rysunku przedstawione są przebiegi sygnałów przy programowaniu FLASH. XX oznacza "wartość nieistotną", a litery odnoszą się do opisanych wcześniej kroków programowania.

ADDR. LOW dolny bajt adresu
DATA LOW dolny bajt słowa danych
DATA HIGH górny bajt słowa danych
ADDR. HIGH górny bajt adresu

Programowanie pamięci EEPROM

Pamięć EEPROM zorganizowana jest w strony, co pokazuje poniższa tabelka:

Mikrokontroler Rozmiar EEPROM Rozmiar strony PCWORD Strony PCPAGE PCMSB
ATtiny2313A 128 B 4 B EEA[1:0] 32 EEA[6:2] 6
ATtiny4313 256 B 4 B EEA[1:0] 64 EEA[7:2] 7

Przy programowaniu EEPROM dane są zapamiętywane w buforze strony. Pozwala to na jednoczesne programowanie jednej strony danych.

Algorytm programujące pamięć danych EEPROM jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Przebiegi w programowaniu EEPROM są zilustrowane na poniższym rysunku. XX oznacza "wartość nieistotną", a litery odnoszą się do opisanych wcześniej kroków programowania.

ADDR. HIGH górny bajt adresu
ADDR. LOW dolny bajt adresu
DATA bajt danych

Odczyt pamięci FLASH

Algorytm odczytu pamięci FLASH jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Odczyt pamięci EEPROM

Algorytm odczytu pamięci FLASH jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Programowanie dolnych bitów bezpiecznikowych

Algorytm programowania dolnych bitów bezpiecznikowych jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Programowanie górnych bitów bezpiecznikowych

Algorytm programowania górnych bitów bezpiecznikowych jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Programowanie rozszerzonych bitów bezpiecznikowych

Algorytm programowania rozszerzonych bitów bezpiecznikowych jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Poniższy rysunek ilustruje przebiegi sygnałów przy programowaniu bitów bezpiecznikowych. XX oznacza "wartość nieistotną", a litery odnoszą się do opisanych wcześniej kroków programowania.

Programowanie bitów blokujących

Algorytm programowania bitów blokujących jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

  1. A: Załaduj rozkaz “0010 0000” (programowanie bitów blokujących).
  2. C: Załaduj bajt danych. Bit n = “0” programuje, bit n = “1” kasuje bit blokujący. Jeśli zaprogramowany został 3 tryb LB (LB1 i LB2 zaprogramowane), nie jest możliwe zaprogramowanie bitów blokujących przez żaden zewnętrzny tryb programowania.
  3. Prześlij przez WR ujemny impuls i poczekaj na powrót do stanu wysokiego linii RDY/BSY. Bity blokujące można wymazać tylko przez wykonanie rozkazu kasowania układu (ang. Chip Erase).

Odczyt bitów bezpiecznikowych i bitów blokujących

Algorytm odczytu bitów bezpiecznikowych i blokujących jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

Poniższy rysunek ilustruje odwzorowanie pomiędzy BS1, BS2 a bitami bezpiecznikowymi i blokującymi podczas odczytu:

Odczyt bajtów sygnaturowych

Algorytm odczytu bajtów sygnaturowych jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

  1. A: Załaduj rozkaz “0000 1000” (odczyt bajtów sygnaturowych).
  2. B: Załaduj dolny bajt adresu (0x00 - 0x02).
  3. Ustaw OE na “0” i BS1 na “0”. Wybrany bajt sygnatury może teraz być odczytany z linii DATA.
  4. Ustaw OE na “1”.

Odczyt bajtu kalibracyjnego

Algorytm odczytu bajtu kalibracyjnego jest następujący (zobacz do podrozdziału "Programowanie pamięci FLASH", gdzie znajdziesz szczegóły na temat ładowania rozkazów, adresów i danych):

  1. A: Załaduj rozkaz “0000 1000”.
  2. Załaduj dolny bajt adresu, 0x00.
  3. Ustaw OE na “0” i BS1 na “1”. Bajt kalibracyjny można teraz odczytać z linii DATA.
  4. Ustaw OE na “1”
Na początek:  podrozdziału   strony 

Programowanie szeregowe

Obie pamięci FLASH i EEPROM można programować za pomocą szeregowej magistrali SPI po wymuszeniu poziomu masy GND na końcówce RESET. Interfejs szeregowy składa się z końcówek SCK, MOSI (wejścia) i MISO (output). Po podaniu stanu niskiego na końcówkę RESET należy wykonać instrukcję uaktywniającą programowanie (ang. Programming Enable instruction) przed wykonaniem operacji programowania/kasowania.

Poniższy rysunek przedstawia sygnały i połączenia w programowaniu szeregowym:

Uwaga:   Jeśli mikrokontroler taktowany jest z wewnętrznego oscylatora, to nie ma potrzeby podłączania źródła zegarowego do końcówki XTAL1.

Gdy programowana jest pamięć EEPROM, to w operację programowania wbudowany jest cykl automatycznego kasowania i nie ma potrzeby wcześniejszego wykonywania rozkazu kasowania układu (ang. Chip Erase). Odnosi się to tylko do trybu programowania szeregowego.

Operacja kasowania układu ustawia zawartość każdej komórki pamięci we FLASH i w EEPROM na 0xFF.

Zależnie od ustawienia bitów bezpiecznikowych CKSEL układ musi być taktowany właściwym zegarem. Minimalne długości okresów niskich i wysokich na wejściu sygnału zegara szeregowego (SCK) są zdefiniowane następująco:

Odwzorowanie końcówek

Poniższa tabelka wymienia przypisania końcówek. Zauważ, iż nie wszystkie mikrokontrolery używają końcówek SPI przeznaczonych dla wewnętrznego interfejsu SPI.

Symbol Końcówka WE/WY Opis
MOSI PB5 WE Wejście danych
MISO PB6 WY Wyjście danych
SCK PB7 WE Zegar szeregowy

Algorytm programowania

Gdy dane szeregowe są zapisywane do ATtiny2313A/4313, ich odczyt przez mikroprocesor następuje na narastającym zboczu sygnału zegarowego SCK. Gdy dane są odczytywane z ATtiny2313A/4313, ich próbkowanie następuje przy opadającym zboczu sygnału SCK.

Aby zaprogramować i zweryfikować mikrokontroler ATtiny2313A/4313 w trybie programowania szeregowego, zaleca następujący ciąg operacji:

  1. Sekwencja włączenia zasilania (ang. power-up sequence):
    Przyłóż napięcie zasilające pomiędzy końcówki VCC i GND, jednocześnie wymuszając stan niski "0" na końcówkach RESET i SCK.
    • W niektórych systemach programator nie może zagwarantować utrzymania końcówki SCK w stanie niskim. W takim przypadku na wejście RESET należy podać dodatni impuls po ustawieniu SCK na "0". Długość tego impulsu nie może być niższa od tRST (minimalna szerokość impulsu na końcówce RESET) plus dwa cykle zegarowe mikroprocesora.
  2. Odczekaj co najmniej 20 ms i uaktywnij programowanie szeregowe przez wysłanie instrukcji włączającej je na końcówkę MOSI.
  3. Instrukcje programowania szeregowego nie będą działać, jeśli komunikacja nie zostanie zsynchronizowana. Gdy nastąpi synchronizacja, to drugi bajt (0x53) zostanie zwrócony w trakcie przesyłania trzeciego bajtu instrukcji włączającej programowanie.
    • Bez względu na to, czy zwrócony bajt jest poprawny lub nie, wszystkie cztery bajty instrukcji muszą zostać przesłane.
    • Jeśli nie zostanie zwrócone 0x53, wyślij na RESET dodatni impuls i ponów przesłanie instrukcji włączającej. Jeśli po 32 próbach bajt 0x53 nie zostanie zwrócony poprawnie, to do programatora nie podłączono działającego mikrokontrolera.
  4. Pamięć FLASH programowana jest strona po stronie. Strona pamięci jest ładowana bajt po bajcie przez podanie 4 najmłodszych bitów adresu i danych razem z instrukcją ładowania strony pamięci programu.
    • Aby zapewnić poprawne załadowanie strony, dolny bajt danych musi zostać załadowany przed górnym bajtem danych dla danego adresu.
    • Strona zostaje zapisana przez załadowanie instrukcji zapisu strony pamięci programu z 6 najstarszymi bitami adresu.
    • Jeśli nie jest używany podgląd danych (RDY/BSY), to użytkownik musi odczekać przez czas równy co najmniej tWD_FLASH przed wysłaniem kolejnej strony. Dostęp do interfejsu programowania szeregowego przed zakończeniem operacji zapisu we FLASH może doprowadzić do jej błędnego zaprogramowania.
  5. Pamięć EEPROM może być programowana po jednym bajcie lub stronami.
    • A: programowanie bajtami. Pamięć EEPROM jest programowana bajt po bajcie przez dostarczenie adresu i danych wraz z odpowiednią instrukcją zapisu. Komórka EEPROM zostaje najpierw automatycznie wymazana przed zapisaniem w niej nowych danych. Jeśli nie jest używany podgląd danych (RDY/BSY), to użytkownik musi odczekać przez czas równy co najmniej tWD_EEPROM przed wysłaniem następnego bajtu. W wykasowanym układzie nie ma potrzeby programowania bajtów o wartościach 0xFF.
    • B: programowanie stronami. Strona pamięci jest ładowana bajt po bajcie przez dostarczenie 6 najmłodszych bitów adresu oraz danych razem w instrukcji ładowania strony EEPROM (ang. Load EEPROM Memory Page instruction). Strona EEPROM jest programowana w pamięci przez załadowanie instrukcji zapisu strony EEPROM (ang. Write EEPROM Memory Page Instruction) wraz z 7 najstarszymi bitami adresu. Gdy jest używany dostęp do EEPROM stronami, to zmieniane są jedynie komórki bajtowe załadowane instrukcją ładowania strony EEPROM, a pozostałe komórki pozostają bez zmian. Jeśli nie jest używany podgląd danych (RDY/BSY), to użytkownik musi odczekać przez czas równy co najmniej tWD_EEPROM przed wysłaniem kolejnego bajtu.before issuing the next byte W wykasowanym układzie nie ma potrzeby programowania bajtów o wartościach 0xFF.
  6. Dowolna pozycja w pamięci może zostać zweryfikowana przez instrukcję odczytu, która zwraca zawartość pod wybranym adresem poprzez szeregowe wyjście MISO.
  7. Na końcu sesji programowania końcówka RESET może zostać ustawiona w stan wysoki, aby przywrócić normalne działanie mikrokontrolera.
  8. Sekwencja wyłączenia zasilania (jeśli jest potrzebna):
    • Ustaw RESET na "1".
    • Wyłącz napięcie VCC.

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

Zbiór instrukcji programowania szeregowego

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 00aa
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 00aa
bbbb xxxx
xxxx xxxx
Zapis strony pamięci programu pod adresem a:b
Read EEPROM Memory
Odczyt pamięci EEPROM
1010 0000
000x xxxx
xbbb bbbb
oooo oooo
Odczyt danych o z EEPROM pod adresem b.
Write EEPROM Memory
Zapis pamięci EEPROM
1100 0000
000x xxxx
xbbb 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
xbbb 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.
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.
Read Signature Byte
Odczyt bajtu sygnatury
0011 0000
000x xxxx
xxxx xxbb
oooo oooo
Odczyt bajtu sygnatury spod adresu b.
Write Fuse Bits
Zapis dolnych bitów bezpiecznikowych
1010 1100
1010 0000
xxxx xxxx
iiii iiii
Zapis dolnego bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane.
Write Fuse High Bits
Zapis górnych bitów bezpiecznikowych
1010 1100
1010 1000
xxxx xxxx
iiii iiii
Zapis górnego bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane.
Write Extended Fuse Bits
Zapis rozszerzonych bitów bezpiecznikowych
1010 1100
1010 0100
xxxx xxxx
xxxx xxxi
Zapis rozszerzonego bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane.
Read Fuse Bits
Odczyt dolnych bitów bezpiecznikowych
0101 0000
0000 0000
xxxx xxxx
oooo oooo
Odczyt dolnego bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane.
Read Fuse High Bits
Odczyt górnych bitów bezpiecznikowych
0101 1000
0000 1000
xxxx xxxx
oooo oooo
Odczyt górnego bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane.
Read Extended Fuse Bits
Odczyt rozszerzonych bitów bezpiecznikowych
0101 0000
0000 0100
xxxx xxxx
oooo oooo
Odczyt rozszerzonego bajtu bezpieczników. "0" = zaprogramowane, "1" = niezaprogramowane.
Read Calibration Byte
Odczyt bajtu kalibracyjnego
0011 1000
000x xxxx
0000 000b
oooo oooo
Odczyt bajtu kalibracyjnego spod adresu b.
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.
Uwagi:   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
    Jeśli najmłodszy bit danych zwróconych przez podgląd RDY/BSY ma stan wysoki 1, to operacja programowania jest wciąż wykonywana. Poczekaj na powrót tego bitu do stanu niskiego 0 przed wykonaniem następnej instrukcji.
    W obrębie tej samej strony bajt dolny danych musi być załadowany przed bajtem górnym.
    Po załadowaniu danych do bufora strony, zaprogramuj stronę EEPROM
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
©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.