137
SEMINARSKI RAD Metode programiranja savremenih mikrokontrolera Kovačević Vladimir Br.ind. 231/08 Niš, 2009 Univerzitet u Nišu Elektronski fakultet Studijski program: Elektrotehnika i računarstvo Modul: C4 Lista 2 Predmet: Sistemi za prikupljanje i obradu podataka (DAS)

SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

  • Upload
    lyhanh

  • View
    240

  • Download
    4

Embed Size (px)

Citation preview

Page 1: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

SEMINARSKI RAD

Metode programiranja savremenih mikrokontrolera

Kovačević VladimirBr.ind. 231/08

Niš, 2009

Univerzitet u NišuElektronski fakultetStudijski program: Elektrotehnika i računarstvoModul: C4 Lista 2Predmet: Sistemi za prikupljanje i obradu podataka (DAS)

Page 2: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Sadržaj1 In-System Programming FLASH (ISP) …………………………………………………. 1 1.1 Programiranje Flash-a 5 1.1.1 Algoritam za programiranje Flash-a AT89C51 i AT89C52 kontrolera 5 1.1.2 Programiranje Flash-a AT89C2051 i AT89C4051 kontrolera 82 In-System programiranje mikrokontrolera AT89S5X ………………………………… 11 2.1 Programiranje AT89S51 u paralelnom modu 11 2.2 Programiranje AT89S51 u serijskom modu 13 2.3 Programiranje AT89S2051 i AT89S4051 17

2.3.1 Programiranje AT89S2051/ AT89S4051 u paralelnom modu 18 2.3.2 Programiranje AT89S2051/AT89S4051 u serijskom modu 23 2.4 Programiranje AT89S8253 26 2.4.1 Programiranje AT89S8253 u paralelnom modu 26 2.4.2 Programiranje AT89S8253 u serijskom modu 283 Bootloader način programiranja ………………………………………………………… 32 3.1 Memorijska mapa bootloader mikrokontrolera 33 3.2 UART bootloader 37 3.2.1 Bootloader kod T89C51RD2 mikrokontrolera 38 3.2.2 ISP Bootloader protokol za programiranje 48 3.2.2.1 Inicijalizacija komunikacije 49 3.2.2.2 Komandni protokol 49 3.2.3 IAP programiranje/samoprogramiranje 54 3.3 USB bootloader (AT89C5131, AT90xx) 56 3.3.1 ISP programiranje pomoću USB bootloadera 57 3.3.1.1 Proces programiranja Flash-a ili EEPROM-a 61 3.3.1.2 Čitanje podataka iz Flash-a ili EEPROM-a 62 3.3.1.3 Proces čitanja konfiguracionih i proizvodnih informacija 63 3.3.1.4 Brisanje Flash memorije 64 3.3.1.5 Startovanje aplikacije 65 3.3.2 IAP programiranje pomoću USB bootloadera 65 3.4 DES Bootloader 66 3.5 Samoprogramiranje 68 3.5.1 Organizacija memorije 68 3.5.2 SPM instrukcije 69 3.5.3 Interapti 71 3.5.4 Primer bootloadera 724 Programiranje Silabs-ovih mikrokontrolera ...................................................................... 75 4.1. Programiranje Flash-a pomoću C2 interfejsa 75 4.1.1 Sekvenca za inicijalizaciju 77 4.1.2 Upis bloka podataka u Flash (0x07) 79 4.1.3 Čitanje bloka podataka iz Flash-a (0x06) 81 4.1.4 Brisanje stranica u okviru Flash-a (0x08) 83 4.1.5 Brisanje kompletnog Flash-a (0x03) 854.2. Programiranje Flash-a pomoću JTAG interfejsa 87 4.2.1 IR i DR skeniranje 90 4.2.2 Operacija čitanja indirektnog registra 94 4.2.3 Operacija upisa u indirektni registar 96

Page 3: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4.2.4 Provera Busy bita 97 4.2.5 Programiranje Flash-a mikrokontrolera 97 4.2.5.1 Procedure za pristup Flash-u 99 4.2.5.2 Čitanje bajta podataka iz Flash-a 99 4.2.5.3 Upis bajta podataka u Flash 102 4.2.5.4 Brisanje stranice Flash-a 104 4.2.6 DLL biblioteka 1065 Programiranje AVR mikrokontrolera …………………………………………………… 107 5.1 Programiranje memorije AVR mikrokontrolera pomoću JTAG interfejsa 107 5.1.1 Instrukcije JTAG interfejsa 110 5.1.2Virtuelni registri 111 5.1.3 Programiranje memorije mikrokontrolera 115 5.2. Paralelni mod programiranja AVR mikrokontrolera 118 5.2.1 Programiranje AVR mikrokontrolera 119 5.2.1.1 Postupak za brisanje kompletnog čipa 121 5.2.1.2 Procedura za programiranje Flash-a 121 5.2.1.3 Procedura za čitanje Flash-a 123 5.2.1.4 Procedura za čitanje EEPROM-a 123 5.2.1.5 Procedura za programiranje osiguračkih bitova 123 5.2.1.6 Procedura za programiranje bitova za zaključavanje 124 5.2.1.7 Procedura za čitanje osiguračkih bitova i bitova za zaključavanje 124 5.2.1.8 Procedura za čitanje bitova za obeležavanje 125 5.2.1.9 Procedura za čitanje kalibracionih bitova 125 5.3 Programiranje AVR mikrokontrolera u serijskom modu 1256 Predlog za izradu univerzalnog programatora 129 6.1 Hardware programatora 129 6.2 Protokoli za komunikaciju sa PC-m 131 6.3 Firmware programatora 133Literatura 135

Page 4: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

1 In-System Programming FLASH (ISP) ISP programiranje (In-Systam Programming) omogućava programiranje C51 mikrokontrolera koji je ugrađen unutar korisničkog sistema i programiranje pomoću programatora. Tipična konfiguracija koja se koristi prilikom ISP programiranja mikrokontrolera C51 je prikazana na Slici 1.1.

Slika 1.1 ISP Programiranje

Osnovu sistema čine host računar, C51 mikrokontroler, Flash memorija za programski kod i SRAM memorija za podatke. Blok ISP glue se koristi za kontrolu upisa podataka u Flash ili ako je potrebno u SRAM. Sa druge strane, veza mikrokontrolera sa računarom se ostvaruje u cilju upisa novog programa u Flash memoriju. Ova veza se izvodi pomoću RS-232 seriske veze i UART-a koji je ugrađen u mikrokontroleru.

C51 mikrokontroleri sadrže nekoliko memorijskih oblasti:

• Unutrašnja memorija za podatke

• Unutrašnji SFR registi za specijalne namene (Special Function Register)

• Programska Flash memorija na čipu

• Opciona memorija za podatke na čipu XRAM

• Spoljašnja programska memorija

• Spoljašnja memorija za podatke

Memorijska mapa mikrokontrolera u standardnom modu (kada aplikacija radi) je prikazana na Slici 1.2. U okviru standardnog moda, mikrokontroler se resetuje sa EA=0 i nakon reseta aplikacija startuje sa adrese 0000h iz Flash memorije. SRAM se koristi za pamćenje podataka iz aplikacije a Flash memorija se koristi za pamćenje programskog kod-a i statičkih podataka. Ukoliko se želi pristupiti podacima u okviru SRAM-a koristi se MOVX instrukcija, a za Flash memoriju MOVC instrukcija. U ISP modu programiranja, programska Flash memorija se preslikava u prostor memorijske oblasti za podatke. Sada se pristup podacima u okviru Flash-a može ostvariti pomoću MOVX instrukcije. Reset mikrokontrolera se može izvesti sa EA=1 i nakon reseta startuje se sa izvršenjem ISP programa od adrese 0000h u okviru ROM/EPROM ili Flash-a.

Page 5: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

1 In-System Programming FLASH (ISP)

Slika 1.2 Memorijska mapa mikrokontrolera

ISP program instaliran na host računaru predstavlja aplikaciju koja omogućava jednostavno povezivanje sa mikrokontrolerom i njegovo programiranje. Softver je podeljen u tri dela: IO interfejs, Intel HEX fajl parser i Flash programiranje.

ISP program obavlja sledeće zadatke:

• Atmel Flash autentifikaciju

• Brisanje Flash-a na čipu

• Download programskog HEX fajla u Flash memoriju

Ilustracije radi, na Slici 1.3 je prikazan izgled poruke na ekranu host računara prilikom programiranja Flash-a.

Slika 1.3 Poruka na host-u

HEX fajl se download-uje sa host računara preko standardnog C51 UART-a koristeći potpuni dupleks komunikacijski protokol sa XON/XOFF kontrolom protoka.

Intel HEX fajl predstavlja binarnu reprezentaciju programskog koda. Izgled jednog HEX fajla je prikazan na Slici 1.4. U osnovi Intel HEX fajl zapis sadrži nekoliko delova:

• Zapis dužine - ukazuje na broj bajtova u poruci

• Deo za zapis tipa informacije - opisuje informacije sadržane u poruci (podaci, kraj fajla, segmentna adresa itd.)

• Adresno polje - ukazuje na poziciju gde su prateći bajtovi biti upisani u memoriji

2

Page 6: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

• Zapis informacije - sadrži bajtove informacije koja se upisuje u memoriju (programski kod)

• Čeksuma

• Oznake za kraj poruke

Slika 1.4 Intelov Hex fajl zapis

U cilju minimizacije prostora potrebnog za zapis podataka, HEX fajl parser analizira svaki bajt zapisa. HEX dekoder dekodira svako polje i izdvaja ofset adrese i podatke koji se trebaju zapisati u programsku Flash memoriju. Na Slici 1.5 je prikazana struktura parsera.

Flash memorijski kontroler omogućava nekoliko vrsta operacija upisa i brisanja kao što su: upis bajta podataka, upis stranice, brisanje stranice itd.

3

Page 7: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

1 In-System Programming FLASH (ISP)

Slika 1.5 Algoritamski prikaz parsera

4

Page 8: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

1.1 Programiranje Flash-a

Prilikom kupovine bilo kog od Atmel-ovih mikrokontrolera Flash memorija unutar čipa je prazna (sve memorijske lokacije sadrže FFh) i spremna za programiranje. Interfejs za programiranje podržava dva moda za programiranje: mod u kome se koristi visoki nivo (12V) i mod u kome se koristi niski nivo signala za programiranje (Vcc= 5V). Mod sa niskim nivoom signala se koristi za programiranje unutar korisničkog sistema, dok se mod sa visokim nivoom koristi u posebnim programatorima. Memorijski prostor za programski kod se programira bajt po bajt i to u bilo kom modu. Pre reprogramiranja, ranije programirane Flash memorije, je potrebno obavezno brisanje memorije.

1.1.1 Algoritam za programiranje Flash-a AT89C51 i AT89C52 kontroleraPre programiranja AT89C51 i AT89C52 mikrokontrolera potrebno je obezbediti odgovarajuće adresne, data i kontrolne signale shodno Slici 1.6 i Tabeli 1.1. Liniju za podatke predstavlja port P0, dok prvih osam adresnih linija pripada portu P1 a ostale četiri adresne linije zauzimaju port P2 i to od P2.0 do P2.3. Pinovi P2.6, P2.7, P3.6 i P3.7 se koriste kao upravljački signali za programiranje. Odgovarajućom kombinacijom upravljačkih signala može se vršiti upis bilo kog koda u okvir Flash memorije, čitanje i brisanje iste, upis bitova za zaključavanje i čitanje oznaka mikrokontrolera.

Programiranje se obavlja u nekoliko koraka:

1. Postaviti željenu memorijsku lokaciju na adresnu liniju

2. Postaviti odgovarajući podatak na data liniju

3. Aktivirati odgovarajuću kombinaciju upravljačkih signala (Tabela 1.1)

4. Postaviti EA/Vpp na 12V radi odabira moda programiranja

5. Jednom taktovati ALE/PROG za upis jednog bajta u Flash. Ciklus upisa jednog bajta tipično traje više od 1.5ms. Nakon upisa jednog bajta potrebno je ponoviti korake od 1 do 5, naravno, promenom adrese i podataka koji se trebaju upisati, sve do kraja kompletnog fajla koji se treba upisati.

Slika 1.6 Signali za programiranje flash-a

5

Page 9: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

1 In-System Programming FLASH (ISP)

Tabela 1.1 Modovi za programiranje flash-a

Nadgledanje procesa programiranja se može obaviti pomoću RDY/BSY izlaznog signala koji se nalazi na pinu P3.4. Kada je neki od procesa u toku ovaj signal je na visokom i obrnuto.

Brisanje kompletnog Flash-a se obavlja postavljanjem ALE/PROG na nisko u trajanju 10ms i postavljanjem odgovarajuće kombinacije na upravljačkim pinovima. Brisanje kompletnog Flash-a traje oko 1s.

Čitanje oznaka kontrolera (signature Bytes) zahteva postavljanje pinova P2.6, P2.7,P3.6 i P3.7 na nisko i istovremeno držanje ALE/PROG na visoko. Oznake kontrolera se nalaze na lokacijama 30h, 31h i 32h. Vrednosti ovih lokacija mogu biti:

• (030h)=1Eh oznaka proizvođača Atmel

• (031h)=52h oznaka kontrolera 89C52 ili 51h oznaka kontrolera 89C51

• (032h)=FFh oznaka napona za programiranje 12Vili 05h oznaka napona za programiranje 5V

Bitovi za zaštitu podataka u okviru memorije (Memory lock bits) predstavljaju sigurnosne bitove koji štite od neovlašćenog čitanja upisane programske memorije. AT89C51 i AT89C52 poseduju tri bita za zaštitu Flash memorije. Ovi bitovi mogu biti programirani (P) ili neprogramirani (U). U Tabeeli 1.2 su prikazane kombinacije koje su moguće prilikom upisa.

Tabela 1.2 Bitovi za zaštitu podataka

Oblici signala tokom programiranja ili verifikacije Flash-a mikrokontrolera u modu sa visokim nivoom signala su prikazani na Slici 1.7.

6

Page 10: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 1.7 Oblici signala prilikom programiranja

U Tabeli 1.3 su prikazani tajmizi signala koji se koriste prilikom programiranja.

Tabela 1.3 Tajminzi signala za programiranje

Na Slici 1.8 su prikazani signali tokom programiranja ili verifikacije Flash-a mikrokontrolera u modu sa niskim naponom.

7

Page 11: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

1 In-System Programming FLASH (ISP)

Slika 1.8 Signali za programiranje u modu sa niskim naponom

1.1.2 Programiranje Flash-a AT89C2051 i AT89C4051 kontroleraOvi kontroleri ne poseduju adresne linije za programiranje mikrokontrolera. Umesto njih sadrže jedan interni PEROM adresni brojač koji se uvek resetuje (000h) sa uzlaznom ivicom na RST pinu. Brojač broji impulse na XTAL1 pinu. Izgled kontrolera i raspored pinova u modu za programiranje Flash-a je prikazan na Slici 1.9.

Slika 1.9 Signali prilikom programiranja AT89C2051 mikrokontrolera

Linija za podatke je na portu P1, dok su upravljačke linije na pinovima P3.3, P3.4, P3.5 i P3.7. Prilikom programiranja neophodno je ispoštovati preporučeni algoritam za programiranje:

1. Nakon uspostavljanja napajanja između Vcc i GND potrebno je sačekati vremenski period od 10 µs i postaviti RST i XTAL1 na GND

2. Postaviti RST i PROG (pin P3.2) na visoko

8

Page 12: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

3. Postaviti odgovarajuću kombinaciju na pinovima P3.3, P3.4, P3.5 i P3.7 shodno Tabeli 1.4 PEROM moda.

Tabela 1.4 Modovi programiranja AT89C2051

4. Postaviti liniju za podatke P1.0 do P1.7

5. Na RST dovesti 12V radi dozvole programiranja

6. Impuls na P3.2 dozvoljava upis jednog bajta i uobičajno traje oko 1.2ms.

7. Za verifikaciju programiranih podataka potrebno je smanjiti signal na RST sa 12V na “H“ i postaviti pinove P3.3 do P3.7 na odgovarajuće nivoe shodno Tabeli 1.4. Izlazni podaci će biti dostupni na portu P1.

8. Za nastavak programiranja u okviru sledeće memorijske lokacije treba dovesti impuls na XTAL1 radi uvećanja brojača adresa i postaviti podatak na port P1.

9. Ponoviti korake od 6. do 8. promenom podataka i uvećanjem brojača adresa sve do kraja objektnog fajla.

10. Sekvenca za prekidanje moda programiranja se sastoji u postavljanju XTAL1 i RST na GND odnosno “L“

Mikrokontroleri AT89C2051 i AT89C4051 poseduju dva bita za zaštitu podataka u okviru memorije, koji su prikazani u Tabeli 1.5.

Tabela 1.5 Bitovi za zaštitu podataka

Oblici signala prilikom programiranja su prikazani na Slici 1.10.

9

Page 13: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

1 In-System Programming FLASH (ISP)

Slika 1.10 Signali za programiranje

U okviru Tabele 1.6 su dati tajminzi signala koji se koriste prilikom programiranja Flash-a AT89C2051 mikrokontrolera.

Tabela 1.6 Tajminzi signala za programiranje

10

Page 14: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5XFamilija mikrokontrolera AT89S5x, čiji je tipičan predstavnik komponenta AT89S51 podržava dva moda programiranja Flash-a:

• Paralelni mod

• Serijski mod (SPI protokol)

2.1 Programiranje AT89S51 u paralelnom modu

U okviru paralelnog moda programiranja dozvoljeno je programiranje Flash-a pomoću signala od +12 V i to bajt po bajt. Na Slici 2.1 je prikazan raspored pinova mikrokontrolera koji se koriste prilikom programiranja u paralelnom modu.

Slika 2.1 Signali za programiranje u paralelnom modu

Algoritam koji se koristi za programiranje Flash-a je identičan kao i kod AT89C51 mikrokontrolera, s tim što postoje razlike u upravljačkim signalima. U okviru Tabele 2.1 je dat pregled upravljačkih signala koji se koriste prilikom programiranja.

Tabela 2.1 Modovi za programiranje

Page 15: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

Iz Tabele 2.1 se mogu primetiti različite adrese memorijskih lokacija koje sadrže oznake mikrokontrolera u odnosu na AT89C51 mikrokontrolere.

(000h) = 1Eh oznaka proizvođača Atmel

(100h) = 61h oznaka kontrolera 89LS51

(200h) = 06h

Treba napomenuti i razliku u pinu P3.3 koji je novina u odnosu na AT89C51. Uvođenjem ovog pina javlja se mogućnost upotrebe većeg broja upravljačkih instrukcija.

Prilikom brisanja kompletnog Flash-a mikrokontrolera potrebno je postaviti odgovarajuću kombinaciju kontrolnih signala i postaviti impuls na ALE/PROG u trajanju od 200ns do 500ns. Oblici signala prilikom programiranja i verifikacije u paralelnom modu prikazani su na Slici 2.2.

Slika 2.2 Talasni oblici signala koji se koriste za programiranje

U Tabeli 2.2 je dat pregled tajminga koji se moraju ispoštovati prilikom programiranja u okviru paralelnog moda.

Tabela 2.2 Tajminzi signala za programiranje

12

Page 16: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

2.2 Programiranje AT89S51 u serijskom modu

Serijski mod programiranja mikrokontrolera, bilo da se radi o programiranju Flash programske memorije, EEPROM-a ili nekih od osiguračkih bitova, potpuno je kompatibilan sa ISP načinom programiranja. Prilikom programiranja mikrokontrolera u serijskom modu koristi se SPI (Serial Peripheral Interface) protokol. SPI protokol je jednostavni protokol za prenos podataka koji se koristi uglavnom u embedded uređajima i sličan je I2C protokolu. Na fizičkom nivou SPI sadrži četiri linije:

• MOSI (Master Out, Slave In) liniju za podatke

• MISO (Master In, Slave Out) liniju za podatke koja se kontroliše od strane klijenta

• SCK taktna linija

• RST linija za reset

SPI se zasniva na dva dela: master i slave. Master u potpunosti kontroliše linije za podatke i sarađuje sa jednim ili više slave-ova (Slika 2.3). Signal SS (Slave Select) se koristi za selekciju slave-a koji se programira u sistemu sa više slave-ova. Master može biti drugi kontroler ili PC računar.

Slika 2.3 SPI programiranje

Master postavlja bit koji se prenosi na MOSI i generiše taktni impuls na SCK, pa opet postavlja sledeći bit na MOSI liniju i tako sve dok se ne prenese kompletan bajt informacije. U nastavku je data procedura koja se može koristiti za postavljanje bajta.

Proces čitanja bajta koga šalje slave je sličan procesu slanja koji je predhodno opisan. Master zahteva podatke od slave-a, i šalje taktne impulse na SCK sve dok slave postavlja bitove na MISO liniji. Procedura za čitanje podataka sa MISO linije je:

13

Page 17: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

Na Slici 2.4 je prikazan raspored pinova koji se koriste prilikom programiranja pomoću serijskog ISP interfejsa. Kao što se vidi na Slici 2.4 za programiranje se koriste pinovi P1.5, P1.6, P1.7 i RST pin. Pre ulaza u mod serijskog programiranja potrebno je da se na pin RST dovede Vcc (sekvenca za paljenje). Pre izvršavanja bilo kakve operacije potrebno je izvršiti instrukciju dozvole programiranja i brisanje kompletnog sadržaja programske memorije. Nakon brisanja sve memorijske lokacije sadrže FFh.

Prilikom programiranja potrebno je dovesti spoljašnji takt na XTAL1 (od 3MHz do 16MHz) ili postaviti kristal između pinova XTAL1 i XTAL2. Maksimalna frekvencija takta (SCK) mora biti manja od 1/16 frekvencije kristala. Na primer za takt oscilatora od 16MHz, maksimalna SCK frekvencija je 1MHz. Prilikom programiranja neophodno je koristiti SPI Mode1 način rada.

Slika 2.4 Signali koji se koriste prilikom SPI programiranja

