Metoda programarii "in sistem" si "in aplicatie" (ISP si IAP) pentru familia de microcontrolere cu memorie Flash - 89C51RX2
Proprietati microcontroler
Ram intern: 512B, 1KB
Ram extern 64KB
Memorie Flash EPROM: 8k, 16k, 32 717f51h k, 64kB
Admite 6/12 perioade de tact/ciclu masina, programabil printr-un bit din registru SFR sau bit din memoria Flash
33MHz la 12 cicluri de tact/ ciclu masina; 20MHz la 6 cicluri de tact/ ciclu masina
Intreruperi: 7 surse de intreruperi cu 4 nivele de prioritate
4 porturi paralele de 8 biti
Compatibilitate a codului si a pinilor cu 80C52
Memoria Flash
Memoria Flash creste functionalitatea EPROM-ului standard prin posibilitatea stergerii si a programarii seriale "in sistem" si "in aplicatie", alaturi de metoda clasica care utilizeaza programatoare paralele.
Programarea
"in aplicatie" (In-application Programming - IAP)
permite microcontroler-ului sa receptioneze un nou cod
si sa se autoprogrameze, fiind plasat fizic, evident, in sistem. Pentru
aceasta, programul utilizator sterge si programeaza memoria Flash utilizind
rutine standard disponibile in Boot
Blocul Status Byte si Boot Vector
Blocul de memorie contine cele doua registre ale memoriei Flash:
Status Byte selecteaza, la pornire (dupa reset sau alimentare) programul utilizator de la adresa 0h (Status Byte=0) sau monitorul serial din Boot ROM (Status Byte diferit de 0)
BootVector este folosit ca octet superior pentru adresa de executie a monitorului serial ( octetul inferior este zero). Deoarece setarea din fabricatie pentru BootVector este FCh rezulta adresa FC00h pentru monitorul serial ISP (Boot Loader ISP) din Boot ROM.
Cele doua registre se programeaza independent iar stergerea unuia dintre ele sterge continutul intregului bloc de memorie.
Fig.1. Organizarea memoriei Flash
Blocul contine 3 biti de securitate si 1 bit pentru configurare clock (6/12 perioade) si poate fi sters doar prin functia de stergere completa memorie (nu prin cea de stergere bloc).
Bitii de securitate protejeaza impotriva pirateriei soft, prevenind posibilitatea citirii continutului memoriei Flash si asigura 4 nivele diferite de protectie pentru codul si datele programului (tabelul 1)
Tabelul 1.
Biti de securitate |
Protectia asigurata |
|||
Nivel |
LB1 |
LB2 |
LB3 |
|
Octeti de cod din memoria interna nu pot fi cititi cu instructiile MOVC executate din memoria externa |
||||
|
Operatia "Stergere bloc memorie" este blocata |
|||
Operatia "Verificare (citire) cod memorie" este blocata |
||||
Executia unui program extern este blocata |
In spatiul ultimului Koctet de memorie Flash (de la adresa FC00h) poate fi selectata memoria fixa ROM (Boot ROM) care contine un monitor (incarcator) serial si rutinele de baza pentru stergerea, programarea si citirea memoriei.
Zona de ROM este mascata din fabricatie si poate fi validata prin program. Mascarea Boot ROM este controlata cu bitul ENDBOOT; daca ENDBOOT=1 accesul la rutinele Boot ROM este posibil iar daca ENDBOOT=0 zona de ROM este mascata si ultimul Koctet este vazut ca memorie de cod.
Memoria Flash poate fi programata folosind 3 metode:
Metoda traditionala de programare paralela utilizind programatoare dedicate.
Metoda programarii in sistem (ISP) prin portul serial.
Metoda programarii in aplicatie (IAP) sub controlul programului utilizator.
Programarea ISP este un proces in care un microcontroler montat pe o placa (deci, in sistem) poate fi programat cu un cod al utilizatorului, prin portul serial, fara a fi nevoie ca microcontrolerul sa fie scos de pe placa. Pentru a executa operatii ISP microcontrolerul este plasat la pornire intr-un mod special, denumit mod ISP. Acesta permite microcontroler-ului sa comunice cu un echipament conectat prin portul serial cum ar fi un PC sau un terminal de la care primeste comenzi si date pentru programarea memoriei.
Dupa ce operatia ISP a fost finalizata, microcontrolerul este reconfigurat astfel incat dupa RESET sau realimentare sa intre in modul normal de functionare in care executa cod utilizator.
Programarea ISP este posibila cu un minim de componente aditionale, utilizind doar 5 pini: TxD, RxD, Vss, Vcc si Vpp (vezi figura 2), care de regula se leaga la un conector al placii prevazut special in acest scop.
Fig.2. Pinii utilizati pentru implementarea ISP
Executie cod dupa RESET
Pe frontul descrescator al RESET, procesorul examineaza continutul din Status Byte (figura 3). Daca este 0, executia programului porneste de la locatia 0h care este adresa normala de start pentru codul utilizator. Daca registrul StatusByte este setat pe alta valoare decat 0, continutul din celalalt registru, Boot Vector este folosit ca octet superior pentru adresa de executie iar octetul inferior este zero.
Deoarece setarea din fabricatie pentru BootVector este FCH rezulta adresa FC00H pentru monitorul serial ISP (BootLoader ISP) din Boot ROM.
Utilizatorul poate scrie un BootLoader propriu si apoi incarca registrul BootVector cu o valoare care sa pointeze BootLoader-ul dorit.
Activare hard a monitorului serial
Monitorul serial poate fi executat (pornit) si prin hard, prin pozitionarea unor semnale ale microcontrolerului : PSEN pe nivel Low, EA/Vpp mai mare decit VIH si ALE High (sau neconectat), pe frontul descrescator al resetului (acelasi efect ca si un registru StatusByte diferit de 0). Aceasta permite unei aplicatii sa fie construita pentru a executa in mod normal codul utilizator, dar care poate fi fortata manual in mod ISP.
Fig.3. Intrarea in mod ISP
Pentru a primii comenzi si date de la echipamente externe, monitorul serial din Boot ROM foloseste inregistrari de tip IntelHex.
Inregistrarile se formeaza din caractere ASCII pentru a reprezenta valori hexazecimale si sunt construite astfel:
NNAAAARRDD.DDCC (<crlf>)
Unde:
NN reprezinta numarul de octeti de date din inregistrare (maxim 16 octeti de date).
AAAA reprezinta adresa primului octet din inregistrare. Daca inregistrarea nu contine octeti acest camp este de obicei pozitionat la 0000.
RR indica tipul de inregistrare. O inregistrare de tip 00 contine date iar o inregistrare de tip 01 indica sfarsitul fisierului hex. Vor fi utilizate tipuri de inregistrari aditionale (02 - 06) pentru a indica comenzi sau date pentru ISP.
DD reprezinta octetii de date ce vor fi inscrisi in memorie
CC reprezinta suma de control in complement de 2
Se recomanda folosirea urmatorilor pasi pentru programarea ISP:
Trimiterea unui caracter "U" de la Host la microcontroler pentru stabilirea ratei de transfer.
Trimiterea unei inregistrari pentru specificarea frecventei de tact.
Trimiterea unei inregistrari pentru stergerea blocurilor dorite.
Trimiterea unei inregistrari pentru programarea datelor dorite in memorie.
Trimiterea unei inregistrari pentru stergerea registrelor StatusByte si BootVector dupa ce operatia ISP a fost finalizata cu succes.
Trimiterea unei inregistrari pentru programarea BootVector la valoarea originala (FCH) pentru apelul corect al monitorului serial din Boot ROM.
Scrierea 00h in StatusByte daca se doreste ca programul sa inceapa de la adresa 0h dupa RESET.
Utilizarea ISP
ISP permite folosirea unei game largi de rate de transfer si este de asemenea adaptabil la o gama larga de frecvente a oscilatorului.
Utilizarea ISP necesita ca un caracter initial ("U") sa fie trimis microcontroler-ului pentru stabilirea ratei de transfer seriala (se masoara perioada unui bit si se programeaza corespunzator portul serial).
In continuare softul ISP accepta numai inregistrari de tip IntelHex. Cind o inregistrare este receptionata in intregime de catre microcontroler, informatia din inregistrare este memorata intern si este efectuat calculul sumei de control.
In cazul in care apare o eroare, se trimite un caracter "X" la portul serial indicand eroarea. Daca suma de control calculata corespunde celei din inregistare, comanda va fi executata. In cele mai multe cazuri receptionarea cu succes a inregistrarii va fi indicata prin transmiterea unui "." catre portul serial.
In cazul unei inregistrari de date caracterul "." va fi trimis numai daca suma de control este corecta si toti octetii de date din inregistrare au fost programati cu succes. Pentru o inregistrare de date, "X" indica faptul ca suma de control nu a corespuns iar "R" indica faptul ca un octet nu a fost programat corespunzator.
Inaintea unei inregistrari de date este necesara trimiterea unei inregistrari de tip 02 care precizeaza frecventa de tact, informatie necesara microcontroler-ului pentru generarea ratei de transfer si temporizarea impulsurilor de programare.
WinISP este un software utilitar pentru programarea ISP si este disponibil pe pagina de web Philips.
Functiile de programare asigura urmatoarele functiuni (tabelul 2):
Stergere: memorie(completa), bloc memorie (4K, 8K, 16K), biti securitate, registrii memorie.
Programarea si citirea/verificarea memoriei Flash.
Programarea si citirea bitilor de securitate, a registrilor memoriei, a bitului de configurare tact.
Citirea octetilor de identificare (ID producator, ID circuit)
Tabelul 2.
Metoda Programarii In Aplicatie (IAP)
Metoda presupune apelul unor functii disponibile in Boot ROM, din programul utilizator. Functiile de programare sunt selectate prin setarea unor registre ale microcontroler-ului (R0, R1, DPTR, ACC) inainte de apelul (instructia CALL) prin punctul de intrare comun notat PGM_MTP (adresa FFF0). Codul utilizator care ruleaza trebuie sa fie intr-un bloc de memorie diferit de cel care se programeaza.
Frecventa oscilatorului este un numar intreg rotunjit in jos la cea mai apropiata frecventa in MHz.
(de exemplu se seteaza registrul R0 la 11 pentru 11.0592 Mhz). Rezultatele sunt returnate in registru acumulator ACC. Apeluri IAP sunt prezentate in tabela 3.
Tabelul 3.
|