Preporučeni algoritam za programiranje Flash programske memorije u serijskom modu je:

1. Sekvenca paljenja (povezivanje Vcc i GND a nakon toga RST pin odvesti na “H“)

2. Dozvoliti programiranje pomoću Programming Enable instrukcije na pinu MOSI/P1.5 (Slika 2.4). Dozvola programiranja se od strane host-a može obaviti pomoću procedure:

14

Page 18: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

3. Programski kod se ubacuje bajt po bajt u okviru bajt moda ili Page moda. Ciklus upisa obično traje manje od 1ms.

4. Nakon upisa se može verifikovati svaka memorijska lokacija koristeći Read instrukciju. Sadržaj odabrane memorijske lokacije se vraća na MISO/P1.6 pinu.

5. Na kraju programiranja potrebno je RST postaviti na “L“ u cilju vraćanja kola u mod normalnog rada

6. Ovaj korak se obavlja ukoliko je potrebno i odnosi se na gašenje mikrokontrolera. Prvo se XTAL1 postavi na “L“, takođe se RST postavi na “L“ i konačno se ukine Vcc.

U Tabeli 2.3 su prikazane instrukcije koje se koriste prilikom serijskog moda programiranja mikrokontrolera. Sve instrukcije koje se koriste su dužine 4 bajta.

Tabela 2.3 Instrukcije za programiranje

Talasni oblici signala MOSI, MISO i SCK prilikom programiranja u serijskom modu su prikazani na Slici 2.5. Prilikom postavljanja podataka na MOSI ulaz potrebno je voditi računa da podatak, koji se upisuje, bude postavljen na liniji pre uzlazne ivice takta SCK. Isto tako podatak na izlazu je dostupan isključivo do trenutka silazne ivice takta SCK (SPI Mod1 način rada). Prilikom upisa prvo se postavlja MSB bit podatka, a prilikom čitanja prvo je dostupan MSB bit.

15

Page 19: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

Slika 2.5 Oblici signala za programiranje u SPI modu

Tajminzi signala koji se koriste prilikom programiranja su prikazani na Slici 2.6 i u okviru tabelarnog prikaza (Tabela 2.4).

Slika 2.6 Karakteristična vremena signala za programiranje

Tabela 2.4 Tajminzi signala za programiranje

Ukoliko se obavlja brisanje kompletne memorije mikrokontrolera pomoću SPI protokola može se koristiti sledeća funkcija:

U nastavku su prikazani primeri procedura koje mogu biti od koristi prilikom korišćenja SPI protokola za programiranje mikrokontrolera.

• Upis podataka u okvir programske memorije

16

Page 20: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

• Čitanje podataka iz programske memorije

• Upis podataka u memoriju za podatke.

• Čitanje podataka iz memorije za podatke

• Upis bitova za zaključavanje memorije

2.3 Programiranje AT89S2051 i AT89S4051

Mikrokontroleri AT89S2051 i AT89S4051 sadrže 2K/4K bajta In-System Programmable Flash programske memorije. Programiranje ove Flash memorije se takođe može obaviti u paralelnom i serijskom modu.

17

Page 21: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

2.3.1 Programiranje AT89S2051/AT89S4051 u paralelnom moduPrilikom korišćenja paralelnog moda programiranja za liniju podataka se koristi port P1. Kao kontrolni signali koriste se RDY/BSY (pin P3.1), PROG (pin P3.2), TestCode (sadrži pinove P3.7, P3.5, P3.4 i P3.3) , XTAL1 i RST (Slika 2.7).

Slika 2.7 Signali koji se koriste prilikom programiranja

U cilju programiranja Flash-a potrebno je koristiti odgovarajuću kombinaciju kontrolnih signala iz Tabele 2.5.

Tabela 2.5 Modovi za programiranje u okviru paralelnog moda

18

Page 22: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Prilikom programiranja Flash-a mikrokontrolera može se koristiti sledeći algoritam:

1. Sekvenca paljenja:

• Dovesti napajanje na Vcc i GND pinove

• 10 µs nakon dovedenog napajanja postaviti RST na “H“

• Sačekati 4 ms koje predstavljaju vreme za fizičko resetovanje.

• Postaviti P3.2 na “H“ i koristeći Tabelu postaviti odgovarajuće kontrolne TestCode signale a nakon toga sačekati 10 µs

• Signal RST/Vpp postaviti na 12 V u cilju dozvole programiranja u paralelnom modu.

• Na kraju je potrebno sačekati 10 µs pre programiranja

Predhodno opisani postupak je prikazan u obliku signala na Slici 2.8.

Slika 2.8 Signali koji se koriste za ulazak u paralelni mod programiranja

2. Brisanje Flash-a.

• Postaviti “0001“ TestCode na P3.7, P3.5, P3.4 i P3.3 kao što je prikazano na Slici 2.9.

• Na P3.2 dovesti impuls na nisko u trajanju 1 µs

• Sačekati 4 ms i čekati da se RDY/BSY vrati na “H“

Slika 2.9 Sekvenca signala za brisanje flash-a

Nakon izvršenja predhodne sekvence sve memorijske lokacije u okviru Flash-a su obrisane.

3. Upis X adrese se obavlja pomoću podataka na portu P1. X adresa predstavlja adresu stranice i koristi se prilikom procesa upisa ili čitanja. X adresa predstavlja deo adrese [11:5]. Ostatak [4:0] je Y adresa i odgovara adresi pojedinačnih bajtova u okviru stranice koja je definisana X adresom.

• Prvo je potrebno postaviti TestCode “1101“

19

Page 23: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

• Na P1 treba postaviti 8 bit-ni podatak koji označava X adresu

• Dovesti impuls na XTAL1 u trajanju 100 ns. Adresa će biti prihvaćena sa silaznom ivicom impulsa na XTAL1

Opisani postupak je ilustrovan na Slici 2.10

Slika 2.10 Signali za upis X dela adrese

4. Upis 4K koda pomoću Page Write instrukcije. Jedna stranica sadrži 32 bajta programskog koda. Nakon postavljanja X adrese stranice automatski sa pozitivnim impulsom na XTAL1 inkrementira se i Y adresa (ofset adresa). Nakon postavljanja kompletne adrese pristupa se upisu 1 bajta podataka sa porta P1. Ceo postupak je prikazan u vidu signala na Slici 2.11.

• Nakon postavljanja X adrese predhodno opisanim postupkom, potrebno je postaviti TestCode “1110“ u cilju aktiviranja Page Write instrukcije.

• Na P1 treba dovesti podatak koji se želi upisati.

• Dovesti impuls na P3.2 u trajanju 1 µs za upis prvog bajta sa P1

• Za ostale bajtove (do 32) treba dovoditi impulse na XTAL1 i ponoviti predhodna dva koraka u trajanju 150 µs.

• Sačekati 2 ms i pratiti P3.1 (RDY/BSY) dok ne opadne na nulu i označi da je podatak upisan.

Slika 2.11Signali za upis jedne stranice koda

5. Upis bitova za zaštitu podataka. Bitovi za zaštitu podataka kod AT89S2051 i At89S4051 su prikazani u Tabeli 2.6.

20

Page 24: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Tabela 2.6 Zaštitini bitovi

• Na TestCode pinovima postaviti “1111“ (Slika 2.12)

• Na P1 postaviti bajt sa sigurnosnim bitovima. Bitovi [7:4] kao osigurački bitovi i [1:0] kao bitovi za zaključavanje LB1 i LB2

• Na P3.2 dovesti impuls prema GND u trajanju od 1 µs

• Sačekati 4 ms i pratiti P3.1

Slika 2.12 Signali za upis zaštitnih bitova

6. Sekvenca za gašenje.

• Port P1 postaviti u stanje visoke impedanse

• Vratiti RST/Vpp sa 12 V na Vcc i sačekati 10 µs

• Postaviti XTAL i P3.2 na “L“ i TestCode bitove u stanje visoke impedanse

• RST postaviti na “L“ i sačekati 10 µs

• Ukinuti napon napajanja (Vcc)

Na Slici 2.13 su prikazani talasni oblici signala prilikom izvršavanja sekvence za gašenje.

Slike 2.13 Signali koji se koriste prilikom gašenja

21

Page 25: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

Kompletan dijagram koji sadrži sva vremena prilikom programiranja prikazan je na Slici 2.14.

Slika 2.14 Signali koji se koriste za programiranje mikrokontrolera u paralelnom modu

U okviru Tabele 2.7 je dat prikaz trajanja signala prilikom programiranja mikrokontrolera u okviru paralelnog moda za programiranje.

22

Page 26: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Tabela 2.7 Tajminzi signala za programiranje u paralelnom modu

2.3.2 Programiranje AT89S2051/AT89S4051 u serijskom moduNa Slici 2.15 je prikazan raspored pinova kod AT89S2051 i AT89S4051 mikrokontrolera koji se koriste prilikom programiranja u serijskom modu.

Slika 2.15 Raspored pinova prilikom programiranja u serijskom modu

Programiranje u serijskom modu ovog kontrolera takođe koristi SPI protokol. Treba napomenuti da frekvencija SCK mora biti manja od (XTAL frekvencija)/8. Instrukcije koje su neophodne prilikom programiranja Flash-a u seriskom modu su prikazane u Tabeli 2.8.

23

Page 27: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

Tabela 2.8 Instrukcije za programiranje u serijskom modu

U cilju lakšeg razumevanja programiranja u serijskom modu prikazan je algoritam koji je neophodno ispoštovati:

1. Startna sekvenca mikrokontrolera

• Dovesti napajanje Vcc i GND

• SCK (P1.7) zadržati na GND

• Sačekati 10 µs i postaviti RST na “H“

• Ukoliko je kristal postavljen između XTAL1 i XTAL2 sačekati 10 ms ili ako je doveden spoljašnji takt na XTAL1 (3-24 MHz) sačekati 4 ms.

Na Slici 2.16 je prikazan oblik signala prilikom startne sekvence.

Slika 2.16 Signali u okviru startne sekvence

2. ISP startna sekvenca. Ova sekvenca omogućava prelazak u mod za programiranje ukoliko je mikrokontroler bio u operacionom modu.

• Postaviti SCK na nisko

• MISO postaviti u stanje visoke impedanse “Z“

24

Page 28: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

• Postaviti RST na “H“

Signali koji opisuju ovaj postupak su dati na Slici 2.17.

Slika 2.17 Signali za početak ISP sesije

3. ISP bajt sekvenca. Postupak opisuje upis ili čitanje podataka iz Flash-a (Slika 2.18).

• Prvo se upisuje/čita MSB bit

• MISO se pojavljuje pomoću rastuće ivice SCK takta

• MOSI se postavlja pomoću silazne ivice SCK takta

Slika 2.18 Signali prilikom upisa ili čitanja

4. ISP sekvenca instrukcija. Upis ili čitanje podataka je moguće u bajt ili straničnom formatu. Bajt format sadrži paket od 4 bajta (3 bajta zaglavlje + 1 bajt podataka). Stranični format sadrži paket od 35 bajtova (3 bajta zaglavlje + 32 bajta podataka)

Na Slici 2.19 je prikazan talasni oblik signala.

Slika 2.19 Signali prilikom ISP sekvence instrukcija

5. Sekvenca za gašenje. Ova sekvenca se koristi kada se završi sa programiranjem.

• Postaviti XTAL1 na “L“

• Postaviti RST na “L“

• MOSI dovesti u stanje visoke impedanse shodno Slici 2.20

25

Page 29: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

Slika 2.20 Signali sekvence za gašenje

2.4 Programiranje AT89S8253

Ovu vrstu kontrolera odlikuje 12 KB ISP Flash programske memorije i 2 KB EEPROM memorije za podatke. Kao i kod ostalih mikrokontrolera, prilikom kupovine, memorije su u obrisanom stanju (sve lokacije sadrže FFh). Programska i memorija za podatke su razdvojene: 0000h do 2FFFh su adrese kodne memorije, 000h do 7FFh su adrese memorije za podatke. Oba memorijska prostora se programiraju bajt po bajt ili kao cela stranica. Mikrokontroler AT89S8253 podržava paralelni i serijski mod programiranja.

2.4.1 Programiranje AT89S8253 u paralelnom moduNa Slici 2.21 su prikazani rasporedi pinova mikrokontrolera AT89S8253 koji se koriste prilikom programiranja u paralelnom modu. Algoritam koji se treba ispoštovati u okviru paralelnog moda programiranja je:

1. Startna sekvenca

• Priključiti napajanje između Vcc i GND

• Postaviti RST pin na “H“

• Dovesti takt na XTAL1

2. Postaviti PSEN pin na “L“, ALE pin na “H“ i EA pin na “H“ i sve ostale pinove koji se koriste prilikom programiranja postaviti na “H“.

3. Pin EA/Vpp postaviti na 12 V u cilju dozvole programiranja, brisanja ili verifikacije. Na P3.0 postaviti pull-up otpornik za RDY/BSY operaciju

4. Postaviti odgovarajuću kombinaciju na pinovima P3.3 do P3.7 shodno Tabeli 2.9.

5. Postaviti adresu na pinovima P1.0 do P1.7 i P2.0 do P2.5 i podatke koji se žele upisati na port P0

6. Dovesti impuls na ALE/PROG

7. Ponoviti korake 5 i 6 uz promenu adrese i podataka do upisa 64 bajta u okviru jedne stranice.

8. Nakon poslednje upisanog bita sačekati 5 ms ili pratiti da se RDY/BUSY vrati na “H“

9. Za verifikaciju je potrebno da se postavi bit P3.4 na “L“ i pročita podatak sa P0

10. Ponoviti korake od 4 do 7 uz promenu adrese i podataka sve do kraja upisa kompletnog objektnog fajla.

11. Sekvenca gašenja

• Adresne i ulaze za podatke postaviti u stanje visoke impedanse

• Zabraniti P3.0 koji je korišćen za RDY/BUSY

26

Page 30: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

• Postaviti XTAL1 na “L“

• Postaviti RST i EA pinove na “L“

• Prekinuti napajanje sa Vcc

Slika 2.21 Rasporedi pinova mikrokontrolera AT89S8253-paralelni mod

Tabela 2.9 Instrukcije u okviru paralelnog moda programiranja AT89S8253

27

Page 31: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

2 In-System programiranje mikrokontrolera AT89S5X

2.4.2 Programiranje AT89S8253 u serijskom moduProgramiranje Flash programske memorije je moguće ostvariti i pomoću serijskog moda programiranja, koristeći standardni SPI protokol. Pre početka programiranja je potrebno postaviti RST pin na Vcc. Maksimalna taktna frekvencija SCK treba biti manja od 1/16 frekvencije kristala oscilatora. Algoritam za programiranje u okviru serijskog moda:

1. Standardna startna sekvenca

• Priključiti napajanje na Vcc i GND

• Postaviit RST pin na “H“

2. Dozvoliti serijsko programiranje slanjem instrukcije Programming Enable na MOSI pin (P1.5)

3. Memorijski prostor se može programirati po jedan bajt ili stranica po stranica.

4. Nakon programiranja, može se izvršiti verifikacija odnosno čitanje svake upisane lokacije

5. Na kraju sesije programiranja Sekvenca za gašenje

• Postaviti XTAL1 na “L“

• Postaviti RST pin na “L“ u cilju normalnog operisanja mikrokontrolera

• Ugasiti napajanje na Vcc

Instrukcije koje su neophodne prilikom serijskog moda programiranja Flash memorije prikazane su u Tabeli 2.10.

Tabela 2.10 Instrukcije u okviru serijskog moda programiranja

28

Page 32: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Na Slici 2.22 je prikazan raspored pinova koji se koriste prilikom programiranja u slučaju kada se koristi interni oscilator i slučaj kada se oscilacije dovedu iz spoljnog izvora.

Slika 2.22 Rasporedi pinova mikrokontrolera AT89S8253-serijski mod

Oblik signala primenom serijskog moda programiranja je prikazan na Slici 2.23.

Slika 2.23 Signaliza serijsko programiranje

Tajminzi signala koji e koriste prilikom serijskog moda programiranja su prikazani u Tabeli 2.11.

Tabela 2.11 Tajminzi signala za programiranje u okviru serijskog moda za programiranje

29

Page 33: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranjaBootloader se koristi za upis firmvera u memoriju mikrokontrolera nekog embedded uređaja i njegovo izvršavanje. Proces upisa firmvera ne zahteva dodatni hardver ili programator već koristi postojeću komunikacionu liniju. Bootloader čine dve aplikacije:

• Aplikacija koja se nalazi u okviru memorije ciljnog mikrokontrolera i

• Aplikacija koja se nalazi u okviru host PC-ja i koja omogućava komunikaciju sa aplikacijom u okviru mikrokontrolera

Bootloader aplikacija koja se nalazi na hostu raščlanjuje programski HEX fajl i kopira ga u programsku memoriju ili EEPROM memoriju mikrokontrolera pomoću komunikacione linije i aplikacije koja se nalazi unutar mikrokontrolera.

Kada mikrokontroler izađe iz reset sekvence on testira određene signale i flegove da bi znao koju će sledeću akciju sprovesti. Moze nastaviti sa izvršavanjem korisničke aplikacije sa adrese 0000h, startovati sa neke korisnički definisane adrese ili moze izvršavati bootloader aplikacioni program koji se nalazi u okviru memorije na čipu.

Za izvršavanje bootloader sekvence moraju se ispoštovati sledeći hardverski uslovi (Slika 3.1):

• PSEN signal se uglavnom koristi za kontrolu izvršavanja bootloadera. Ukoliko se ovaj signal na izlazu iz reset stanja postavi na nisko, izvršava se bootloader sekvenca nezavisno od ostalih flegova i uslova koji mogu i moraju biti ispunjeni. Kod nekih mikrokontrolera pin PSEN ne postoji i u tom slučaju hardverski uslov se definiše pomoću standardnih I/O linija koje mogu biti različito konfigurisane od strane korisnika. Način konfigurisanja je različit u zavisnosti od tipa mikrokontrolera.

• ALE mora biti slobodan

• EA mora biti spojen na Vdd

Prilikom upisa podataka unutar bootloadera mora se obratiti pažnja na sledeće:

• PSEN nesme biti stalno vezan na GND. Prilikom korišćenja PSEN treba spojiti na GND preko pulldown otpornika od 1 KΩ.

• BLJB (Boot Loader Jump Bit). Ovaj nebrisivi fleg može se koristiti za pokretanje bootloadera nakon reset sekvence.

Kada je mikrokontroler postavljen da izvršava bootloader sekvencu onda se inicijalizuje hardver mikrokontrolera u cilju uspostavljanja komunikacije sa hostom (PC-jem) koji može programirati programsku ili memoriju za podatke mikrokontrolera ili ih obrisati. Komunikacija između mikrokontrolera i hosta može biti UART, CAN ili USB.

Osnovna verzija bootloader-a je fabrički upisana unutar mikrokontrolera, međutim korisnik je u mogućnosti da ga obriše ili reprogramira korišćenjem standardnog paralelnog moda za programiranje.

Startovanje ISP moda za programiranje pomoću bootloadera iziskuje poštovanje hardverskih i softverskih uslova. Slika 3.1 prikazuje način povezivanja mikrokontrolera sa host računarom.

Hardverski uslovi koje je neophodno ispuniti prilikom rada sa bootloaderom su različiti za mikrokontrolere u HPC pakovanju (kućišta sa većim brojem nožica) i LPC pakovanju (kućišta sa manjim brojem nožica).

Pre startovanja ISP moda za programiranje potrebno je da mikrokontroler bude u normalnom modu (izvršnom). Normalni mod rada zahteva sledeća hardverska podešavanja:

Page 34: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

• EA pin mikrokontrolera mora biti povezan na Vcc. Bootloader je aktivan samo u slučaju kada se koristi interna programska memorija.

• ALE pin ne mora biti upravljan od strane spoljnih signala, tj. treba biti odkonektovan

• PSEN pin takođe treba biti otkonektovan

Slika 3.1 Sprega mikrokontrolera i računara prilikom programiranja

Softverski uslov predstavlja postavljanje nekoliko konfiguracionih bitova koji omogućavaju konfigurisanje bootloadera na najvišem nivou. Jedan od ovih bitova je i BLJB. Ovaj bit je fabrički postavljen da omogućava rad mikrokontrolera nakon prvog reseta u ISP programskom modu. Kada je BLJB aktivan, korisnik ne mora da postavlja uslove koji su opisani u nastavku. Nakon prvog programiranja od strane bootloadera BLJB bit se deaktivira. Svako naknadno programiranje pomoću bootloadera zahteva ponovno aktiviranje ovog bita.

Ukoliko BLJB nije aktivan, a potrebno je programiranje mikrokontrolera, jedini mogući način je ispoštovati sledeću sekvencu: Potrebno je izvršiti hardverski reset mikrokontrolera (RST pin na Vcc) uz uslov da je PSEN pin odveden na GND pomoću pulldown otpornika, nakon toga treba osloboditi PSEN pin i jednom izvršiti hardverski reset.

Potrebno je napomenuti da se opisane operacije mogu izvesti isključivo kada je napajanje kontrolera stabilno.

Mikrokontroleri sa smanjenim brojem pinova (LPC pakovanje mikrokontrolera) prilikom startovanja ISP moda za programiranje iziskuju poštovanje sledećih uslova:

Pre opisa softverskog uslova treba imati na umu da je BLJB bit aktiviran od strane proizvođača i ne može nikad biti deaktiviran od strane korisnika. Jedina mogućnost deaktiviranja je reprogramiranje mikrokontrolera pomoću paralelnog moda programiranja.

Normalno BSB (Boot Status Byte) je aktiviran (0xFF) od strane proizvođača i omogućava rad mikrokontrolera u ISP modu nakon prvog uključenja. Ukoliko je BSB aktivan korisnik ne mora ispoštovati hardverske uslove. BSB se deaktivira (0x00) od strane bootloadera nakon prvog programiranja. Pre sledećeg korišćenja ISP moda programiranja korisnik mora ponovo aktivirati BSB.

U slučaju da BSB nije aktivan jedini način za rad mikrokontrolera u ISP modu je poštovanje hardverskih uslova.

Raspored pinova LPC pakovanja mikrokontrolera koji se koriste za aktiviranje ISP moda programiranja je prikazan na Slici 3.2. Kako u LPC pakovanju ne postoji PSEN pin, za postavljanje

32

Page 35: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

hardverskih uslova se koristi pin P1.0. Prvo je potrebno izvršiti jedan hardverski reset komponente uz uslov da je pin P1.0 postavljen na GND. Nakon toga treba opustiti pin P1.0 i izvršiti jedan hardverski reset.

Slika 3.2 Sprega LPC mikrokontrolera i računara prilikom programiranja

3.1 Memorijska mapa bootloader mikrokontrolera

Memorijska mapa mikrokontrolera se razlikuje u zavisnosti od vrste mikrokontrolera. Mikrokontroler T89C51 poseduje sledeće memorijske oblasti: Korisnička memorija od 64 KB od koje se 1 KB memorije sa najvišom adresom koristi za bootloader program; Hardverski zaštitni bajt HSB koji sadrži konfiguracione informacije i nivoe zaštite (ovi bitovi se koriste za zaštitu prilikom korišćenja paralelnog moda za programiranje); XAF memorijsku oblast za ISP koja obuhvata BSB (Boot Status Byte), SBV (Software Boot Vector) i SSB (Software Security Byte) sigurnosni bitovi za zaštitu koji se koriste prilikom ISP programiranja. Na Slici 3.3 je prikazan izgled memorijskog prostora.

Slika 3.3 Memorijski prostor mikrokontrolera serije AT89C51XX

33

Page 36: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Neki mikrokontroleri sadrže bootloader memorijski prostor u obliku ROM memorije. U tu grupu spadaju mikrokontroleri T89C51RC2, T89C51RB2, T89C51IC2, AT89C51RB2 i AT89C51RC2. Ove komponente odlikuju sledeće memorijske oblasti: Korisnička memorija od 16 do 32 KB; ROM bootloader memorija veličine 2 KB; HSB bajt; XAF oblast kao što je prikazano na Slici 3.4.

Slika 3.4 Memorijski prostor mikrokontrolera koji sadrže ROM

Mikrokontrolere AT89C51RD2 i AT89C51ED2 odlikuju sledeći memorijki prostori: Korisnička memorija od 64 KB; Memorija za podatke EEPROM tipa veličine 2 KB; ROM bootloader oblast 2 KB; HSB bajt; XAF oblast. Na Slici 3.5 je prikazana mapa memorijskog prostora.

Slika 3.5 Memorijski prostor mikrokontrolera koji sadrže ROM i EEPROM

Grupa kontrolera koja sadrži sledeće mikrokontrolere T89C51CC01, T89C51CC02, T89C51AC2, T89C5115, AT89C51CC03 I AT89C51AC3, poseduje memorijske oblasti: Korisnička memorija

34

Page 37: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

veličine 16-32-64 KB; EEPROM memorija za podatke veličine 2 KB; bootloader memorija od 2 KB; HSB bajt; XAF memorijsku oblast za ISP koja sadrži ranije opisane bajtove BSB, SBV, SSB i dodatne bajtove EB (Extra Byte) kao i Pn_F bajtove. Na Slici 3.6 je prikazana memorijska mapa koja karakteriše ovu grupu mikrokontrolera.

Slika 3.6 Memorijski prostor određene grupe mikrokontrolera

Mikrokontrolere AT89C51SND1C, AT89C51SND2C i AT89C5132 karakteriše: Korisnička memorija od 64 KB; Bootloader memorijska oblast od 4 KB; HSB bajt; XAF memorijska oblast sa SBV i SSB bajtovima. Memorijska mapa je prikazana na Slici 3.7.

Slika 3.7 Memorijski prostor određene grupe mikrokontrolera

Mikrokontroleri AT89C5130A, AT89C5131A i AT89C5131 sadrže sledeće memorijske oblasti: Korisnička memorija veličine 16 ili 32 KB; EEPROM memorija za podatke od 1 KB; Bootloader memorija 3 KB; HSB bajt; XAF oblast (SBV i SSB). Slika 3.8 prikazuje memorijsku mapu ove grupe konrolera.

35

Page 38: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.8 Memorijski prostor određene grupe mikrokontrolera

U okviru bootloader memorijskog prostora je učitan Atmelov program. Koji će program biti učitan zavisi od komunikacionog interfejsa za ISP koji podržava mikrokontroler. U nastavku je spisak podržanih protokola:

• RS232 (UART): T89C51RD2, T89C51RC2/RB2/IC2, AT89C51RD2/ED2, T89C51AC2, AT89C51AC3, T89C5115.

• CAN ili RS232: T89C51CC01/CC02 i AT89C51CC03.

• USB: AT89C51SND1C, AT89C51SNDC2, AT89C5130A, AT89C5131, AT89C5132.

Što se tiče veličine bootloader memorijskog prostora on može biti veličine:

1 KB startna adresa FC00h

2 KB startna adresa F800h

4 KB startna adresa F000h

Postupak upisa bootloader programa i aplikacionog programa je opisan na sledećem primeru (Slika 3.9).

Pre operacije programiranja potrebno je pripremiti bafer za programiranje. Bootloader program koji će startovati od adrese F000h do FFFFh može biti lociran i u okviru baferske oblasti od 10000h. Sekvenca operacija koje je potrebno izvršiti je:

1. Učitati bootloader program počev od startne pozicije F000h.

2. Nakon učitavanja bootloader programa potrebno je pomeriti ili iskopirati kod u memorijski prostor počev od adrese 10000h.

3. Popuniti memorijski prostor počev od adrese F000h do FFFFh sa vrednošću FFh.

4. Upisati korisnički program i pritom paziti da se ne premaši adresa F000h.

36

Page 39: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 3.9 Upis bootloader programa

3.2 UART bootloader

Izgled aplikacije koja koristi UART za programiranje Flash memorije mikrokontrolera je prikazan na Slici 3.10. Komande koje se šalju preko serijske linije se interpretiraju pomoću bootloader programa na čipu.

Slika 3.10 Sprega mikrokontrolera i PC-ja pomoću UART-a

Za komunikaciju između host-a (PC) i mikrokontrolera se koristi UART koji karakteriše konfiguracija: 8-bit, none parity, stop 1-bit, flow none, autobaud. Pod autobaud opcijom se podrazumeva da host vrši izbor brzine protoka.

Serijski protokol je baziran na standardnom Intel-ovom HEX tipu zapisa. Intel HEX zapis sadrži ASCII karaktere koji se koriste za reprezentaciju heksadecimalnih vrednosti.

Bootloader Atmel-ovih mikrokontrolera podržava ISP (In-System Programming) programiranje i IAP (In-Application Programming).

37

Page 40: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

ISP programiranje omogućava korisniku programiranje ili reprogramiranje Flash memorije na čipu bez vađenja komponente iz sistema i ne zahteva nikakvu ranije programiranu aplikaciju. UART bootloader upravlja komunikacijom sa hostom preko standardnog serijskog porta.

IAP ili sposobnost samoprogramiranja omogućava reprogramiranje Flash memorije mikrokontrolera bez uklanjanja komponente iz sistema i to za vreme dok sistem (embedded aplikacija) radi. UART bootloader sadrži nekoliko API rutina (Application Programming Interface) koje omogućavaju IAP od strane korisničkog firmvera.

Na Slici 3.11 je prikazan blokovski prikaz UART bootloadera na čipu.

Slika 3.11 UART bootloader

Blok ISP Communication Management sadrži protokol za komunikaciju i upravlja komunikacijom između bootloadera na čipu i hosta (PC). Bootloader na čipu prevodi instrukcije dobijene sa serijske linije u komande za pristup Flash-u (upis, čitanje, brisanje).

User Call Management sadrži nekoliko API poziva koji se mogu koristiti od strane aplikacionog programa radi selektivnog brisanja ili programiranja određenih Flash stranica. Namena ovog procesa je da prevede aplikacione zahteve u opreacije nad Flash memorijom na čipu.

Flash Memory Management blok omogućava pristup Flash-u na najnižem nivou, odnosno omogućava čitanje ili upis u Flash memoriju.

3.2.1 Bootloader kod T89C51RD2 mikrokontroleraRadi lakšeg razumevanja korišćenja ugrađenog bootloadera prilikom programiranja čipa, isti će se razmatrati na primeru mikrokontrolera T89C51RD2.

Flash memorija T89C51 mikrokontrolera je veličine 64 KB i organizovana je u 512 stranica od po 128 bajtova. Ova memorija osim što je programabilna pomoću bootloadera ujedno je i programabilna pomoću paralelnog i serijskog moda ISP. Memorija je organizovana u dve memorijske oblasti (Slika 3.12):

• Korisnička Flash memorija veličine 63 KB i

• Boot Flash memorija veličine 1 KB.

38

Page 41: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 3.12 Memorijski prostor T89C51RD2 mikrokontrolera

XROW oblast je veličine 128 bajtova i sadrži podatke neophodne za bootloader kao što su:

• BSB: pretstavlja boot status bajt. Ukoliko Flash nije programiran, vrednost ovog registra je FFh a u suprotnom je 00h.

• SBV: je softverski boot vektor bajt. Vrednost ovog bajta je ekvivalentna MSB vrednosti početne adrese bootloader firmvera. Fabrički je postavljen na FCh.

• Jedan od najvažnijih bitova je hardverski BLJB bit (Boot Loader Jump Bit). Njegova vrednost može biti modifikovana isključivo pomoću paralelnog moda programiranja. Vrednost ovog bita može biti: 0, Nakon reseta, bootloader se izvršava počev od adrese FC03h. Ovaj mod je najraznovrsniji i podrazumeva najviše beneficija u radu sa Flash-om. 1, Nakon reseta, se izvršava aplikacioni program počev od adrese 0000h.

Default-na konfiguracija bootloader-a i bajtovi proizvođača su dati u okviru Tabele 3.1.

Tabela 3.1 Default-na konfiguracija bootloader-a

Pristup ovim informacijama se može ostvariti pomoću seta API ili ISP komandi.

Bitovi u okviru hardverskog bajta za zaključavanje memorije su prikazani u Tabeli 3.2.

39

Page 42: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Tabela 3.2 Bitovi za zaštitu memorije

Četiri MSB bita u okviru hardverskog bajta za zaključavanje se mogu softverski upisati ili čitati. Oni se često nazivaju i osigurački bitovi. Ostala četiri LSB bita mogu se čitati softverski, ali njihov upis se vrši isključivo pomoću hardvera u okviru paralelnog moda programiranja.

Bootloader poseduje SSB bajt koji ga štiti od pristupa korisnika ili ISP programiranja. SSB bajt se može upisati pomoću komande Program Software Security Bit i to samo na nivou najvišeg prioriteta. Mikrokontroler poseduje tri nivoa zaštite:

• Nivo 0: Nema zaštite (0xFF). Ovo je default-na vrednost i sa nivoa 0 mogi biti upisani zaštitni nivo 1 i nivo 2

• Nivo 1: Nivo zaštite upisa (0x10). U okviru ovog nivoa je moguć upis u Flash memoriju, upis BSB i SBV. Sa ovog nivoa se može upisati samo nivo 2.

• Nivo 2: Nivo zaštite upisa i čitanja (0x00). Na ovom nivou su zabranjeni upis i čitanje Flash memorije. U slučaju pokušaja pristupa bootloader vraća poruku o grešci.

U okviru Tabele 3.3 su prikazani nivoi za zaštitu i operacije u okviru koje su dozvoljene/zabranjene.

Tabela 3.3 Nivoi zaštite i redosled radnji

Reset ovih bitova za zaštitu na default-nu vrednost se može postići jedino komandom za brisanje kompletnog čipa.

40

Page 43: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Po defaultu bootloader program je lociran u okviru adrese od FC00h do FFFFh. Pošto je ovaj prostor u okviru Flash-a i on se može izmestiti. BLLB (Boot Loader Lock Bit) je hardverski bit koji može da zaključa sadržaj bootloader Flash programa. Ova zaštita se može ukinuti jedino pomoću paralelnog moda programiranja. Ukoliko se obriše Flash bootloader program se može ponovo programirati pomoću paralelnog moda programiranja.

Bootloader Flash program se može izvršiti na dva načina:

1. Hardverska metoda. Hardverski uslov EA=1, PSEN=0, ALE=1 ili da budu odkonektovani. PC forsira defaultni bootloader sa adrese FC00h.

2. Kombinacija hardverske i softverske metode. Vrši se testiranje BLJB bita. Postoje dve mogućnosti:

• 0, Nakon reseta, bootloader se izvršava počev od adrese FC03h.

• 1, Nakon reseta, izvršava se aplikacioni program počev od adrese 0000h.

Flash bootloader sadrži program koji kontroliše serijski komunikacioni protokol i ISP komandni dekoder, API rutine koje predstavljaju funkcije na najnižem nivou pozvane od strane bootloadera u cilju poboljšanja pristupa Flash-u.

U cilju korišćenja specifičnih funkcija, postoji mogućnost promene standardnog bootloader-a u korisnički-definisan. Izmenom bootloadera moguće je koristiti različite komunikacione protokole (formate podataka, kriptovanje podataka itd.), različite komunikacione interfejse, različite načine zaštite podataka na Flash-u, provera čeksume Flash-a. Ukoliko se koristi korisnički-definisan bootloader program, on mora biti lociran u Flash memoriji počev od adrese SBV 00h (Slika 3.13). Ovaj bootloader poziva API rutina koja se nalazi u Flash boot loader memoriji.

Slika 3.13 Korisnički-definisan bootloader u okviru memorijske mape

Korisnički bootloader program može biti upisan u Flash na dva načina:

• Korišćenjem paralelnog ISP moda programiranja Flash-a.

• Korišćenjem serijskog ISP moda programiranja Flash-a.

U nastavku su prikazani algoritmi koje bi trebalo ispoštovati prilikom rada sa bootloaderom mikrokontrolera T89C51RD2. U globalu i ostali mikrokontroleri zahtevaju isti algoritam s tim što su neke od vrednosti u okviru registara različite.

Kompletan bootloader algoritam je prikazan na Slici 3.14.

41

Page 44: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.14 Bootloader algoritam

Učitavanje aplikacionog programa. Na početku je potrebno izvršiti inicijalnu konfiguraciju prema algoritmu prikazanom na Slici 3.15.

Slika 3.15 Algoritam koji se koristi prilikom inicijalizacije

42

Page 45: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Nakon programiranja Flash-a BSB mora biti resetovan, tako da će konačna konfiguracija XROW biti kao u Tabeli 3.4.

Tabela 3.4 Konfiguracija XROW

Izvršenje aplikacionog programa. Inicijalizacija koja se mora izvršiti prilikom izvršenja aplikacionog programa je prikazana na Slici 3.16.

Slika 3.16 Inicijalizacija prilikom izvršenja aplikacionog programa

Obnavljanje aplikacionog programa. Inicijalizacija i algoritam koji se moraju ispoštovati u cilju obnavljanja aplikacionog programa su prikazani na Slici 3.17.

43

Page 46: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.17 Inicijalizacija i algoritam koji se moraju ispoštovati u cilju obnavljanja aplikacionog programa

Nakon izvršavanja ove operacije finalna konfiguracija izgleda kao u Tabeli 3.5.

Tabela 3.5 Ikonfiguracija nakon izvršene operacije obnavljanja aplikacionog programa

Učitavanje korisnički-definisanog bootloadera u prazan mikrokontroler se obavlja pomoću uslova prikazanih na Slici 3.18.

44

Page 47: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 3.18 Algoritam učitavanja korisnički-definisanog bootloadera

Konačna konfiguracija je prikazana u Tabeli 3.6.

Tabela 3.6 Konfiguracija nakon izvršenog učitavanja korisnički-definisanog bootloadera

Umetanje korisnički-definisanog bootloadera u mikrokontroler koji već ima upisan neki bootloader. Procedura je opisana na Slici 3.19.

45

Page 48: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.19 Umetanje korisnički-definisanog bootloadera

U okviru Tabele 3.7 je prikazana konačna konfiguracija.

Tabela 3.7 Konfiguracija nakon izvršenog umetanja korisnički-definisanog bootloadera

Procedura pri upisu inicijalnog aplikacionog programa pomoću korisnički-definisanog bootloadera je prikazana na Slici 3.20.

46

Page 49: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 3.20 Procedura pri upisu inicijalnog aplikacionog programa

Nakon izvršenog upisa konačna konfiguracija je prikazana u Tabeli 3.8.

Tabela 3.8 Konfiguracija nakon upisa inicijalnog aplikacionog programa

Osvežavanje aplikacionog programa pomoću korisnički-definisanog bootloadera se obavlja pomoću procedure koja je prikazana na Slici 3.21.

47

Page 50: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.21 Osvežavanje aplikacionog programa

Konačna konfiguracija nakon programiranja će izgledati kao u Tabeli 3.9.

Tabela 3.9 Konfiguracija nakon osvežavanja aplikacionog programa

3.2.2 ISP Bootloader protokol za programiranjeNakon sekvence reseta i startovanja izvršenja bootloadera obavezno se mora proći kroz korak inicijalizacije komunikacije između hosta i bootloadera na čipu. Inicijalizacija se započinje tako što bootloader program unutar mikrokontrolera čeka na autobaud sekvencu. Nakon završene inicijalizacije protokolom prilikom komunikacije se upravlja od strane hosta. Ovaj protokol je identičan za sve tipove UART bootloader mikrokontrolera.

48

Page 51: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

3.2.2.1 Inicijalizacija komunikacije.Host inicijalizuje komunikaciju slanjem karaktera “U“ sa ciljem da pomogne bootloader-u da izračuna baudrate. Ovaj postupak slanja je prikazan na Slici 3.22.

Slika 3.22 Inicijalizacija komunikacije između hosta i bootloadera mikrokontrolera

Bootloader podržava širok opseg brzina prenosa, ujedno prihvata širok opseg frekvencija oscilatora. U Tabeli 3.10 su prikazane frekvencije oscilatora i odgovarajuće brzine prenosa.

Tabela 3.10 Brzine prenosa podataka između hosta i bootloadera

3.2.2.2 Komandni protokol.Sve komande se šalju pomoću istog protokola. Prilikom slanja komandi od strane hosta obavezno se koristi slanje ehoa iste komande od strane bootloadera. Slika 3.23 opisuje postupak slanja komande sa ehom, dok je u okviru Tabele 3.11 dat spisak komandi koje se mogu koristiti prilikom programiranja mikrokontrolera. Isprekidana linija označava komande sa efektom ehoa.

49

Page 52: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.23 Slanje komande sa ehom

Tabela 3.11 Komande koje se mogu koristiti prilikom programiranja

50

Page 53: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Programska komanda za upis podataka u Flash ili EEPROM . Ova komanda se koristi za sledeće okvire:

• Programiranje Flash-a sa korisničkim podacima

• EOF ili Atmel okvir

• Konfiguracija Oscilatora

• Programiranje konfiguracionih bitova

• Baud rate okvir

Slika 3.24 Upis podataka u Flash

Primer programiranja:

Podaci za programiranje (upisati 55h na adresu 0010h u okviru Flash-a)HOST : 01 0010 00 55 9ABOOTLOADER : 01 0010 00 55 9A . CR LFProgramiranje Atmel-ove funkcije (upisati SSB na nivo2)HOST :02 0000 03 05 01 F5BOOTLOADER :02 0000 03 05 01 F5 . CR LFPodešavanje oscilatora (16 MHz)HOST :01 0000 02 10 EDBOOTLOADER :01 0000 02 10 ED . CR LFOkvir za upis (upisati u BSB 55h)HOST :03 0000 03 06 00 55 9FBOOTLOADER :03 0000 03 06 00 55 9F . CR LF

Komanda za proveru praznog prostora u okviru Flash-a ili EEPROM-a . Na Slici 3.25 je prikazan algoritam protokola koji služi za proveru praznog prostora u okviru memorije mikrokontrolera.

51

Page 54: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.25 Provera praznog prostora

Primer su sledeće komande:Provera praznog prostora HOST :05 0000 04 0000 7FFF 01 78BOOTLOADER :05 0000 04 0000 7FFF 01 78 . CR LFPrazan prostor počev od adrese xxxxHOST :05 0000 04 0000 7FFF 01 78BOOTLOADER :05 0000 04 0000 7FFF 01 78 xxxx . CR LF

Komanda za čitanje podataka iz Flash-a ili EEPROM-a

Slika 3.26 Čitanje iz flash-a

52

Page 55: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Primer:Prikaz podataka počev od adrese 0000h do 0020hHOST :05 0000 04 0000 0020 00 D7BOOTLOADER :05 0000 04 0000 0020 00 D7BOOTLOADER 0000=-----data---- CR LF (16 podataka)BOOTLOADER 0010=-----data---- CR LF (16 podataka)BOOTLOADER 0020=data CR LF (1 podatak)

Funkcija čitanja informacija o proizvođaču i informacija o konfiguraciji.

Ova funkcija je zajednička za sledeće operacije: Funkcija čitanja i u okviru EOF ili Atmel bitova.

Slika 3.27 Čitanje informacija o proizvođaču

PrimerFunkcija čitanja (čitanje SBV)HOST :02 0000 05 07 02 F0BOOTLOADER :02 0000 05 07 02 F0 Value . CR LFFunkcija čitanja Atmelovih bitova (čitanje verzije bootloadera)HOST :02 0000 01 02 00 FBBOOTLOADER :02 0000 01 02 00 FB Value . CR LF

Komanda za brisanje Flash-a

Ova komanda omogućava brisanje Flash-a i to:

• Brisanje kompletnog čipa ili

• Brisanje određenog bloka

Na Slici 3.28 je data ilustracija izvršenja komande za brisanje Flash-a.

53

Page 56: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.28 Brisanje flash-a

Primer:Brisanje kompletnog čipaHOST :01 0000 03 07 F5BOOTLOADER :01 0000 03 07 F5 .CR LFBrisanje bloka1 (od 8k do 16k)HOST :02 0000 03 01 20 DABOOTLOADER :02 0000 03 01 20 DA . CR LF

Startovanje aplikacije direktno iz bootloadera se može ostvariti izvršavanjem određene sekvence. Moguće su dve opcije:

• Startovanje sa reset impulsom korišćenjem watchdog-a, gde bootloader uđe u petlju i čeka sve dok watchdog ne resetuje komponentu.

• Startovanje aplikacije bez reseta, skokom na adresu 0x0000 koja se koristi za start aplikacije bez upotrebe reseta.

Primer:Start sa reset impulsomHOST : 02 0000 03 03 00 F8BOOTLOADER : 02 0000 03 03 00 F8Start bez resetaHOST : 04 0000 03 03 01 00 00 F5BOOTLOADER : 04 0000 03 03 01 00 00 F5

3.2.3 IAP programiranje/samoprogramiranjeBootloader podržava nekoliko API rutina koje se mogu pozvati iz korisničke aplikacije i na taj način omogućiti IAP način prograiranja. Ove API rutine se izvršavaju od strane bootloadera. Korisnik prilikom korišćenja API poziva mora koristiti odgovarajući set Flash_api rutina koje trebaju biti linkovane iz aplikacije. Flash_api rutine se razlikuju u zavisnosti od vrste mikrokontrolera, međutim neke od rutina mogu biti identične.

Aplikacija poziva neku API rutinu pomoću postavljanja registara R1, ACC, DPTR0 i DPTR1. Svi pozivi se ostvaruju preko zajedničkog interfejsa USER_CALL na adresi FFF0h. Pre nego što se

54

Page 57: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

izvrši skok mora se postaviti bit ENBOOT u okviru AUXR1 registra. Svaki skok na USER_CALL se izvršava pomoću LCALL instrukcije i nakon izvršenja se mora vratiti u aplikaciju.

Treba napomenuti da se pre skoka, takođe moraju zabraniti interapti, a nakon povratka u aplikaciju ponovo se moraju dozvoliti.

Postoji nekoliko tipova API komandi:

• Čitanje i upis Flash i EEPROM memorije

• Čitanje konfiguracionih i proizvođačkih informacija

• Upis konfiguracionih informacija

• Brisanje Flash-a

• Startovanje bootloadera

Spisak svih API komandi koje se mogu koristiti kod T89C51RD2 mikrokontrolera je dat u okviru Tabele 3.12.

Tabela 3.12 API komande mikrokontrolera T89C51RD2

55

Page 58: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

3.3 USB bootloader (AT89C5131, AT90xx)

Određeni mikrokontroleri sadrže fabrički konfigurisane USB bootloadere u okviru boot dela memorije na čipu. Ovi USB bootloaderi omogućavaju ISP i IAP programiranje pomoću USB host kontrolera bez vađenja komponente iz sistema ili bez dodatnog interfejsa za programiranje. Komunikaciju između hosta i mmikrokontrolera, kao i operacijama za čitanje/upis Flash-a i EEPROM-a obavlja USB bootloader. Na Slici 3.29 je prikazano okruženje za USB programiranje pomoću bootloadera.

Slika 3.29 Programiranje pomoću USB bootloadera

USB bootloader sadrži API (Application Programming Interface) rutine koje omogućavaju IAP programiranje. Na Slici 3.30 je prikazan blokovski izgled delova bootloadera.

Slika 3.30 Blokovski izgled USB bootloadera

Blok ISP Communication management upravlja komunikacijom između bootloadera na čipu i hosta. U okviru ovog bloka je implementiran USB protokol.

U okviru bloka User Call Management se nalazi nekoliko API poziva koji omogućavaju da aplikacioni program može selektivno da obriše ili programira nekoliko strana Flash memorije.

56

Page 59: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Flash Memory Management omogućava upravljanje sa Flash-om na najnižem nivou (čitanje ili upis u Flash).

3.3.1 ISP programiranje pomoću USB bootloaderaZa startovanje ISP boot procesa potrebno je ispoštovati određene uslove:

• Hardverski uslov (HPC ili LPC mikrokontroleri sa smanjenim brojem pinova)

• Regularni softverski boot proces.

Što se tiče startovanja IAP procesa programiranja, potrebno je koristiti neki od API funkcijskih poziva koje podržava ciljni mikrokontroler.

Poštovanjem hardverskih uslova forsira se izvršavanje bootloadera iz reset sekvence. Što se tiče hardverskog uslova za HPC mikrokontrolere potrebno je ispoštovati da EA=1, PSEN=0 za uzlaznu ivicu RESET pina. Radi zastite PSEN pin se mora odvesti prema GND preko pulldown otpornika od 1 KΩ. Nakon reset sekvence potrebno je odspojiti PSEN od GND. Na Slici 3.31 je prikazan algoritam koji opisuje uslove koji se moraju ispoštovati radi startovanja korisničke aplikacije, korisničkog bootloadera ili standardnog bootloadera.

Slika 3.31 Algoritam koji opisuje startovanje odgovarajućeg bootloadera

Default-ni uslov za LPC mikrokontrolere je da port P1 mora biti ekvivalentan FEh. Korisnik ima mogućnost promene ovog uslova i to na portove: P3 i P4 (bit 0 i bit 1). Ovi hardverski uslovi su upisani u tri bajta i to: P1_CF, P3_CF i P4_CF. Ovi bajtovi se mogu modifikovati pomoću seta API funkcija ili ISP komande. Na Slici 3.32 je prikazan algoritam koji se treba ispoštovati prilikom startovanja boot procesa kod LPC mikrokontrolera.

57

Page 60: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.32 Startovanje bootloadera kod LPC mikrokontrolera

Softverski boot proces se startuje od memorijske lokacije [FF]00h. Startna dresa USB boot programa je najniža adresa FM1 memorijskog prostora [FC]00h, dok je korisnički bootloader smešten počev od adrese [SBV]00h memorijskog prostora FM0 (Slika 3.30). Odabir koji će se bootloader program koristiti se vrši pomoću SBV (Software Boot Vector).

Slika 3.33 Memorijska mapa

USB standard na fizičkom nivou specificira transfer podataka preko serijskog USB bus-a. USB specifikacija sadrži i nekoliko standardnih klasa i sub-klasa. Ove klase proizvođač koristi za implementaciju USB bus-a između PC-ja i mikrokontrolera. Najčešće su implementirane USB specifikacije kao što su tajming, handshake i automatski replay kao hardver a USB klase i sub-klase kao softver. Standardna USB topografija je prikazana na Slici 3.34.

58

Page 61: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 3.34 Veza mikrokontrolera i PC-ja

USB bus se koristi za prenos informacija koje imaju sledeću konfiguraciju:

• 48 MHz taktnu frekvenciju za USB kontroler.

• USB DFU (Device Firmware Upgrade) 32 bit-nu informaciju

Bootloader sadrži funkciju koja automatski podešava PLL frekvenciju na 48 MHz nezavisno od toga koji se kristal koristi na XTAL.

DFU (Device Firmware Upgrade) predstavlja mehanizam koji je implementiran sa ciljem da omogući modifikaciju firmvera određenog sistema kojim upravlja mikrokontroler. Zbog nepouzdanosti izvršavanja DFU operacije tokom normalnog rada mikrokontrolera, poželjno je tokom DFU procesa obustaviti sve procese tokom normalnog rada. To znači da uređaj, prilikom DFU operacije, menja svoj mod rada (štampač nije štampač dok se vrši upgradeovanje njegovog firmvera). Zbog toga, komponente koje podržavaju DFU nisu sposobne da samostalno promene mod operisanja, već zahtevaju intervenciju nekog eksternog uređaja (host ili čovek).

Za proces upgrade-ovanja se koristi set od 7 standardnih DFU zahteva koji su prikazani u okviru Tabele 3.13.

Tabela 3.13 DFU zahtevi

Set DFU deskriptora sadrži:

• DFU deskriptor komponente

• Deskriptor za jedno konfigurisanje

• Deskriptor za jedan interfejs

DFU deskriptor komponente je prikazan samo u modu podešavanja DFU deskriptora. Kod DFU klase je prikazan u okviru bDeviceClass polja u okviru ovog deskriptora.

U Tabeli 3.14 su prikazani DFU modovi deskriptora komponente.

59

Page 62: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Tabela 3.14 DFU modovi

DFU konfiguracioni deskriptor je identičan kao i standardni konfiguracioni deskriptor, sa izuzetkom bNumlnterfaces poljem koje mora sadržati vrednost 01h.

DFU deskriptor za interfejs odnosi se samo na interfejs koji je dostupan prilikom DFU moda. Vrednost bInterfaceNumber polja je uvek nula. U Tabeli 3.15 su dati interfejs deskriptori.

Tabela 3.15 Interfejs deskriptori

Protokol komandi u okviru bootloadera sadrži:

• Inicijalizacija komunikacije

• Programiranje EEPROM-a ili Flash-a

• Čitanje EEPROM-a ili Flash-a

• Programiranje konfiguracionih informacija

• Čitanje konfiguracionih ili proizvođaćkih informacija

• Brisanje Flash-a

• Startovanje aplikacije.

Spisak komandi koje se koriste prilikom USB DFU je prikazan u Tabeli 3.16.

60

Page 63: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Tabela 3.16 DFU komande

3.3.1.1 Proces programiranja Flash-a ili EEPROM-a.Download-ovanje slike Firmwer-a se vrši pomoću control-write transfera koji je iniciran od strane DFU_DNLOAD zahteva. U okviru control-write transfera host šalje bajtove ka komponenti počev od bMaxPacketSize0 do wTranferSize. Host prati svaki download-ovan blok pomoću DFU_GETSTATUS zahteva.

Poznato je da se firmveri razlikuju u zavisnosti od upotrebljenog mikrokontrolera, specifičnosti sistema, proizvođača itd. U okviru slike firmera se nalaze podaci kao što su ciljne adrese, veličina zapisa i sve informacije koje su neophodne za upgrade-ovanje. Obaveza proizvođača ili razvoja firmvera je da obezbede da njihovi uređaji mogu prepoznati i koristiti podatke koji su enkapsulirani u okviru slike firmvera. Izuzetak čine fajlovi za DFU dodatak. Sadržaj ovih fajlova je nevezan za host. U okviru Tabele 3.17 su prikazani fajlovi za DFU podršku.

Tabela 3.17 DDFU fajlovi

61

Page 64: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Sliku firmvera čine sledeće komponente:

• 32 bajtne komande

• X bajtova: gde je X broj bajtova (00h) dodat nakon prvog značajnog bajta firmvera. Broj X se računa od početka firmvera na flash stranici. X=start_address[32]. Na primer, ako je startna adresa 00AFh (175d), X=175[32]=15.

• Firmver

• 16 bajtova DFU dodatak

Zahtev za DFU od strane hosta je prikazan u Tabeli 3.18.

Tabela 3.18 Zahtev za DFU

Komanda upisa je prikazana u Tabeli 3.19. Ova komanda je veličine 6 bajtova. Da bi se komanda uklopila u USB protokol potrebno je dopuniti komandu sa 26 bajta (32-6=26).

Tabela 3.19 Komanda za upis

Nakon izvršene komande upisa može se vršiti download-ovanje firmvera. Prilikom download-ovanja se mora voditi računa o veličini Flash stranice (128 bajtova).

DFU dodatak je veličine 16 bajtova i dodaje se odmah nakon zadnjeg bajta programa. Ovaj dodatak se rezerviše za ponovnu upotrebu.

Na Slici 3.35 je prikazan primer download-ovanja firmvera. Host šalje DFU_DNLOAD zahtev sa praznim wLength poljem (ZLP-Zero Length Packet) u cilju transfera fajla slike firmvera.

Slika 3.35 Download-ovanje firmvera

3.3.1.2 Čitanje podataka iz Flash-a ili EEPROM-aOperacija čitanja Flash-a ili EEPROM-a se sastoji iz dva koraka:

• DFU_DNLOAD zahtev sa komandom čitanja (6 bajtova)

62

Page 65: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

• DFU_UPLOAD zahtev koji je u saglasnosti sa predhodnom komandom

Host šalje zahtev za čitanjem koji je prikazan na Slici 3.36.

Slika 3.36 Operacija DFU_DNLOAD

U polju za podatke se nalazi Display_data komanda dužine 6 bajtova. Ova komanda je prikazana u Tabeli 3.20.

Tabela 3.20 Display_data komanda

Nakon ovog zahteva host upućuje drugi zahtev, odnosno zahtev za DFU Upload-om.

Mikrokontroler daje odgovor na ovaj zahtev slanjem firmver-a startujući od startne adrese do krajnje adrese koje su specificirane predhodnim zahtevom. Izgled ovog transfera je prikazan na Slici 3.37.

Slika 3.37 Operacija DFU_UPLOAD

Ukoliko host pošalje komandu za čekiranje praznog prostora (Blank Check Command) sa DFU_GETSTATUS, mikrokontroler će proveriti stanje i poslati status. Ukoliko je odgovor mikrokontrolera OK, memorija je prazna i komponenta čeka na sledeći host zahtev. Ako je status “errCHECK_ERASED“, memorija nije prazna. Mikrokontroler čeka zahtev DFU_UPLOAD kako bi poslao prvu adresu na kojoj podatak nema vrednost 0xFF.

3.3.1.3 Proces čitanja konfiguracionih i proizvodnih informacijaNa samom startu operacije čitanja, host šalje zahtev DFU_DNLOAD. U sklopu ove komande šalje se i komanda za čitanje Read_command. Na Slici 3.38 je prikazan izgled ovog zahteva i struktura Read_command komande.

63

Page 66: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.38 Proces čitanja konfiguracionih i proizvodnih informacija

U okviru Read_command komande se zada vrednost koja se želi pročitati, na primer za čitanje verzije bootloadera potrebna je sekvenca 0x05 0x00 0x00.

Nakon ove komande host šalje zahtev DFU_GETSTATUS. Mikrokontroler na ovaj zahtev može imati dva odgovora.

Prvi je za slučaj da je čip zaštićen od pristupa programu. Odgovor koji vraća mikrokontroler je “err_VENDOR“.

Ukoliko je pristup dozvoljen, bootloader šalje odgovor “OK“.

Host može nastaviti sa slanjem DFU_UPLOAD zahteva samo ukoliko je predhodni odgovor bio OK. Nakon ovog zahteva bootloader mikrokontrolera vraća zahtevanu informaciju veličine jednog bajta. Izgled ovog scenarija je prikazan na Slici 3.39.

Slika 3.39 Proces čitanja konfiguracionih i proizvodnih informacija

3.3.1.4 Brisanje Flash memorijeStartovanje brisanja Flash-a se započinje slanjem DFU_DNLOAD zahteva od strane hosta. U sklopu ovog zahteva šalje se i Write_command komanda veličine dva bajta. U Tabeli 3.21 je prikazan izgled Write_command komande.

Tabela 3.21 Write_command

Nakon toga šalje se zahtev DFU_GETSTATUS. Bootloader može vratiti hostu dva odgovora:

“err_WRITE“ u slučaju da je čip zaštićen i

“OK“ za slučaj da je dozvoljen pristup

64

Page 67: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

3.3.1.5 Startovanje aplikacijeNakon update-ovanja firmvera, bootloader omogućava startovanje aplikacije pomoću određene komande. Moguće su dve opcije:

• Startovanje aplikacije uz pomoć hardverskog reseta korišćenjem watchdog-a.

• Startovanje aplikacije bez reseta. Direktni skok na adresu 0000h.

Za start aplikacije, host šalje DFU_DNLOAD zahtev sa informacijom start_type u okviru polja za podatke (3 do 5 bajta). Odmah nakon ovog zahteva šalje se drugi DFU_DNLOAD zahtev koji sadrži jednu od dve moguće opcije startovanja. Izgled opisanog postupka je prikazan na Slici 3.40.

Slika 3.40 Startovanje aplikacije

Nakon poslatih sekvenci bootloader ne vraća nikakav odgovor.

3.3.2 IAP programiranje pomoću USB bootloaderaBootloader deo memorije je jedino sposoban da izvrši operaciju upisa u Flash memoriju na čipu, odnosno da dekodira SPM instrukcije. Shodno tome, u okviru bootloader dela memorije su smešteni Flash drajveri. USB bootloader podržava nekoliko API poziva koji aplikaciji omogućavaju pristup Flash drajverima na najnižem nivou. Na Slici 3.41 su prikazani USB bootloader API pozivi.

Slika 3.41 API pozivi USB bootloader-a

65

Page 68: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Ovi API pozivi omogućavaju sledeće operacije:

• Brisanje stranice

• Upis u stranicu

• Učitavanje reči u okvir privremene bafer stranice.

API pozivi su locirani na apsolutnim adresama u okviru USB bootloadera i kao parametre imaju određene vrednosti u okviru registara. Ovi parametri su kompatibilni sa pozivima C kompajlera i mogu se koristiti direktnim pozivima deklarisanim kao funkcijskim pointerima. Na Slici 3.42 je dat primer API poziva.

Slika 3.42 Primer API poziva

3.4 DES Bootloader

Obnavljanje firmvera kod AVR mikrokontrolera se može obaviti uz odgovarajuću zaštitu. Za šifrovanje podataka se koristi DES metoda (Data Encryption Standard). Izgled procesa enkripcije je prikazan na Slici 3.43.

Slika 3.43 DES metoda enkripcije

Programska memorija AVR mikrokontrolera je podeljena u dve sekcije: bootloader sekciju (BLS) i aplikaciona sekcija. Obe sekcije poseduju posebne bitove za zaključavanje u cilju zaštite od čitanja

66

Page 69: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

ili upisa. Na ovaj način postignuta je zaštita podataka u okviru BLS a u isto vreme je i omogućeno obnavljanje koda u okviru aplikacione sekcije.

Problem se javlja sa firmverom koji se još nije upisan u programsku memoriju i pre nego što su postavljeni bitovi za zaključavanje. Korišćenjem kriptografskih metoda može se prevazići ovaj problem tako što su podaci, koji trebaju biti upisani u Flash ili EEPROM, sve vreme zaključani. Ideja je da se podaci zaštite prilikom formiranja koda a da se dekodiraju nakon download-ovanja u okvir ciljne komponente. Ova metoda ne poseduje zaštitu od neovlašćenog kopiranja firmvera, ali su informacije nekorisne bez odgovarajućeg ključa za dekodiranje. Ključ za dekodiranje se isključivo nalazi na nekoj lokaciji izvan programskog okruženja a u okviru AVR mikrokontrolera. Ključ ne može biti obnovljen od strane zaključanih podataka. Znači, jedini način za pristup zaključanim podacima je korišćenje odgovarajućeg ključa. Na Slici 3.44 je prikazan primer učitavanja inicijalnog firmvera (prvo punjenje u toku proizvodnje) i kasnijeg update-ovanja sa novom verzijom firmvera (nakon prodavanja).

Slika 3.44 Primer učitavanja inicijalnog firmvera

Prilikom proizvodnje mikrokontroler se opremi sa bootloaderom, ključem za dešifrovanje i aplikacionim kodom (firmverom). Nakon unosa ovih podataka postavljaju se bitovi za zaključavanje firmvera unutar Flash memorije.

Nakon programiranja komponenta se isporučuje krajnjem korisniku. Bitovi za zaključavanje čuvaju firmver zaštićen u okviru komponente.

Kada je razvijena nova verzija firmvera, može se pristupiti procesu zamene firmvera u okviru komponente. Zaključani firmver se isporučuje korisniku, koji može izvršiti postupak obnove. Zaključani firmver se učitava u mikrokontroler i unutar njega se pomoću ključa dešifruje.

67

Page 70: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

3.5 Samoprogramiranje

Ovaj deo opisuje mogućnost samoprogramiranja Atmel AVR mikrokontrolera sa SPM memorijom (Store Program Memory). Samoprogramiranje omogućava programiranje Flash i EEPROM memorije bez upotrebe eksternog programatora. Ovo se postiže upotrebom bootloader programa koji se nalazi unutar boot sekcije Flash memorije. Kao što je već naglašeno bootloader komunicira sa host PC-jam sa jedne strane i mikrokontrolerom na drugoj straini.

3.5.1 Organizacija memorijeFlash memorija mikrokontrolera je podeljena u dve sekcije. Jedan deo je aplikacioni, a drugi bootloader. Aplikacioni deo sadrži glavni programski kod, dok bootloader sadrži kod za samoprogramiranje. SPM instrukcije jedino mogu biti izvršene od strane bootloader sekcije. Sa druge strane, Flash memorija je podeljena u stranice sa po 32, 64 ili 128 reči u okviru stranice. Na primer, komponenta sa 8 KB Flash-a i stranicama od 32 reči (64 bajta) ima ukupno 128 stranica. Organizacija memorije je prikazana na Slici 3.45.

Slika 3.45 Memorijska mapa

Veličina bootloader sekcije može se odrediti pomoću dva BOOTSZx osigurača. Ovi osigurači omogućavaju izbor jedne od četiri predefinisane veličine. Promena vrednosti ovih osigurača se može ostvariti jedino pomoću serijskog ili paralelnog moda programiranja mikrokontrolera.

Ukoliko postoji bootloader, isti može biti pozvan od strane aplikacionog koda korišćenjem poziva, programskih skokova ili programiranjem BOOTRST osigurača. Kada je ovaj osigurač programiran, mikrokontroler će nakon reseta umesto sa adrese 0000h startovati izvršenje sa bootloader sekcije. BOOTRST osigurač se, takođe, jedino može programirati pomoću serijskog ili paralelnog moda programiranja.

Slika 3.46 Sekcije u okviru memorije

68

Page 71: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Flash memorija je takođe podeljena na dve fiksne oblasti: RWW (Read-While-Write) i NRWW (No- Read-While-Write). Veličina NRWW oblasti je ekvivalentna najvećoj mogućoj veličini bootloader sekcije. Na ovaj način bootloader se uvek nalazi u okviru NRWW dela memorije. Podela memorije je prikazana na Slici 3.46.

Kombinacijom vrednosti BOOTSZx osigurača javljaju se četiri moguće kombinacije raspodele memorijskog prostora. Ove kombinacije su prikazane na Slici 3.47.

Slika 3.47 Moguće raspodele memorijskog prostora

Razlika između ovih delova je ta što je pristup NRWW memoriji dozvoljen za vreme dok se obnavlja RWW sekcija, a u suprotnom nije moguće. Kada se NRWW oblast obnavlja (slučaj update-ovanja bootloader-a), mikrokontroler je za sve vreme trajanja operacije u stanju halt (zaustavljen).

Ova sposobnost omogućava mikrokontroleru da nastavi sa izvršenjem nekog kritičnog koda ukoliko se zahteva obnavljanje RWW sekcije.

Mikrokontroleri Atmega163 i Atmega323 ne poseduju NRWW i RWW sekcije. Kod ovih komponenti prilikom obnavljanja koda u okviru Flash memorije mikrokonroler mora biti u stanju halt.

3.5.2 SPM instrukcijeSve operacije samoprogramiranja se izvršavaju pomoću SPM instrukcija. Selektovanje određene operacije se obavlja pomoću SPMCR registra (ili u nekim komponentama SPMCSR).

69

Page 72: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Organizacija ovog registra je prikazana na Slici 3.48.

Slika 3.48 SPMCR registar

Radi dozvole korišćenja SPM funkcija potrebno je setovati bit SPMEN i držati ga postavljenog za sve vreme izvršenja SPM instrukcije. Ovo predstavlja preventivu od neželjenog updateovanja Flash memorije. Izvršenje SPM instrukcije se obavlja u okviru četiri taktna ciklusa. Naredna četiri bita se koriste za selekciju neke od SPM funkcija. U nastavku su prikazane SPM funkcije.

Brisanje stranice. Svako obnavljanje memorije se obavlja stranicu po stranicu. Pre upisa novih podataka stranica se mora obrisati.

Za selekciju stranice koja se briše i bajtova u okviru stranice koristi se Z registar. Niži bitovi Z registra označavaju bajtove u okviru stranice. Ukoliko se briše kompletna stranica, niži bitovi Z registra se mogu ignorisati. Za izvršenje instrukcije brisanja stranice potrebno je u okviru SPMCR registra postaviti bitove PGERS i SPMEN. Nakon obavljenog procesa brisanja SPMEN bit će se automatski obrisati.

Učitavanje u bafer stranice. Upis podataka u okvir memorije zahteva prvo upis u bafer stranice. Bafer stranice je poseban write-only deo memorije (nije SRAM) koji sadrži jednu privremenu stranicu. Bafer se popunjava reč po reč. Nakon što se popuni ceo bafer, pomoću jedne instrukcije se ceo kopira u memoriju.

Z registar se koristi za selekciju reči koja će biti upisana u bafer. Na Slici 3.49 je prikazan Z registar i bafer stranice od 32 eči.

Slika 3.49 Z registrar i bafer stranice

Za upis reči u bafer je potrebno da se podatak nalazi u R1 i R0 registrima. Nakon toga, postavi se vrednost u Z registar i postavi se samo SPMEN bit u SPMCR registru.

Upis stranice. Kada je bafer stranice napunjen, sadržaj bafera se mora preneti u okvir Flash memorije. Za selekciju stranice koja se upisuje se koristi Z registar. Potrebno je postaviti PGWRT i SPMEN bitove u SPMCR registru. Korišćenje Z registra u cilju upisa stranice je prikazano na Slici 3.50.

Fleg zauzetosti RWW sekcije. U slučaju da se vrši upis ili brisanje stranice u RWW delu memorije, RWWSB fleg u okviru SPMCR je postavljen od strane hardvera. Ovaj fleg obaveštava da je pristup RWW sekciji zabranjen. Kada se završi započeta SPM operacija ovaj fleg se mora softverski obrisati postavljanjem RWWSRE i SPMEN bitova.

70

Page 73: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Slika 3.50 Z registrar prilikom procesa upisa stranice

Bitovi za zaključavanje. Oba dela memorije, aplikacioni i bootloader mogu biti zaštićeni i to na različitim nivoima pristupa. Za zaštitu boot sektora se koriste četiri nivoa pristupa (Tabela 3.22).

Tabela 3.22 Modovi za zaštitu podataka

Za programiranje bitova za zaključavanje potrebno je učitati željenu kombinaciju u registar R0, postaviti BLBSET i SPMEN bitove u okviru SPMCR registra i na taj način izvršiti SPM instrukciju koja traje četiri ciklusa.

3.5.3 Interapti Tokom upisa u RWW sekciju mogu se koristiti interapti, ali predhodno je potrebno softverski zabraniti bilo koji drugi pristup RWW sekciji. Interapt rutina koja se izvršava dok se updatejuje RWW deo mora biti smeštena u NRWW sekciji. Formiraju se dve kopije interapt vektorskih tabela. Za implementiranje dve interapt vektor tabele, aplikacija može koristiti IVSEL bit u okviru GICR registra. Jedna se implementira u aplikacioni deo a druga u bootloader sekciju (NRWW). Na ovaj način se omogućava aplikaciji da nastavi sa kritičnim procesom, kao što je bezbedonosno nadgledanje, tokom samoprogramiranja.

SPM interapt podržavaju sva kola koja poseduju mogućnost samoprogramiranja izuzev Atmega163 i Atmega323. Ovaj interapt omogućava obnavljanje Flash-a korišćenjem interapta.

Pre izvršenja bilo koje SPM instrukcije važno je obustaviti sve operacije upisa u EEPROM ili slične. Za obnavljanje Flash-a se koriste dve tipične procedure koje su prikazane na Slici 3.51.

71

Page 74: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 3.51 Procedure za obnavljanje Flash-a

Dijagram na levoj strani opisuje postupak Read-Modify-Write proceduru za update-ovanje malih delova Flash-a (string sa konstantema). Dijagram na desnoj strain opisuje proceduru upisa stranice koja se koristi za upis celih stranica, bez predhodnog čitanja (upis podataka primljenih sa UART-a).

3.5.4 Primer bootloaderaBottloader softver kao korisnički interfejs koristi AVROSP (AVR Open Source Programmer). U nastavku će biti opisan primer koji ima implementirane funkcije čitanja ili update-ovanja Flash-a i EEPROM-a.

Protokol koji se koristi od strane bootloader programa je deo protokola koji je definisan za AVRProg. Lista podržanih komandi je prikazana u Tabeli 3.23. Sve komande počinju sa jednim slovom. Nakon završetka izvršenja komande programator vraća 13d (CR) ili zahtevani podatak. Nepoznate komande su obeležena sa ?.

72

Page 75: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

3 Bootloader način programiranja

Tabela 3.23 Lista komandi

Glavni program startuje sa proverom ukoliko je programiranje završeno ili ukoliko se program u okviru aplikacionog koda izvršava. Ovo se prikazuje sa vrednošću pina PIND. Ukoliko ovaj korisnički-specifični pin na portu D ima vrednost logičke “0“ za vreme trajanja reseta, program ulazi u mod za programiranje. Kada je ovaj pin na visokom, program startuje izvršenje od adrese 0000h. U modu za programiranje program prima komande od AVROSP preko UART-a.

73

Page 76: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontroleraProgramiranje Flash memorije Silabs-ovih mikrokontrolera se obavlja na dva načina i to pomoću:

• C2 interfejsa

• JTAG interfejsa

Treba napomenuti da se svi Silicon Labs mikrokntroleri mogu programirati pomoću JTAG interfejsa stim što familija C8051F2xx ne podržava Boundary Scan funkciju (IEEE 1149.1). Opcija programiranja mikrokontrolera pomoću JTAG interfejsa omogućava programiranje više komponenti vezanih na istu JTAG liniju.

4.1. Programiranje Flash-a pomoću C2 interfejsa

Opis postupka programiranja Flash-a pomoću C2 interfejsa dat je kroz primer C8051F30x mikrokontrolera. Ova familija kola podržava Flash Programming Interface (FPI) kome se pristupa pomoću C2 interfejsa (C2I) na fizičkom nivou i sadrži set registara implementiranih specijalno za ovu namenu. Blok dijagram komponenti koje se koriste je prikazan na Slici 4.1.

Slika 4.1 Blokovi neophodni prilikom programiranja pomoću C2 interfejsa

Informacije koje su neophodne za pristup Flash-u pomoću C2I mogu se podeliti u sledeće tri sekcije:

1. C2 interfejs na fizičkom nivou se sastoji od informacija o protokolu, C2 registara i osnovnih C2 komandi.

a. Dvožični C2 interfejs (linije C2CK i C2D)

b. C2 adresni registar i komande za njegov pristup (Address Write, Address Read)

c. C2 registar za podatke i njegove komande (Data Write, Data Read)

d. Registar za identifikaciju ID i Revision ID registar (DEVICEID i REVID)

2. Registri za programiranje Flash-a sadrže funkcije koje se koriste prilikom programiranja

a. Flash kontrol registar (FPCTL)

b. Flash registar za podatke (FPDAT)

3. Interfejs za programiranje Flash-a (FPI) na najvišem nivou sadrži komande i procedure koje se koriste prilikom programiranja

Page 77: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

a. Flash Block Writeb. Flash Block Readc. Flash Page Erased. Flash User Space Erase

C2I sadrži jedan adresni registar i do 256 registara za podatke. Pristup ovim registrima se obavlja na osnovu protokola na fizičkom nivou.

ADDRESS C2 adresni registar ima dvostruku ulogu prilikom programiranja i to:

1. ADDRESS selektuje kojem će se registru za podatke pristupiti prilikom procesa C2 Data Read/Write

2. Tokom procesa čitanja adrese, ADDRESS pruža FPI statusne informacije.

Čitanje adrese se koristi tokom programiranja prilikom handshaking komunikacije između programatora i FPI. Komanda čitanja adrese vraća 8 bitnu statusnu informaciju u obliku prikazanom u Tabeli 4.1.

Tabela 4.1 Izgled informacije o statusu

U okviru statusne informacije značajna su samo prva dva bita. InBusy bit je potrebno pratiti nakon bilo kog upisa u registar za programiranje Flash-a (FPDAT). Vrednost ovog bita je “0“ kada FPI potvrdi uspešan upis u FPDAT. OutReady bit treba pratiti pre bilo kog čitanja FPDAT registra, vrednost ovog bita je “1“ kada FPI postavi podatke u FPDAT registar.

DEVICEID registar je read-only i sadrži 8 bitni podatak odnosno identifikator ciljne C2 komponente. Adresa ovog registra je 0x01, dok je vrednost za identifikaciju svih C8051F30x komponenti 0x04.

REVID registar je takođe read-only i sadrži 8 bitnu informaciju o poslednjoj reviziji ciljne C2 komponente.

Registri za programiranje Flash-a se koriste prilikom komunikacije između FPI i C2I. Adrese registara za programiranje su prikazane u Tabeli 4.2.

Tabela 4.2 Adrese FPCTL i FPDAT registara

FPCTL registar se koristi za dozvolu programiranja pomoću C2. Ukoliko se želi programirati memorija mikrokontrolera pomoću C2 načina programiranja Flash-a u FPCTL moraju biti upisane sledeće vrednosti:

76

Page 78: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

1. 0x02

2. 0x01

Ove ključne vrednosti moraju se upisati nakon reseta mikrokontrolera. Kada se jednom upišu ove vrednosti su sačuvane sve do trenutka ponovnog reseta mikrokontrolera.

FPDAT registar za podatke se koristi za protok svih podataka između C2I i FPI. Informacije koje prolaze kroz FPDAT mogu biti:

1. Sve FPI komande (od C2I ka FPI)

2. FPI statusne informacije (od FPI ka C2I)

3. FLASH adrese (odC2I ka FPI)

4. FLASH podaci (oba pravca)

Interfejs za programiranje Flash-a (FPI) obuhvata set od četiri komande koje se koriste za programiranje. Svaka komanda se izvršava čitanjem i upisom FPDAT registra. Ove četiri komande su prikazane u Tabeli 4.3.

Tabela 4.3 Komande za programiranje

Povezivanje programatora sa mikrokontrolerom pomoću C2I se može realizovati shodno Slici 4.2.

Slika 4.2 Povezivanje programatora i mikrokontrolera pomoću C2I

4.1.1 Sekvenca za inicijalizacijuPre nego što se izvrši bilo koja od FPI komandi mora se izvršiti inicijalizacija koja se sastoji iz sledećih nekoliko koraka:

1. Reset komponente

2. Sačekati vremenski period od 2 µs

3. Upisati ranije spomenuti kod za otključavanje (FPCTL: 0x02, 0x01)

4. Sačekati vremenski period od 20 ms

Ova sekvenca za inicijalizaciju je data u obliku algoritma na Slici 4.3.

77

Page 79: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.3 Algoritam za inicijalizaciju

Softverska sekvenca koja se može koristiti za inicijalizaciju se sastoji od dve funkcije C2_Reset ( ) i

C2_Init ( ) koje su prikazane u nastavku:

78

Page 80: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

4.1.2 Upis bloka podataka u Flash (0x07)Upis podataka u Flash se obavlja pomoću komande Flash Block Write. Veličina bloka koji se upisuje može biti od 1 do 256 bajtova. Veličinu bloka definiše korisnik tokom sekvence upisa. Oblik 8 bitnog koda koji definiše veličinu podataka koji se upisuje je prikazan na Slici 4.4.

Slika 4.4 Kod za definisanje veličine bloka

Promenjiva Length Code definiše veličinu bloka i može biti od 1 do 255. Kada je Length Code jednaka nuli veličina bloka je 256 bajtova. Sekvenca Flash Block Write komande je prikazana na Slici 4.5. Pre izvršavanja ove sekvence potrebno je izvršiti inicijalizaciju prikazanu u okviru predhodnog podnaslova.

79

Page 81: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.5 Sekvenca Flash Block Write komande

Programska sekvenca koja se koristi prilikom upisa bloka podataka u Flash je prikazana u nastavku:

80

Page 82: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

4.1.3 Čitanje bloka podataka iz Flash-a (0x06)Čitanje podataka iz Flash-a se obavlja pomoću komande Flash Block Read. Kao i kod upisa i ovde veličina podataka koji se čitaju može biti od 1 do 256 bajtova. Veličinu podataka definiše korisnik sa sekvencom koja je prikazana na Slici 4.6.

Slika 4.6 Definisanje veličine podataka

Algoritam za izvršavanje Flash Block Read sekvence je prikazana na Slici 4.7.

81

Page 83: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.7 Flash Block Read sekvenca

Prilikom čitanja bloka podataka iz Flash memorije može se koristiti procedura:

82

Page 84: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

4.1.4 Brisanje stranica u okviru Flash-a (0x08)Flash memorija se briše u stranicama od po 512 bajtova korišćenjem komande Flash Page Erase. U okviru procedure za brisanje, koja je prikazana na Slici 4.8, vrši se selekcija stranice koja se treba obrisati.

Slika 4.8 Komanda Flash Page Erase

83

Page 85: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Tabela 4.4 prikazuje listu broja stranica i adresa za komponente iz C8051F30x serije. Važno je napomenuti da kod ostalih komponenti broj stranica varira u zavisnosti od veličine memoriskog prostora.

Tabela 4.4 Listu broja stranica i adresa

Pre izvršenja komande za brisanje stranice takođe je potrebno izvršiti inicijalizaciju pomoću sekvence za inicijalizaciju, koja je data na početku.

Programska sekvenca za brisanje određene stranice Flash memorije je:

84

Page 86: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

4.1.5 Brisanje kompletnog Flash-a (0x03)Komanda Flash Device Erase se koristi za brisanje kompletnog Flash-a, u slučaju C8051F30x serije od adrese 0x0000 do 0x1DFF. Pre izvršavanja ove komande neophodno je ispoštovati sledeću sekvencu:

1. 0xDE

2. 0xAD

3. 0xA5

Nakon poslate sekvence može se započeti izvršenje komande brisanja čiji je algoritam prikazan na Slici 4.9.

85

Page 87: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.9 Izvršenje komande Flash Device Erase

Takođe i ova komanda pre izvršenja zahteva inicijalizacionu sekvencu. U nastavku je prikazana procedura za brisanje kompletnog prostora Flash-a:

86

Page 88: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

4.2. Programiranje Flash-a pomoću JTAG interfejsa

Operacije koje su neophodne prilikom programiranja Flash-a pomoću JTAG interfejsa su podeljene u sledeće tri kategorije:

1. JTAG interfejs informacije:

a. Na fizičkom nivou interfejs treba da sadrži 4 linije i to: TCK, TMS, TDI i TDO.

b. Port za pristup prilikom testiranja TAP (Test Access Port), u daljem tekstu kao TAP kontroler

c. TAP Reset, Instruction Register Scan i Data Register Scan

2. Operacije sa indirektnim JTAG registrom:

a. Čitanje indirektnog registra

b. Upis u indirektni registar

c. Kontrola bita zauzetosti kada se obavljaju operacije čitanja ili upisa

3. Operacije programiranja Flash-a:

a. Čitanje bajta u okviru Flash-a

b. Upis bajta u Flash

c. Brisanje stranice Flash-a

d. Brisanje kompletnog Flash-a

Pristup Flash memoriji prilikom programiranja pomoću JTAG porta je zasnovana na određenoj hijerarhiji među operacijama. Na Slici 4.10 je prikazana hijararhija prilikom pristupa Flash-u korišćenjem JTAG porta.

87

Page 89: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.10 Hijerarhija pristupa Flash-u

Na mestu najvišeg prioriteta se nalaze operacije Byte Read, Byte Write, Page Erase i Full Erase, dok mesto najnižeg prioriteta zauzima fizički nivo JTAG interfejsa.

Kao što je već napomenuto JTAG interfejs na najnižem nivou čine četiri signala koji su prikazani na Slici 4.11.

Slika 4.11 Pinovi koji se koriste za JTAG interfejs

1. TCK predstavlja ulazni taktni signal. Uzlazna ivica ovog signala omogućava prikupljanje signala sa linija TMS i TDI. Na drugoj strani opadajuća ivica TCK signala takta postavlja izlazne podatke na port TDO.

2. TMS predstavlja ulaz za selektovanje moda prilikom kretanja kroz TAP kontroler za upravljanje i kontrolu.

3. TDI je ulazna linija za podatke. Ova linija se koristi za upis podataka u instrukcioni registar (IR) ili Registar za podatake (DR).

4. TDO linija je izlazna linija za IR ili DR. Na ovoj liniji su dostupni podaci koji se čitaju iz mikrokontrolera.

Pomoću TAP kontrolera se upravlja stanjima koja omogućavaju određene operacije nad registrima IR i DR. Primarna upotreba TAP kontrolera je odabir koji će od dva šift registra IR ili DR biti konektovan između TDI i TDO linija. Registar IR se koristi da odredi koji će se DR skenirati. Na Slici 4.12 je prikazan dijagram stanja TAP kontrolera.

88

Page 90: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 4.12 Dijagram stanja TAP kontrolera

Prelazak iz jednog stanja u drugo obavlja se pomoću odgovarajuće vrednosti postavljene na TMS i taktnog impulsa TCK. Prilikom startovanja TAP kontroler se nalazi u stanju Test Logic Reset. Ako se želi aktivirati stanje Shift_IR potrebna je sledeća sekvenca: Na TMS dovesti sekvencu 0, 1, 1, 0, 0 uz neophodno taktovanje na TCK između svake vrednosti dovedene na TMS. Resetovanje TAP-a se obavlja postavljanjem TMS na“1“ u trajanju od pet taktnih impulsa, kao što se vidi na Slici 4.13.

Slika 4.13 Resetovanje TAP kontrolera

89

Page 91: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Ova opcija resetuje TAP bez obzira na to u kom se stanju nalazio pre toga, međutim ona ne resetuje mikrokontroler.

4.2.1 IR i DR skeniranjeNakon resetovanja TAP kontrolera, mogu se izvršiti dve operacije: Skeniranje IR i skeniranje DR. U okviru operacije skeniranja, podaci se uzimaju sa TDI linije (skeniranje IR-a) i prosleđuju na TDO izlaz u skladu sa TCK taktom (skeniranje DR-a). Tokom operacije skeniranja IR-a TAP se dovodi u Shift_IR stanje, dok tokom skeniranja DR-a, TAP treba da se nalazi u Shift_DR stanju. U oba slučaja se prvo šiftuje LSB cifra. U C8051Fxxx mikrokontrolerima, dužina IR-a je uvek 16 bita, dok dužina DR varira u zavisnosti od toga koji je DR selektovan.

Radi lakšeg razumevanja na Slici 4.14(a) je prikazan vremenski dijagram prilikom procesa skeniranja IR, dok je na Slici 4.14(b) prikazan proces skeniranja DR-a.

(a)

(b)

Slika 4.14 Proces skeniranja: (a) IR registra; (b) DR registra

Primer programskih funkcija koje se mogu koristiti za skeniranje IR-a i DR-a su:

90

Page 92: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

91

Page 93: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Radi bolje ilustracije funkcionisanja JTAG operacija skeniranja IR-a i skeniranja DR-a, dat je primer čitanja IDCODE registra koji sadrži identifikacione informacije o mikrokontroleru. Čitanje ovog registra se obavlja u dva koraka. Prvi je selekcija skeniranja IR-a, nakon toga pomoću TDI se učitava 16 bitna IDCODE adresa u IR. Operacija je prikazana na Slici 4.15.

Slika 4.15 Postupak čitanja IDCODE registra

92

Page 94: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Nakon što je adresa učitana potrebno je iniciranje operacije skeniranja DR-a. Na izlaznoj TDO liniji će se pojaviti 32 bitni IDCODE što se vidi na Slici 4.16.

Slika 4.16 Operacija skeniranja DR-a

Instruction Register (IR) u okviru C8051Fxxx mikrokontrolera je 16 bitni registar čiji je izgled prikazan na Slici 4.17.

Slika 4.17 Sadržaj IR registra

Deo StateCntl sadrži 4 bita pomoću kojih se vrši kontrola stanja kontrolera prilikom programiranja ili debagiranja. Sva StateCntl stanja su prikazana u Tabeli 4.5. Prilikom operacije programiranja Flash-a, prvo se sistem dovodi u stanje Halt a onda se zadržava u Suspend modu u cilju izbegavanja rada Watchdog tajmera.

Tabela 4.5 Prikaz StateCntl stanja

DRAddres deo IR-a se koristi za čitanje ili upis 4 indirektnia Flash registara (FLASHCON, FLASHADR, FLASHDAT i FLASHSCL). Ovi indirektni registri se koriste prilikom pristupa Flash memoriji. Korišćenjem ove indirektne šeme upravljanja postiže se mogućnost selekcije jednog od dva domena upravljanja transferom informacija. JTAG takt domen koji za upravljanje koristi TCK takt ili CPU takt domena kontrolisanog od strane sistemskog takta SYSCLK. Ovi registri nemaju nikakve veze sa indirektnim registrima standardnog 8051 mikrokontrolera R0 i R1.U okviru Tabele 4.6 su date sve DRAddress-e.

93

Page 95: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Tabela 4.6 Lista svih DRAddress-a

Operacije čitanja ili upisa se inicijalizuju od strane odgovarajućeg indirektnog operacionog koda IndOpCode, koji se upisuje u okvir DR registra. Pomoću IndOpCode se selektuje odgovarajuća operacija nad podacima (WriteData) koji se nalaze u okviru istog DR-a. U Tabeli 4.7 su prikazani IndOpCode.

Tabela 4.7 IndOpCode-oviIndOpCode Operation

0x Poll10 Read11 Write

Prilikom upisa se koristi Write opkod nakon čega dolazi podatak koji treba biti upisan u formatu prikazanom na Slici 4.18.

Slika 4.18 Format podatka DR-a u okviru Write instrukcije

Prilikom čitanja se koristi IndOpCode 10, a format izlaznih podataka je oblika kao na Slici 4.19.

Slika 4.19 Format podataka na izlazu u okviru IndOpCode instrukcije

4.2.2 Operacija čitanja indirektnog registraOperacija čitanja nekog od indirektnih registra počinje postavljanjem vrednosti IR-a, u okviru koga se nalazi adresa (DRAddress) indirektnog registra koji treba pročitati. Nakon toga potrebno je učitati DR registar sa vrednošću 10 koja predstavlja opkod čitanja. Postavlja se busy bit u cilju određivanja kada su podaci dostupni za čitanje. Nakon promene vrednosti busy bita podaci iz odgovarajućeg indirektnog registra se mogu pročitati. Na Slici 4.20 je prikazan algoritam procesa čitanja indirektnog registra.

94

Page 96: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 4.20 Algoritam procesa čitanja indirektnog registra

Za operaciju čitanja indirektnog registra se može koristiti programska sekvenca koja je data u nastavku:

95

Page 97: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

4.2.3 Operacija upisa u indirektni registarOperacija upisa indirektnog registra započinje upisom WriteData u registar selektovan od strane DRAddress dela u okviru IR-a. Ovom operacijom mogu biti upisane reči širine 18 bitova. Ukoliko registar koji treba biti upisan sadrži manje od 18 bitova može se koristiti uređenje po levoj strani (MSB bit će biti 17 bit). Ovo omogućava da kraći podaci mogu biti upisani u svega nekoliko JTAG taktnih ciklusa. Na primer, ukoliko treba upisati 8 bit-ni podatak potrebno je taktovanje samo za 10 bitova (2 bita Write opkod + 8 bitova podatak). Isto kao i kod operacije čitanja potrebno je kontrolisati busy bit u cilju određivanja kada je operacija upisa završena. Na Slici 4.21 je prikazan algoritam koji opisuje postupak upisa vrednosti u indirektni registar.

Slika 4.21 Algoritam koji se koristi za upis vrednosti u indirektni registar

Data je procedura koja se koristi prilikom operacije upisa u indirektni registar:

96

Page 98: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

4.2.4 Provera Busy bitaBusy bit označava da je neka od operacija (čitanja ili upisa) u toku. Busy bit je postavljen na logičku “1“ ukoliko je neka od navedenih operacija u toku, a ima vrednost logičke “0“ kada je neka od operacija završena. Pošto Busy bit zauzima LSB bit podatka koji se vraća od strane mikrokontrolera, provera ovog bita može biti obavljena u okviru DR shift ciklusa (na izlazu iz Shift_DR stanja TAP automata). Ukoliko se radi o operaciji indirektnog čitanja, podatak Read Data koji se isčitava je desno uređen pa se Busy bit nalazi na kraju. Na primer, ukoliko je ReadData podatak 8 bitni za čitanje Busy bita je potrebno devet pomeranja DR segistra (8 bita podataka + 1 Busy bit). Na Slici 4.22 je prikazan vremenski dijagram prilikom operacije DR skeniranja.

Slika 4.22 Skeniranje DR-a

4.2.5 Programiranje Flash-a mikrokontroleraPristup Flash memoriji mikrokontrolera se obavlja pomoću četiri indirektna registra: FLASHCON, FLASHADR, FLASHDAT i FLASHSCL. Svaki od ovih registra se može upisati ili pročitati pomoću operacija indirektnog čitanja ili indirektnog upisa koje su predhodno detaljno opisane.

FLASHCON je 8 bitni registar pomoću koga se vrši kontrola nad upisom ili čitanjem FLASHDAT registra. FLASHCON registar koji je prikazan na Slici 4.23 sadrži ReadMode i WriteMod deo.

Slika 4.23 FLASHCON registar

ReadMode deo (Tabela 4.8) čine četiri bita koja definišu jednu od dve moguće operacije.

97

Page 99: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Tabela 4.8 ReadMode deo FLASHCON registra

WriteMode deo (Tabela 4.9) čine četiri MSB bita i definišu jednu od tri moguće operacije.

Tabela 4.9 WriteMode deo FLASHCON registraWriteMode Operation

0000 FLBusy Polling

0001Initiate FLASH Write;Increment FLASHADR

0010 Initiate page erase onCurrent page if FLASH-DAT=0xA5;Initiate erase of entireFLASH if FLASHDAT=0xA5And FLASHADR is set to the address of the FLASH Read Lock ByteOr the FLASH Write/Erase Lock Byte.

FLASHADR je 16 bitni registar koji sadrži adresu bajta koji treba biti upisan ili pročitan u Flash memoriju. Nakon izvršene operacije upisa ili čitanja ovaj registar se automatski inkrementira.

FLASHDAT registar (Slika 4.24) je 10 bitni i čini ga 8 bita podataka koji trebaju biti upisani u Flash memoriju, jedan FLFail bit i jedan FLBussy bit. FLFail bit je postavljen ukoliko se pokušava neka nedozvoljena operacija kao što je upis u zaštićeni deo Flash-a. FLBussy bit označava zauzetost resursa sa nekom od operacija.

Slika 4.24 FLASHDAT registar

Prilikom procesa upisa dovoljno je upisati samo prvih 8 bitova, dok je kod operacije čitanja neophodno izvršiti 11 ciklusa pomeranja DR registra (8 za FLData podatak, 1 za FLFail, 1 za

98

Page 100: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

FLBusy i jedno za Busy). Ukoliko se želi samo provera FLBusy neophodno je izvršiti samo 2 pomeranja DR-a i to jedno za FLBusy i jedno za Busy.

FLASHSCL je 8 bitni registar pomoću koga se vrši postavljanje vrednosti za deljenje takta prilikom operacija sa Flash-om. Slika 4.25 prikazuje izgled FLASHSCL registra.

Slika 4.25 FLASHSCL registar

Ukoliko se zeli takt od 2 MHz ovaj registar mora sadržati heksa vrednost 0x86.

4.2.5.1 Procedure za pristup Flash-uPre nego što se Flash programira, neophodno je resetovati mikrokontroler i isključiti Watchdog tajmer. U suprotnom Watchdog tajmer može inicirati sistemski reset tokom operacije nad Flash-om (upis ili čitanje), što može prouzrokovati nekorektnost u radu.

Proces zabrane rada Watchdog tajmera (WDT) je u obliku algoritma dat na Slici 4.26.

Slika 4.26 Zabrana rada Watchdog tajmera

Proces se sastoji u sledećem:

1. Učitavanjem 0x2FFF vrednosti u IR izvršava se reset sistema.

2. Potrebno je izvršiti jedno IDCODE skeniranje učitavanjem heksa vrednosti 0x1004 u okvir IR-a i nakon toga izvršiti DR skeniranje (dobijena 32 bitna vrednost je 0x00000000).

3. U okviru svih pratećih IR adresa postaviti StateCntl na 0x4, u cilju zadržavanja kontrolera u Suspend modu

4.2.5.2 Čitanje bajta podataka iz Flash-aNakon obavljenog procesa pristupa Flash-u može se pristupiti operaciji čitanja bajta iz Flash-a. Na Slici 4.27 je prikazan algoritam koji se treba ispoštovati prilikom operacije čitanja.

99

Page 101: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.27 Algoritam prilikom operacije čitanja

Procedura se sastoji iz sledećih koraka:

1. U registar FLASHSCL učitati vrednost 0x86 radi postavljanja sistemskog takta na 2 MHz. Ova operacija se obavlja pomoću indirektnog upisa.

2. U registar FLASHADR postaviti 16 bitnu adresu podatka koji se želi pročitati.

3. U FLASHCON registar učitati vrednost 0x01 za početak operacije čitanja.

4. Započeti čitanje FLASHDAT registra i to samo nultog bita koji obeležava start procesa čitanja Flash-a.

5. U registar FLASHCON upisati FLBusy (0x00), radi označavanja zauzetosti Flash-a.

100

Page 102: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

6. Proveravati FLBusy sve dok ne bude na nisko, u cilju provere da li je operacija čitanja završena. Na Slici 4.28 je prikazan vremenski dijagram provere FLBusy bita.

Slika 4.28 vremenski dijagram provere FLBusy bita

7. Pročitati vrednost FLASHDAT i to 10 bitnu rednost. Na Slici 4.29 je prikazan vremenski dijagram čitanja vrednosti FLASHDAT registra.

Slika 4.29 Vremenski dijagram čitanja FLASHDAT registra

Ovim bi se završio proces čitanja jednog bajta iz Flash-a, međutim ukoliko se želi nastaviti sa uzastopnim čitanjem nekoliko bajtova proces se može nastaviti od tačke 3, zato što se adresa u okviru FLASHADR registra automatski inkrementirala nakon predhodnog procesa čitanja.

Ukoliko se pokuša pristup zaključanom sektoru u okviru Flash-a FLFail bit će biti postavljen na visoko.

Softverska procedura koja se koristi za čitanje bajta iz Flash-a je:

101

Page 103: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

4.2.5.3 Upis bajta podataka u FlashPostupak upisa jednog bajta podataka u Flash je prikazan u vidu algoritma na Slici 4.30.

Prilikom upisa bajta podataka, takođe, se mora ispoštovati određena procedura:

1. Isto kao i u postupku čitanja na početku je neophodno u registar FLASHSCL učitati vrednost 0x86 radi postavljanja sistemskog takta na 2 MHz.

2. U okvir FLASHADR registra se zadaje 16 bitna adresa na koju se smešta podatak koji se upisuje.

3. U registar FLASHCON se upisuje opkod 0x10 koji inicira upis u Flash i automatsko inkrementiranje adrese.

4. U registar FLASHDAT se postavlja bajt koji se želi upisati. Na Slici 4.31 je prikazan vremenski dijagram procesa upisa.

5. U okvir FLASHCON registra se upisuje 0x00 (FLBusy).

6. Vrši se provera čitanjem FLBusy bita u okviru FLASHDAT registra.

102

Page 104: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 4.30 Algoritam za upis bajta u Flash

Ovim se završava proces upisa bajta u Flash. Ukoliko se želi nastaviti sa upisom proces se nastavlja od tačke 3. FLFail se postavlja na visoko ukoliko se pokuša upis podataka u oblast Flash-a koji je zaštićen za upis.

103

Page 105: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

Slika 4.31 Vremenski dijagram procesa upisa

Softverska procedura koja se koristi prilikom upisa bajta podataka u Flash mikrokontrolera korišćenjem JTAG metode programiranja je:

4.2.5.4 Brisanje stranice Flash-aFlash memorija je organizovana u seriji stranica od po 512 bajtova. Procedura brisanja Flash-a je slična procesu upisa bajta u Flash s razlikom što se u okvir FLASHCON registra treba upisati heksa

104

Page 106: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

vrednost 0x20 i FLASHDAT registar se mora postaviti na 0xA5. Procedura brisanja stranice Flash-a je prikazana u obliku algoritma na Slici 4.32.

Slika 4.32 Algoritam za brisanje stranice

Prilikom brisanja FLASHADR se mora postaviti isključivo na vrednost adrese sa koje se podaci brišu. Ukoliko se adresa postavi na neku od zaključanih (na primer 0x7DFE ili 0x7DFF kod F0xx mikrokontrolera), onda operacija brisanja započinje brisanje kompletne Flash memorije. Za razliku od procesa upisa ili čitanja Flash-a tokom procesa brisanja vrednost adrese u okviru FLASHADR se neće automatski inkrementirati.

Softverska procedura koja se može koristiti prilikom brisanja stranice Flash memorije je:

105

Page 107: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

4 Programiranje Silabs-ovih mikrokontrolera

4.2.6 DLL bibliotekaDLL biblioteka koja će biti opisana u okviru ovog dela omogućava sledeće operacije: download-ovanje hex fajla u Flash mikrokontroler; konektovanje i diskonektovanje mikrokontrolera sa PC-jem; čitanje i upis internog, eksternog i kodnog memorijskog prostora. Sve ove funkcije se obavljaju pomoću COM porta ili USB porta.

Poslednja verzija biblioteke data je u okviru “SiUtil.dll“ i “SiUtil.lib“ fajlova. Ove biblioteke su Win32 kompatibilne i koriste se kao Microsoft Foundation Class (MFC) biblioteke. To znači da mogu biti učitane od bilo kog Win32 programskog okruženja i sadrže isključivo “C“ funkcije. Postoje dve verzije, jedna koja se linkuje statički i druga koja se linkuje dinamički.

Funkcije u okviru biblioteke se mogu podeliti u nekoliko grupa i to: Funkcije za komunikaciju, Program interface funkcije, Memorijske funkcije za čitanje, Memorijske funkcije za setovanje, Funkcije za kontrolu komponenti, USB Debug Adapter komunikacione funkcije, Stand-alone funkcije i Funkcije za Multi-device JTAG programiranje.

106

Page 108: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontroleraAVR familija atmelovih mikrokontrolera podržava programiranja Flash-a na tri različita načina i to:

• JTAG interfejsa

• Paralelni mod

• Serijski mod (SPI protokol)

5.1 Programiranje memorije AVR mikrokontrolera pomoću JTAG interfejsa

Atmel-ova AVR serija mikrokontrolera poseduje ugrađen JTAG interfejs. JTAG interfejs (standardizovan IEEE std. 1149.1) omogućava: programiranje Flash programske memorije, programiranje EEPROM memorije, programiranje bitova za zaključavanje, Debagiranje, Boundary-Scan opciju testiranja mikrokontrolera i druge. Atmel-ovi kontroleri koji podržavaju JTAG interfejs su:

ATmega16/162/164/165/169

ATmega32/324/325/3250/329/3290

ATmega64/644/645/6450/640/6490/649

ATmega128/1280/1281

ATmega2560/2561

ATmega406

AT90USB1286/1287/646/647

AT32xxxx

AT91Xxxx

Kao što je već ranije napomenuto u poglavlju o programiranju Ssilabs-ovih mikrokontrolera pomoću JTAG interfejsa, JTAG interfejs čini TAP (Test Access Port) kontroler i četiri linije na fizickom nivou: TDI, TDO, TCK i TMS. Na Slici 5.1 je prikazan blok dijagram JTAG interfejsa.

TAP kontroler predstavlja automat koji upravlja radom sa JTAG interfejsom i kontroliše se pomoću TCK i TMS signala. JTAG interfejs poseduje dve grupe registra i to: registri za podatke (DR) i instrukcioni registar (IR).

Slika 5.1 JTAG interfejs

Page 109: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

Registri za podatke su: ID registar, Bypass registar i Boundary-Scan registar. Ovi registri se najčešće koriste prilikom testiranja. JTAG interfejs sadrži i nekoliko virtualnih registara za podatke kao Internal Scan Chain i Break Scan Chain koji se koriste prilikom programiranja ili debagiranja.

Instrukcioni registar se koristi za kontrolu stanja kontrolera prilikom programiranja ili debagiranja. Pored toga on sadrži i adrese indirektnih registara koji se koriste prilikom pristupa Flash memoriji mikrokontrolera.

Na Slici 5.2 je prikazan blok dijagram jednog JTAG interfejsa kod Atmel-ovih mikrokontrolera.

Slika 5.2 JTAG interfejs kod Atmel-ovog mikrokontrolera

1.TCK (Test Clock) predstavlja ulazni taktni signal. Uzlazna ivica ovog signala omogućava uzorkovanje signala na linijama TMS i TDI. Na drugoj strani opadajuća ivica TCK signala takta postavlja izlazne podatke na port TDO.

2.TMS (Test Mode Select) predstavlja ulaz za selektovanje moda prilikom kretanja kroz TAP automat za upravljanje i kontrolu.

3.TDI ( Test Data In) je ulazna linija za podatke. Ova linija se koristi za upis podataka u instrukcioni registar (IR) ili Registar podataka (DR).

4.TDO linija (Test Data Out) je izlazna linija za IR ili DR.

Na Slici 5.3 je prikazan dijagram stanja TAP kontrolera. TAP kontroler ima 16 stanja pomoću kojih se kontrolišu operacije JTAG programiranja, Boundary-Scan ili On-Chip Debagiranja. Inicijalno stanje TAP-a je Test Logic-Reset. Promena stanja se obavlja pomoću signala na TMS i rastuće ivice signala TCK. Početno stanje je Run-Test/Idle. Treba imati na umu da prilikom isčitavanja bilo kog od šift registara (DR ili IR) na TDO se prvo pojavljuje LSB bit.

108

Page 110: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 5.3 Dijagram stanja TAP kontrolera

Pre upotrebe JTAG interfejsa mora se programirati JTAGEN osigurač (napomena: ovaj osigurač je programiran po default-u). Takođe, mora biti obrisan i JTD bit u okviru MCUCSR (MCU Control and Status Registar, Slika 5.4). Ukoliko je ovaj bit postavljen potrebno je aktivirati eksterni reset na niskom, obrisati JTD i nakon dva taktna ciklusa JTAG pinovi se mogu koristiti za programiranje. Ove mere se ne trebaju koristiti kada se JTAG pinovi koriste kao klasičan port, a može se upotrebiti ukoliko se želi korišćenje JTAG porta kao Boundary-Scan ili On-Chip Debug.

Slika 5.4 MCUCSR registar

Instrukcioni registar IR u okviru TAP kontrolera je 4 bit-ni i podržava 16 instrukcija. U nastavku će biti prikazano nekoliko instrukcija koje su potrebne prilikom programiranja. Opkodovi ovih instrukcija u hex formatu su smešteni u okviru zagrada.

Run-Test/Idle stanje TAP kontrolera se koristi u cilju generisanja internog takta, a može se koristiti i kao Idle stanje između dve JTAG sekvence. Upravljanje prilikom programiranja se obavlja tako što

109

Page 111: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

se prvo u IR učita neka od upravljačkih instrukcija. Nakon toga se unose odgovarajući podaci u virtuelne registre podataka koji su aktivirani od strane učitane instrukcije. Na Slici 5.5 je prikazana sekvenca stanja automata koja se koristi prilikom promene instrukcija (obeležena punom linijom).

Slika 5.5 Sekvence prilikom promene instrukcije

5.1.1 Instrukcije JTAG interfejsaInstrukcije koje se koriste prilikom upotrebe JTAG interfejsa, odnosno koje se učitavaju u IR su:

AVR_RESET (0xC) Specijalna JTAG instrukcija za postavljanje mikrokontrolera u Reset mod ili za izlazak iz reset moda. Ovom instrukcijom se ne resetuje TAP kontroler.

Pomoću ove instrukcije se aktivira stanje Shift_DR koje omogućava isčitavanje virtuelnog Reset registra pomoću TCK.

110

Page 112: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

PROG_ENABLE (0x4) Ova instrukcija se koristi za dozvolu programiranja pomoću JTAG porta. Programming Enable registar je 16 bitni i pristupa mu se pomoću registara za podatke DR. Aktivna stanja koja se mogu koristiti su:

• Shift_DR: Vrednost Programming Enable se učitava u registar za podatke DR.

• Update_DR: Vrednost Programming Enable se poredi sa tačnom vrednošću i ukoliko je validna ulazi se u mod za programiranje.

PROG_COMMANDS (0x5) je JTAG instrukcija koja omogućava unos komandi za programiranje. Registar kome se pristupa pomoću DR je 15 bitni Programming Command registar. Aktivna stanja su:

• Capture_DR: U DR se učitava rezultat predhodne komande

• Shift_DR: Pomera rezultat predhodne instrukcije na TDO i učitava novu komandu.

• Update_DR: Komanda se učitava u Flash

• Run-Test/Idle: Jedan taktni ciklus izvršava komandu

PROG_PAGELOAD (0x6) ova komanda se koristi za direktan upis cele stranice u Flash memoriju. Pomoću DR se selektuje virtuelni Flash Page Load registar od 1024 bita. On predstavlja virtuelni lanac dužine ekvivalentne broju bitova u okviru jedne stranice. Realno ovaj registar je 8 bitni. Podaci se automatski učitavaju u Flash stranični bafer bajt po bajt u okviru Shift_DR stanja. Jedino stanje koje se može koristiti je:

• Shift_DR: Podaci Flash stranice se automatski učitavaju od TDI ulaza bit po bit pomoću TCK i onda bajt po bajt učitavaju u Flash stranici.

PROG_PAGEREAD (0x7) je JTAG instrukcija koja se koristi za čitanje kompletnih stranica iz Flash-a. DR predstavlja 1032 bitni virtuelni Flash Page Read registar. Ovaj registar je virtuelni lanac dužine ekvivalentne broju bitova Flash stranice plus 8 bita. Aktivirano stanje je:

• Shift_DR: Podaci iz Flash-a se automatski čitaju bajt po bajt i isčitavaju na TDO uz pomoć TCK. U ovom slučaju se TDI ulaz ignoriše.

5.1.2Virtuelni registriVirtuelni registri za podatke koji se selektuju od strane JTAG instrukcija, a koji se koriste prilikom operacije programiranja su:

• Reset registar

• Registar za dozvolu programiranja (Programming Enable Register)

• Registar za upravljanje programiranjem (Programming Command Register)

• Virtuelni registar za upis Flash stranice (Virtual Flash Page Load Register)

• Virtuelni registar za čitanje Flash stranice (Virtual Flash Page Read Register)

Reset registar je registar za podatake koji se koristi za resetovanje komponente tokom programiranja. On je neophodan za reset komponente pre ulaska u mod za programiranje.

Registar za dozvolu programiranja je 16 bitni registar. Ovaj registar mora sadržati vrednost 1010 0011 0111 0000 (0xA370). Prilikom reseta sadržaj ovog registra se menja na 0000 0000 0000 0000. Svaki put kada se napusti mod za programiranje sadržaj ovog registra se briše. Na Slici 5.6 je prikazan blokovski izgled ovog registra.

111

Page 113: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

Slika 5.6 Registar za dozvolu programiranja

Registar za upravljanje programiranjem je 15 bitni registar. Ovaj registar se koristi za serijsko učitavanje instrukcija koje se koriste za programiranje. Isto tako, ovaj registar pomera rezultate obrade učitanih instrukcija ka TDO izlazu. Sekvenca koja se koristi prilikom šiftovanja registra za upravljanje programiranjem kao i izgled samog registra su prikazani na Slici 5.7.

(a)

112

Page 114: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

(b)

Slika 5.7 (a) Sekvenca za šiftovanje registra za upravljanje programiranjem;(b) Izgled registra za upravljanje programiranjem

Spisak instrukcija koje se koriste za upravljanje programiranjem je dat u okviru Tabele 5.1.

Tabela 5.1 Instrukcije za upravljanje programiranjem

113

Page 115: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

Virtuelni registar za upis Flash stranice predstavlja virtuelni lanac čija je dužina ekvivalentna broju bitova u okviru jedne stranice Flash-a. Ovaj registar je 8 bitni i koristi se za sukcesivni transfer podataka u Flash bafer i to bajt po bajt. Upis se započinje sa LSB bitom prvog podatka na stranici i završava sa MSB bitom poslednjeg podatka na stranici. Ovo omogućava efikasan upis cele stranice u okvir bafer-a pre izvršenja upisa strane u Flash. Na Slici 5.8 je prikazan izgled registra za upis virtuelne Flash stranice.

114

Page 116: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 5.8 Izgled registra za upis virtuelne Flash stranice

Virtuelni registar za čitanje Flash stranice je virtuelni lanac dužine ekvivalentne broju bitova u okviru jedne Flash stranice uvećane za 8 bita. Šift registar je 8 bitni i podaci se u njega automatski učitavaju iz Flash-a i to bajt po bajt. Prvih 8 ciklusa se koriste za transfer prvog bajta u šift registar a bitovi koji se isčitaju na TDO izlazu tokom ovih ciklusa se mogu ignorisati. Na Slici 5.9 je prikazana blok šema registra za čitanje virtuelne Flash stranice.

Slika 5.9 Registar za čitanje virtuelne Flash stranice

5.1.3 Programiranje memorije mikrokontroleraPrilikom upotrebe JTAG interfejsa za programiranje memorije (Flash-a ili EEPROM-a) potrebno je ispoštovati određene procedure. Ove procedure su prikazane u nastavku:

Ulaz u mod za programiranje:

1. Izvršiti JTAG instrukciju AVR_RESET i učitati "1" u reset registar

2. Izvršiti instrukciju PROG_ENABLE i učitati 1010 0011 0111 0000 u registar za dozvolu programiranja u cilju dozvole programiranja.

Brisanje kompletne memorije mikrokontrolera:

115

Page 117: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

1. Izvršiti PROG_COMMANDS

2. Startovati brisanje pomoću instrukcije 1a iz Tabele 5.1

3. Proveriti da li je brisanje završeno pomoću instrukcije 1b

Programiranje Flash memorije:

Pre izvršenja ove operacije obavezno izvršiti brisanje kompletne memorije mikrokontrolera.

1. Izvršiti JTAG instrukciju PROG_COMMANDS

2. Dozvoliti upis u Flash pomoću instrukcije 2a.

3. Učitati adresu najvišeg bajta korišćenjem instrukcije 2b.

4. Učitati adresu najnižeg bajta korišćenjem instrukcije 2c.

5. Učitati podatke korišćenjem instrukcija 2d, 2e i 2f.

6. Ponoviti korake 4 i 5 za sve instrukcije u okviru stranice.

7. Upisati stranicu pomoću instrukcije 2g.

8. Proveriti da li je operacija upisa u Flash završena pomoću instrukcije 2h.

9. Ponoviti korake 3 do 7 sve dok se svi podaci ne upišu

Mnogo efikasniji način upisa podataka u Flash memoriju se može ostvariti korišćenjem PROG_PAGELOAD instrukcije:

1. Izvršiti PROG_COMMANDS JTAG instrukciju

2. Dozvoliti upis u Flash upisom instrukcije 2a

3. Učitati adresu stranice koji želimo upisati pomoću instrukcija 2b i 2c.

4. Uneti PROG_PAGELOAD JTAG instrukciju

5. Učitati kompletnu stranicu počev od LSB prvog podatka na stranici do MSB bita poslednjeg podatka u okviru stranice.

6. Uneti PROG_COMMANDS

7. Upisati unetu stranicu u Flash pomoću 2g instrukcije

8. Proveriti da li je završena operacija upisa podataka u Flash pomoću 2h instrukcije

9. Ponoviti korake od 3 do 8 sve dok se sve stranice ne upišu u Flash.

Čitanje podataka iz Flash-a

1. Izvršiti JTAG PROG_COMMANDS instrukciju

2. Dozvoliti čitanje Flash-a pomoću 3a instrukcije

3. Učitati adresu korišćenjem instrukcije 3b i 3c

4. Pročitati podatke korišćenjem instrukcije 3d

5. Ponoviti korake 3 i 4 sve dok se svi podaci ne pročitaju

Mnogo efikasniji način čitanja Flash-a se može obaviti pomoću PROG_PAGEREAD instrukcije

1. Izvršiti JTAG instrukciju PROG_COMMANDS

2. Dozvoliti upis u Flash upisom instrukcije 3a

3. Učitati adresu stranice koji želimo pročitati pomoću instrukcija 3b i 3c.

4. Uneti PROG_PAGEREAD JTAG instrukciju

116

Page 118: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

5. Pročitati kompletnu stranicu počev od LSB prvog podatka na stranici do MSB bita poslednjeg podatka u okviru stranice.

6. Uneti PROG_COMMANDS instrukciju

7. Ponoviti korake od 3 do 6 sve dok se ne pročitaju sve stranice iz Flash-a

Programiranje osigurača

1. Izvršiti JTAG PROG_COMMANDS instrukciju

2. Dozvoliti programiranje osigurača pomoću instrukcije 6a

3. Učitati viši bajt podataka pomoću 6b. Ukoliko je vrednost bita 0 osigurač će se programirati i obrnuto.

4. Upisati viši bajt u osigurač pomoću 6c

5. Proveiti da li je upis kompletiran pomoću 6d

6. Učitati niži bajt podataka korišćenjem instrukcije 6e

7. Upisati niži bajt korišćenjem 6f

8. Proveriti da li je upis kompletiran pomoću 6g

Programiranje bitova za zaključavanje

1. Izvršiti JTAG instrukciju PROG_COMMANDS

2. Dozvoliti upis bita zs zaključavanje instrukcijom 7a

3. Učitati podatke korišćenjem instrukcija 7b. Ukoliko je vrednost bita 0 bit za zaključavanje će se programirati i obrnuto.

4. Upisati bitovr za zaključavanje instrukcijom 7c

5. Proveriti da li je operacija upisa kompletirana pomoću instrukcije 7d

Proces čitanja bitova za zaključavanje

1. Izvršiti instrukciju PROG_COMMANDS

2. Dozvoliti čitanje Fuse/Lock bita korišćenjem instrukcije 8a

3. Za čitanje svih bitova za zaključavanje može se koristiti instrukcija 8e

Za čitanje samo viših osiguračkih bajtova koristi se 8b

Za čitanje samo nižih osiguračkih bajtova koristi se funkcija 8c

Za čitanje samo zaključanih bitova koristi se instrukcija 8d

Čitanje bitova za označavanje

1. Izvršiti PROG_COMMANDS

2. Dozvoliti čitanje bitova za označavanje pomoću instrukcije 9a

3. Učitati adresu $00 korišćenjem instrukcije 9b

4. Pročitati prvi bajt za označavanje pomoću 9c instrukcije

5. Ponoviti korake 3 i 4 sa promenom adrese $01 i $02 respektivno

Izlaz iz moda za programiranje

1. Izvršiti JTAG instrukciju PROG_COMMANDS

2. Zabraniti sve instrukcije za programiranje korišćenjem instrukcije 11a (Tabela 5.1) Load No Operation Command

117

Page 119: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

3. Izvršiti instrukciju PROG_ENABLE i učitati 0000 0000 0000 0000 u registar za dozvolu programiranja (Reset registra)

4. Izvršiti JTAG instrukciju AVR_RESET i učitati 0 u reset registar

Pomoću JTAG instrukcija se može izvršiti i programiranje EEPROM memorije i to pomoću sekvence:

1. Izvršiti JTAG instrukciju PROG_COMMANDS

2. Dozvoliti upis u EEPROM pomoću instrukcije 4a

3. Učitati viši bajt adrese pomoću instrukcije 4b

4. Učitati niži bajt adrese pomoću instrukcije 4c

5. Učitati podatake pomoću instrukcija 4d i 4e

6. Ponoviti korake 4 i 5 za sve bajtove u okviru stranice

7. Upisati podatke u EEPROM pomoću instrukcije 4f

8. Proveriti da li je operacija upisa kompletirana pomoću instrukcije 4g

9. Ponoviti korake od 3 do 8 sve dok se svi podaci ne upišu u memoriju

Prilikom upisa podataka u EEPROM nije podržana instrukcija PROG_PAGELOAD.

Čitanje EEPROM-a se obavlja pomoću sekvence:

1. Izvršiti JTAG instrukciju PROG_COMMANDS

2. Dozvoliti čitanje EEPROM-a pomoću instrukcije 5a

3. Uneti adresu korišćenjem instrukcija 5b i 5c

4. Pročitati podatke pomoću instrukcije 5d

5. Ponoviti korake 3 i 4 sve dok se svi podaci ne pročitaju

JTAG instrukcija PROG_PAGEREAD se ne može koristiti za efikasnije čitanje EEPROM memorije.

5.2. Paralelni mod programiranja AVR mikrokontrolera

U okviru ovog poglavlja biće prikazani parametri, način povezivanja i komande koje se koriste prilikom paralelnog moda programiranja Atmel-ovih mikrokontrolera iz serije AVR. Pomoću paralelnog moda programiranja može se programirati: Flash programska memorija, EEPROM memorija za podatke, bitovi za zaključavanje memorije i osigurači svih AVR mikrokontrolera. Treba napomenuti da se veličine pomenutih memorijskih prostora razlikuju u zavisnosti od tipa komponene.

Bitovi za zaključavanje memorije su takođe različiti u zavisnosti od komponente. Zajedničko im je to da se nalaze u okviru jednog bajta i programiraju se sa logičkom “0“, a poništavaju logičkom “1“.

Što se tiče osiguračkih bitova oni su uglavnom organizovani u okviru dva bajta (viši bajt i niži bajt). Osigurački bitovi se, takođe, postavljaju sa logičkom “0“.

Na Slici 5.10 je prikazan raspored pinova koji se koriste za paralelno programiranje.

118

Page 120: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 5.10 Raspored pinova prilikom paralelnog programiranja

U Tabeli 5.2 je dat pregled opisa svih pinova koji se koriste prilikom programiranja.

Tabela 5.2 Pinovi koji se koriste prilikom paralelnog programiranja

Pinovi XA1 i XA0 se koriste za selekciju operacije koja se treba izvršiti. U Tabeli 5.3 su date moguće kombinacije ovih pinova.

Tabela 5.3 Kombinacije pinova XA0 i XA1 za selekciju operacije

5.2.1 Programiranje AVR mikrokontroleraProgramiranje AVR mikrokontrolera u okviru paralelnog moda sastoji se iz niza procedura koje se moraju ispoštovati. Opis ovih procedura je dat u nastavku.

Pre početka procesa programiranja mikrokontrolera, bilo da se radi o programiranju neke od memorija ili nekog od osiguračkih bitova neophodno je uči u mod za programiranje. Za ulazak u mod za programiranje se koristi sledeća sekvenca:

119

Page 121: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

1. Priključiti napon napajanja (4.5 do 5.5 V) na nožice Vcc i GND i sačekati period od 100 µs.

2. Postaviti RESET pin na “0“ i na XTAL dovesti 6 impulsa

3. Postaviti Prog_enable pinove na “0000“ i sačekati vremenski period od 100 ns.

4. Prihvatiti napon od 11.5 do 12.5 V na RESET pinu. Svaka kasnija aktivnost na Prog_enable pinovima neće imati efekta.

U slučaju kada se koristi spoljašnji oscilator ne mogu se precizno kontrolisati impulsi na XTAL1. Zbog toga se za ulazak u mod za programiranje koristi sledeća sekvenca:

1. Postaviti Prog_enable pinove na “0000“

2. Dovesti napon napajanja na Vcc i GND

3. Sačekati 100 µs

4. Ponovo programirati osigurače za selekciju eksternog takta (CKSEL3:0=0000). Ukoliko su programirani bitovi za zaključavanje neophodno je pre programiranja osigurača izvršiti brisanje kompletnog čipa.

5. Ulazak u mod za programiranje se obavlja uz pomoć predhodno opisane sekvence

6. Izlazak iz moda za programiranje se obavlja prekidanjem napona napajanja ili odvođenjem RESET pina na “0“.

U okviru Tabele 5.4 su prikazane vrednosti (četiri bita) na određenim pinovima koje se koriste za ulazak u mod programiranja.

Tabela 5.4 Pinovi za ulazak u mod programiranja

Spisak komandi koje se koriste prilikom programiranja u paralelnom modu su date u okviru Tabele 5.5.

Tabela 5.5 Komande za programiranje u paralelnom modu

Tokom procesa programiranja u okviru komponente se čuvaju učitane komande ili adrese. Radi efikasnijeg programiranja, neophodno je uzeti u razmatranje nekoliko činjenica:

120

Page 122: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

• Komande koje se koriste za čitanje ili upis potrebno je samo jednom učitati prilikom čitanja ili upisa više sukcesivnih memorijskih lokacija.

• Nakon brisanja kompletnog čipa potrebno je izbegavati upis vrednosti podatka 0xFF, koji predstavlja sadržaj kompletno obrisanog EEPROM-a i Flash-a.

• Viši bajt adrese može biti učitan isključivo pre programiranja ili čitanja stranice veće od 256 reči u okviru Flash-a ili 256 bajta EEPROM-a.

5.2.1.1 Postupak za brisanje kompletnog čipaFunkcija brisanja odnosi se na brisanje Flash-a, EEPROM-a i bitova za zaključavanje, dok se brisanje osiguračkih bitova ne može izvršiti. Važno je napomenuti da se bitovi za zaključavanje ne mogu obrisati sve dok se ne obriše kompletna programska memorija. Komanda za brisanje kompletnog čipa se mora izvršiti pre programiranja Flash-a i/ili EEPROM-a. Algoritam koji omogučava učitavanje komande za brisanje kompletnog čipa je:

1. Postaviti XA1 i XA0 na “10“ u cilju dozvole upisa komande.

2. Postaviti BS1 na “0“

3. Postaviti DATA na “1000 0000“. Ovaj podatak predstavlja komandu za brisanje kompletnog čipa.

4. Na XTAL1 dovesti pozitivan impuls radi učitavanja komande

5. Na WR dovesti opadajuću ivicu impulsa u cilju startovanja izvršenja komande. RDY/BSY ide na nisko.

6. Sačekati RDY/BSY da se povrati na visoko pre učitavanja sledeće komande

5.2.1.2 Procedura za programiranje Flash-aFlash memorija mikrokontrolera je organizovana u okviru stranica. Kada se programira Flash, podaci se prvo upisuju u stranični bafer, a zatim se kompletan bafer učita u memorijski prostor. Na taj način se omogućava simultano programiranje kompletnih stranica. Prilikom procesa programiranja kompletne Flash memorije koristi se sledeći algoritam:

A. Učitavanje komande “Write Flash“ za upis podataka u Flash memoriju

1. Postaviti XA1 i XA0 na “10“

2. Postaviti BS1 na “0“

3. Na DATA pinove postaviti “0001 0000“. Komanda upisa u Flash

4. Na XTAL1 dovesti jedan pozitivan impuls

B. Učitavanje nižeg bajta adrese

1. XA1 i XA0 postaviti na “00“ što predstavlja dozvolu upisa adrese

2. Na BS1 dovesti “0“

3. Na DATA ulaze postaviti niži bajt adrese (0x00 do 0xFF)

4. Dovesti na XTAL1 pozitivan impuls

C. Unos nižeg bajta podatka

1. Na XA1 i XA0 dovesti “01“ u cilju dozvole unosa podataka

2. Postaviti na DATA niži bajt podatka (0x00 do 0xFF)

3. Dovesti na XTAL1 pozitivan impuls

D. Unos višeg bajta podatka

121

Page 123: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

1. BS1 postaviti na “1“

2. Postaviti XA1 i XA0 na “01“

3. Postaviti na DATA viši bajt podatka (0x00 do 0xFF)

4. Dovesti na XTAL1 pozitivan impuls

E. Lečovanje podataka

1. Postaviti BS1 na “1“

2. Na pin PAGEL dovesti pozitivan impuls. Na ovaj način se vrši lečovanje jednog bajta podataka. Talasni oblici signala prilikom ove operacije su prikazani na Slici 5.11.

Slika 5.11 Talasni oblici signala prilikom lečovanja podataka

F. Ponoviti korake od B do E sve dok se ne napuni kompletan bafer ili dok se ne upišu svi podaci koji se žele uneti u Flash.

Ukoliko Flash memorija podržava veći adresni prostor tj. 16 bitne adrese potrebno je koristiti sledeći algoritam:

G. Učitavanje višeg bajta adrese

1. Postaviti XA1 i XA0 dovesti “00“

2. BS1 postaviti na “1“ radi selekcije višeg dela adrese

3. Postaviti na DATA viši bajt adrese (0x00 do 0xFF)

4. Dovesti na XTAL1 pozitivan impuls

H. Programiranje stranice

1. Postavit BS1 na “0“

2. Dovesti opadajući impuls na WR, koji startuje programiranje kompletne stranice podataka. RDY/BSY ide na nisko

3. Sačekati dok se RDY/BSY ne vrati na visoko

I. Ponoviti korake od B do H sve dok se ne programira kompletan Flash

J. Programiranje kraja stranice

122

Page 124: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

1. XA1 i XA0 postaviti na “10“

2. Na DATA ulaze dovesti “0000 0000“

3. Na XTAL1 dovesti pozitivan impuls

5.2.1.3 Procedura za čitanje Flash-aAlgoritam koji se koristi prilikom čitanja Flash-a je:

1. Učitavanje komande “0000 0010“, pomoću postupka pod tačkom A. u okviru procedure za programiranje Flash-a

2. Učitavanje višeg bajta adrese, pomoću postupka pod tačkom G. u okviru procedure za programiranje Flash-a

3. Učitavanje nižeg bajta adrese, pomoću postupka pod tačkom B. u okviru procedure za programiranje Flash-a

4. Postaviti OE na “0“ i BS1 na “0“. Nakon ovoga na DATA pinovima će se pojaviti niži bajt podatka koji se nalazi na učitanoj adresi

5. Postaviti BS1 na “1“ Na DATA se pojavljuje viši bajt podatka koji se čita

6. Postaviti OE na “1“

5.2.1.4 Procedura za čitanje EEPROM-a1. A. Učitavanje komande “0000 0011“

2. G. Učitavanje višeg bajta adrese

3. B. Učitavanje nižeg bajta adrese

4. Postaviti OE na “0“ i BS1 na “0“. Nakon ovoga na DATA pinovima će se pojaviti bajt koji se čita iz EEPROM-a

5. Postaviti OE na “1“

5.2.1.5 Procedura za programiranje osiguračkih bitovaAlgoritam za programiranje osiguračkih bitova se sastoji iz dva algoritma i to posebno za programiranje nižih bitova a posebno za programiranje viših bitova. Prilikom programiranja nižih osiguračkih bitova potrebno je ispoštovati sledeći algoritam:

1. A. Učitavanje komande “0100 0000“

2. C. Unos nižeg bajta podataka. Ukoliko je bit n = “0“ osigurački bit se programira i suprotno

3. Postaviti BS1 na “0“ i BS2 na “0“

4. Na WR dovesti opadajuću ivicu impulsa i čekati dok se RDY/BSY ne vrati na visoko.

Ukoliko se programiraju viši osigurački bitovi potrebno je ispoštovati sledeći algoritam:

1. A. Učitavanje komande “0100 0000“

2. C. Unos nižeg bajta podataka. Ukoliko je bit n = “0“ osigurački bit se programira i suprotno

3. Postaviti BS1 na “0“ i BS2 na “0“

4. Na WR dovesti opadajuću ivicu impulsa i čekati dok se RDY/BSY ne vrati na visoko.

5. Postaviti BS1 na “0“

Vremenski dijagram na Slici 5.12 prikazuje signale prilikom programiranja osiguračkih bitova.

123

Page 125: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

Slika 5.12 Talasni oblici signala prilikom programiranja osiguračkih bitova

5.2.1.6 Procedura za programiranje bitova za zaključavanjeProgramiranje bitova za zaključavanje se obavlja pomoću sledećeg algoritma:

1. A. Učitavanje komande “0010 0000“

2. C. Unos nižeg bajta podataka Bit n = “0“ programira bit za zaključavanje

3. Dovesti impuls na WR i čekati RDY/BSY da se vrati na visoko

Potrebno je napomenuti da se brisanje ovih bitova može obaviti isključivo sa komandom za brisanje kompletnog Flash-a.

5.2.1.7 Procedura za čitanje osiguračkih bitova i bitova za zaključavanjeČitanje bitova se obavlja prema sledećem scenariju:

1. A. Učitavanje komande “0010 0000“

2. Postaviti OE na “0“, BS2 na “0“ i BS1 na “0“. Status nižih osiguračkih bitova se može pročitati na DATA portu

3. Postaviti OE na “0“, BS2 na “1“ i BS1 na “1“. Status viših osiguračkih bitova se može pročitati na DATA portu

4. Postaviti OE na “0“, BS2 na “0“ i BS1 na “1“. Status bitova za zaključavanje se može pročitati na DATA portu

5. Postaviti OE na “1“

Na Slici 5.13 je prikazana mapa između BS1, BS2, osiguračkih bitova i bitova za zaključavanje tokom procesa čitanja.

124

Page 126: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Slika 5.13 Blok prikaz BS1, BS2, osiguračkih bitova i bitova za zaključavanje

5.2.1.8 Procedura za čitanje bitova za obeležavanjePrilikom čitanja bitova za obeležavanje mikrokontrolera potrebno je ispoštovati sledeću sekvencu:

1. A. Učitavanje komande “0000 1000“

2. B. Učitavanje nižeg bajta adrese

3. Postaviti OE na “0“ i BS1 na “0“ Traženi podaci su dostupni na DATA portu

4. Postaviti OE na “1“

5.2.1.9 Procedura za čitanje kalibracionih bajtovaČitanje kalibracionih bitova se obavlja pomoću algoritma:

1. A. Učitavanje komande “0000 1000“

2. B. Učitavanje nižeg bajta adrese 0x00

3. Postaviti OE na “0“ i BS1 na “0“ Traženi podaci su dostupni na DATA portu

4. Postaviti OE na “1“

5.3. Programiranje AVR mikrokontrolera u serijskom modu

U okviru serijskog moda za programiranje koristi se ranije opisani SPI protokol i to u Modu 1. Pomoću SPI-a se mogu programirati Flash memorija i EEPROM memorija svih Atmel AVR mikrokontrolera. Serijski interfejs za programiranje (SPI) sadrži SCK, MOSI i MISO linije. U okviru Tabele 5.6 je dat spisak pinova koji se koriste prilikom SPI programiranja.

Tabela 5.6 Pinovi koji se koriste prilikom SPI programiranja

Navedeni pinovi su u isto vreme i standardni pinovi porta PB. Na Slici 5.14 je dat raspored pinova koji se koriste prilikom programiranja.

125

Page 127: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

Slika 5.14 Konfiguracija signala koji se koriste prilikom SPI programiranja

Pin XTAL1 se koristi za dovođenje spoljašnjeg takta koji se koristi za formiranje takta prilikom programiranja. Signal AVCC mora uvek biti u granici od 2.7 V do 5.5 V, a RESET pin postavti na GND. Prva obavezna instrukcija je dozvola programiranja u serijskom modu. Nakon izvršenja ove instrukcije može se izvršiti brisanje kompletnog čipa. U slučaju programiranja EEPROM-a pomoću seriskog moda postoji ugrađena automatska funkcija brisanja kompletnog čipa. Zbog toga prilikom programiranja EEPROM-a nije neophodno prvo izvršiti ovu funkciju. Operacija brisanja EEPROM-a postavlja sve memorijske lokacije na vrednost 0xFF.

Takt koji se koristi za programiranje (SCK) se postavlja pomoću CKSEL osigurača. Minimalni period signala SCK je 2 CPU taktna ciklusa za fck < 12 MHz ili 3 CPU ciklusa za takt fck>12 MHz. Serijski upis podataka se obavlja pomoću rastuće ivice SCK takta, dok se čitanje obavlja opadajućom ivicom signala SCK.

Spisak instrukcija koje se koriste prilikom SPI moda programiranja su prikazane u okviru Tabele 5.7.

Prilikom programiranja ili verifikacije memorije mikrokontrolera u modu za serijsko programiranje potrebno je ispoštovati sledeća pravila:

1. Sekvenca paljenja

Dovesti napon napajanja između Vcc i GND i postaviti RESET i SCK na “0“. U nekim slučajevima na RESET se mora dovesti visoko u trajanju od dva CPU taktna impulsa a nakon toga se SCK postavi na “0“.

2. Sačekati 20 ms i dozvoliti upotrebu SPI programiranja slanjem komande Programming Enable serijski preko MOSI pina.

3. Da bi SPI instrukcije za programiranje funkcionisale neophodno je uspostaviti sinhronizaciju komunikacije programator-mikrokontroler. Ukoliko je sinhronizacija komunikacije uspostavljena nakon slanja instrukcije mikrokontroleru, tj. nakon treceg poslatog bajta instreukcije na MISO izlazu se pojavljuje eho instrukcije. Ukoliko je eho istovetan sa poslatom instrukcijom može se nastaviti sa programiranjem a ukoliko nije, potrebno je na RESET dovesti pozitivan impuls i ponovo poslati komandu.

126

Page 128: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Tabela 5.7 Instrukcije koje se koriste u SPI modu za programiranje

4. U okviru serijskog moda programiranja, Flash memorija mikrokontrolera se upisuje stranicu po stranicu. Veličine stranica kao i veličina memorije je različita u zavisnosti od tipa kontrolera. Prilikom programiranja memorije prvo se vrši učitavanje podataka u bafer stranicu a nakon toga se kompletna stranica upisuje u memoriju mikrokontrolera. Učitavanje podataka u okviru jedne stranice se obavlja pomoću instrukcije Load Program Memory i to jednovremeno jedan bajt. Prilikom učitavanja prvo se upisuje adresa pa niži bajt podatka i na kraju viši bajt podatka. Nakon učitavanja kompletne stranice pomoću instrukcije Program Memory Page vrši se upis stranice u memoriju. Nakon izvršenja ove instrukcije a pre izvršenja sledeće instrukcije, potrebno je čekati određeno vreme (oko 4.5 ms) da se stranica učita. Primer upisa podatka u memoriju je prikazan na Slici 5.15.

127

Page 129: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

5 Programiranje AVR mikrokontrolera

Slika 5.15 Proces upisa podataka u memoriju

5. Programiranje EPROM-a se vrši bajt po bajt. Upis u EEPROM se obavlja pomoću Write instrukcije.

6. Verifikovanje bilo koje memorijske lokacije se obavlja pomoću Read instrukcije. Sadržaj lokacije koja se čita je dostupan na MISO izlazu.

7. Na kraju procesa programiranja je potrebno RESET pin postaviti na “1“ radi vraćanja u mod za normalni rad

8. Sekvenca gašenja zahteva postavljanje RESET pina na “1“ i prekinuti napon napajanja Vcc.

128

Page 130: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

6. Predlog za izradu univerzalnog programatoraU okviru narednog poglavlja dato je hardversko rešenje univerzalnog programatora. Ovaj programator je predviđen radi programiranja Silabs-ovih C8051fxxx, Atmel-ovih 89Cxxxx i Atmelovih AVR mikrokontrolera. Za programiranje Silabs-ovih C8051fxxx mikrokontrolera koristi se univerzalni JTAG interfejs, dok se za programiranje Atmel-ovih mikrokontrolera koristi serijski SPI interfejs.

6.1 Hardware programatora

Na fizičkom nivou programator (Programmer Main board) poseduje RS 232 port za povezivanje sa host računarom. Pored veze sa PC-em programator poseduje i Universal interfejs koji služi za povezivanje jedne od više vrsta kartica za programiranje. Univerzalni interfejs predstavlja jedan 16 to pinski IDE konektor. Šema programatora na blokovskom nivou je prikazana na Slici 6.1.

PC

Programmer Main board

Programming adapter

TargetMCU-s Board

}Rs232Interface

Universal Interface

Slika 6.1 Blokovski prikaz programatora

Postoje dve vrste kartica za programiranje i to: Programming adapter kartice i Target MCU Board kartice. Obe vrste kartica se posebno izrađuju za Atmel-ove a posebno za Silabs-ove mikrokontrolere.

Programming adapter kartica koja se koristi za programiranje Atmel-ovih mikrokontrolera poseduje SPI konektor pomoću koga se povezuje ploča sa mikrokontrolerom koji se želi programirati, dok Programming adapter kartica za Silabs-ove mikrokontrolere poseduje JTAG konektor koji se koristi u iste svrhe. U okviru Dodatka A je prikazana kompletna električna šema JTAG Programming Adapter-a i SPI Programming Adapter-a.

Target MCU Board kartica se izrađuje kao specifična kartica za određeni tip mikrokontrolera (Atmel ili Silabs) i poseduje specifično podnožje u koje se ubacuje čip, odnosno mikrokontroler koji se želi programirati.

Programmer main board ploča predstavlja osnovnu ploču programatora. Na ploči se nalazi mikrokontroler (MCU) koji upravlja radom programatora. Blok šema osnovne ploče je prikazana na

Page 131: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

6 Predlog rešenja univerzalnog programatora

Slici 6.2, dok je kompletna električna šema data u okviru Dodatka A pod imenom Programming main board.

Slika 6.2 Blokovski prikaz osnovne ploče programatora

Centralni MCU je Silabs-ov C8051F340. Na Slici 6.3 je prikazano okruženje mikrokontrolera. Mikrokontroler poseduje ugrađeni oscillator, UART i SPI interfejs te su stoga ti blokovi prikazani unutar MCU. Blokovi označeni isprekidanim linijama (Eksterni Flash i LCD) su opcioni.

Slika 6.3 MCU na osnovnoj ploči programatora

130

Page 132: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Električna šema osnovne ploče programatora (Programmer Main board), Programming adapter kartice za programiranje Atmel-ovih mikrokontrolera, Programming adapter kartice za programiranje Silabs-ovih i Target board kartice za programiranje Silabs XXX mikrokontrolera su prikazane u dodatku na kraju rada.

6.2 Protokoli za komunikaciju sa PC-m

Zbog velikog broja različitih instrukcija koje se koriste prilikom programiranja mikrokontrolera a i jednostavnijeg proširenja, usvojeno je rešenje gde se većina informacija obrađuje u host PC-u a da firmver programatora, uslovno rečeno, samo preusmeri odgovarajuću instrukciju na određeni port.

Analizom tabela koje sadrže spiskove instrukcija za programiranje Atmel-ovih mikrokontrolera pomoću SPI interfejsa utvrđeno je da su sve instrukcije sastavljene od četiri bajta, izuzev instrukcija za upis/čitanje memorije u straničnom modu. Primer instrukcija je prikazan u okviru Tabele 6.1 Pored toga, u većini slučajeva (prilikom operacija čitanja mikrokontrolera) četvrti bajt predstavlja podatak koji se dobija na MISO liniji.

Tabela 6.1 Pregled SPI instrukcija za programiranje Flash-a kod Atmel-ovih mikrokontrolera

Kolona Byte 1 koja je prikazana u Tabeli 6.1 je identična kod svih Atmel-ovih mikrokontrolera. Na osnovu ovih činjenica odlučeno je da se u okviru firmvera, mikrokontrolera koji upravlja radom programatorora, formira funkcija koja će prva tri bajta određene instrukcije direktno proslediti na SPI interfejs, a prilikom slanja četvrtog bajta instrukcije osluškivati povratnu informaciju od kontrolera čija se memorija programira. Ovako “uhvaćenu” informaciju potrebno je vratiti host PC-u radi dalje analize.

Formiran je protokol između PC-a i mikrokontrolera na osnovnoj ploči programatora. Postoje dva tipa poruka: poruke koje se šalju prema mikrokontroleru i povratne poruke od mikrokontrolera ka PC-u. Poruke se šalju putem standardnog serijskog porta sa parametrima konekcije: promenjive brzine prenosa u bps, 8 bit data, none parity, stop bit 1, Flow control none.

131

Page 133: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

6 Predlog rešenja univerzalnog programatora

Format poruka koje šalje PC je oblika kao na Slici 6.4.

0 1 2 3 4 5 6Id TypeMCU DByte1 DByte2 DByte3 DByte4 <CR>

Slika 6.4 Format instrukcije koja se šalje ka programatorskoj ploči

Id – Bajt za identifikaciju, obavezan za sve poruke, označava početak poruke.

TypeMCU – polje za definisanje tipa i načina programiranja mikrokontrolera koji se programira. Vrednosti ovog polja mogu biti: 0x00 za Atmel-ove mikrokontrolere koji se programiraju uz pomoć SPI protokola; 0x01 za Silabs-ove mikrokontrolere koji se programiraju uz pomoć JTAG interfejsa.

DByte1, DByte2, DByte3 i DByte4 – predstavljaju bajtove koji nose korisne informacije tokom programiranja. Ovi bajtovi imaju različito značenje za različite načine programiranja.

<CR> - Carriage Return označava kraj poruke.

Izgled poruke koja se šalje od strane mikrokontrolera ka PC-u je prikazana na Slici 6.5.

0 1 2Id ConfOut <CR>

Slika 6.5 Instrukcija koja se šalje ka PC-ju

Id – Polje identifikatora.

ConfOut – Bajt predviđen za prenos povratnih informacija od strane mikrokontrolera ka PC-u.

<CR> - (0x0D) Kao i u predhodnoj poruci predstavlja oznaku kraja poruke.

Primer poruke za slanje instrukcije Programming Enable Atmel-ovom mikrokontroleru za dozvolu programiranja korišćenjem SPI protokola j eprikazana na Slici 6.6

0 1 2 3 4 5 60x3A 0x00 0xAC 0x53 0x00 0x00 0x0D

Slika 6.6 Primer instrukcije za dozvolu programiranja

Nulti bajt nosi oznaku za identifikaciju 0x3A (ASCII karakter “ : ” ) i označava početak poruke. Prvi bajt označava Atmel mikrokontroler sa SPI načinom programiranja, drugi i treći bajt su oznaka Programming Enable instrukcije, četvrti i peti bajt nisu od značaja prilikom slanja ove instrukcije a šesti bajt označava kraj poruke.

Kao potvrdu uspešno izvršene dozvole programiranja mikrokontroler šalje PC-ju poruku sledeće sadržine (Slika 6.7).

0 1 20x3A 0x53 0x0D

Slika 6.7 Primer povratne instrukcije

Nulti bajt je bajt identifikacije 0x3A, prvi bajt predstavlja povratnu informaciju sa SPI i poslednji bajt je kraj poruke.

Prilikom programiranja Silabs-ovih mikrokontrolera pomoću JTAG interfejsa poruka ima oblik kao na Slici 6.8.

0 1 2 3 4 5 6Id 0x01 Ins AddH AddL DByte <CR>

Slika 6.8 Prikaz instrukcije za programiranje Silabs-ovih mikrokontrolera

132

Page 134: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Metode programiranja savremenih mikrokontrolera

Ins - polje označava poruku koja se koristi za programiranje mikrokontrolera. Ovo polje može imati sledeće vrednosti: 0x00 Erase Flash, 0x01 Byte Read, 0x10 Byte Write.

AddH – polje predstavlja viši bajt adrese

AddL – polje je niži bajt adrese

Dbyte – polje predstavlja podatak koji se upisuje u Flash ili se čita iz Flash-a

Polja 0, 1 i 6 su ranije opisana.

Primer poruke koja se šalje u cilju brisanja Flash-a je prikazana na Slici 6.9.

0 1 2 3 4 5 60x3A 0x01 0x00 0001 0000* 0000 0000* 0x00 <CR>

* Binarna reprezentacija vrednosti Slika 6.9 Primer instrukcije za brisanje Flash memorije

U okviru drugog bajta upisana je vrednost 0x00 koja označava Erase Flash instrukciju, treći i četvrti bajt sadrže početnu adresu (0x1000) sa koje se počinje brisanje Flash memorije mikrokontrolera.

6.3 Firmware programatora

Firmware programatora je razvijan pomoću Keil uVision 3 IDE alata. Zbog jednostavnosti pisanja koda odlučeno je da se isti piše u C programskom jeziku.

Projekat Firmware-a sadrži tri foldera i to: Folder Headers u kome se nalaze header fajlovi JTAG_headers.h, SPI_headers.h i UART_headers.h; Folder Source koji sadrži sledeće potprograme: PGM_JTAG.c, PGM_SPI.c i PGM_UART.c; Folder Main u kome se nalazi glavni program. Na Slici 6.10 je prikazan Screen Shoot IDE alata.

Slika 6.10 Izgled Keil IDE okruženja

133

Page 135: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

6 Predlog rešenja univerzalnog programatora

Algoritam glavnog PGM_main.c programa je prikazan na Slici 6.11. Na samom početku izvršavanja programa vrše se inicijalizacije sistemskog takta i UART-a. UART je definisam da radi u okviru interapta. U okviru beskonačne petlje program testira receive flag sa ciljem da se obradi instrukcija koja je pristigla od strane PC-a. Instrukcija koja stigne od strane PC-a se nakon prijema proverava da li počinje sa karakterom „:“ i smesta u UART_Buffer. Nakon hvatanja instrukcije proverava se da li je instrukcija predviđena za programiranje preko SPI ili preko JTAG-a. Nakon toga program skače na izvršavanje odgovarajuće podprogramske sekvence. Kompletan listing firmware-a je dat u okviru Dodatka B na kraju rada.

Pocetak

Rx

Init

neda

UART_Buffer[1]=Atmel SPI

da

ne

SPIProcedure

UART_Buffer[1]=Silabs JTAG

ne

da

JTAGProcedure

While(1)da

ne

Kraj

Slika 6.11 Algoritam glavnog programa

134

Page 136: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

Literatura1. Jelmer Vernooij, Programming the AT89S8252 using SPI, August 20032. John Marriott, SPI and JTAG In-System Programming (ISP) guidelines for the Atmel

ATmega AVR FLASH Microcontroller Family, June 20073. Atmel Wireless & uC, In-System Programming- T89C51RD2 Bootloader Operating

Modes, ANM095, Rev.A Januar 20014. Atmel, USB Microcontrollers, AT89C5131A USB Bootloader, Rev. 4287D-USB-08/075. Atmel, C51 MCU`s, Design Guide for Atmel`s C51 Standard Devices, Rev. 7764A-

8051-11/076. Atmel, 8-bit AVR Microcontrollers, Application Note AVR231:AES Bootloader,

Rev.2589D-AVR-08/067. Atmel, 8-bit AVR Microcontroller, Application Note AVR230:DES Bootloader,

Rev.2541D-AVR-04/058. Atmel, 8-bit AVR RISC Microcontroller, Application Note AVR109:Self Programming,

Rev.1644G-AVR-06/049. Atmel, AT90USB128x, AT90USB64x, USB DFU Bootloader Datasheet, Rev. 7618B-

AVR-03/0810. Atmel, 80C51 Microcontrollers, AT89C51AC3 UART Bootloader, Rev.4386A-8051-

10/0411. Atmel, 8-bit Low-Voltage Microcontroller AT89LS51, Datasheet, Rev.3053B-MICRO-

03/0512. Atmel, 8-bit Microcontroller AT89S2051 AT89S4051, Datasheet, Rev.3390D-MICRO-

03/0713. Atmel, 8-bit Microcontroller with 4K Bytes Flash AT89C51, Datasheet, Rev.0265G-

02/0014. Atmel, 8-bit Microcontroller with 2K Bytes Flash AT89C2051, Datasheet, Rev.0368G-

06/0515. Atmel, 8-bit Microcontroller with 12K Bytes Flash AT89S8253, Datasheet, Rev.3286K-

MICRO-12/0616. Atmel, 8-bit Flash Microcontroller AT89C51RD2/AT89C51ED2, Datasheet, Rev.4235J-

8051-01/0817. Atmel, 8-bit AVR Microcontroller ATmega8/ATmega8L, Datasheet, Rev.2486S-AVR-

08/0718. Atmel, 8-bit AVR Microcontroller ATmega16/ATmega16L, Datasheet, Rev.2466P-AVR-

08/0719. Atmel, 8-bit AVR Microcontroller ATmega64/ATmega64L, Datasheet, Rev.2490M-AVR-

08/07

Page 137: SEMINARSKI RAD - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Seminar works DAS/Metode programiranja savremenih... · Metode programiranja savremenih mikrokontrolera 1.1 Programiranje Flash-a

20. Atmel, 8-bit AVR Microcontroller ATmega169V/ATmega169, Datasheet, Rev.2514S-AVR-07/06

21. Atmel, In-System Programming – Serial Protocol Stack for C51 Products, ANM088, Rev B 01/2001

22. Atmel, C51 In-System FLASH Programming, ANM076, Rev. A 01/20023. Atmel, Self Programming, AVR109, Rev. 1644G-AVR-06/0424. Silicon Laboratories, Programming Flash through the JTAG Interface, AN105-DS14,

Rev.1.4 12/0325. Silicon Laboratories, Flash Programming via the C2 Interface, AN127-DS11, Rev.1.1

12/0326. www.atmel.com 27. www.silabs.com 28. www.jtag.com