Blocarea memoriei program
S-a sugerat ca în pagina MCS 51 să fie inclus conținutul acestei pagini sau secțiuni. |
Acest articol sau secțiune are mai multe probleme. Puteți să contribuiți la rezolvarea lor sau să le comentați pe pagina de discuție. Pentru ajutor, consultați pagina de îndrumări.
Nu ștergeți etichetele înainte de rezolvarea problemelor. |
Fie că este vorba de un programator amator sau de o firmă care activează în domeniul militar, indiferent de situație se dorește protejarea codului sursă împotriva accesului neautorizat sau a copierii. Pentru a facilita acest lucru producătorii de microcontrollere au dezvoltat diverse facilități prin care autorii să prevină descărcarea codului de pe microcontroller. Aceasta metodă de a preveni copierea poate fi văzută ca o blocare (a accesului neautorizat).
Blocarea memoriei program în cazul familiei MCS-51
[modificare | modificare sursă]Pentru a asigura un anumit grad de protecție împotriva accesului din exterior la memoria program, MCS-51 oferă un mecanism de blocare a memoriei program. Tabelul alăturat prezintă facilitațile de blocare ale unor dispozitive din familia MCS-51:
Dispozitiv | Nr de biți de blocare prezenți |
---|---|
8751H | 1 |
8751BH, 8752BH, 89C2051 | 2 |
87C51, 89C51, 89C52 | 3 |
Biții de blocare pot fi programați de orice programator și șterși prin ștergerea întregului cip. În acest mod se pierde și programul scris în memorie. Când avem la dispoziție mai mulți biți de blocare se pot implementa mai multe niveluri de securitate a conținutului memoriei program.
Un bit de blocare
[modificare | modificare sursă]Cu un singur bit disponibil, în cazul în care rămane neprogramat, memoria program poate fi citită din exterior iar programarea poate continua. De asemenea este permisă și executarea de instrucțiuni din memorie program externă. Cu toate acestea, în cazul în care acest bit de blocare este programat, memoria nu mai poate fi citită din exterior și nici programarea suplimentară nu mai este posibilă. Mai mult decât atât, cipul nu mai poate accesa memorie program externă. Toate aceste facilități pot fi recâștigate prin ștergerea conținutului bitului de blocare, odată cu conținutul memoriei program. Fără ștergerea celei din urmă, bitul nu poate fi șters.
Doi biți de blocare
[modificare | modificare sursă]În cazul în care avem la dispoziție doi biți de blocare, facilitățile oferite de cazul cu un singur bit sunt implementate în doi pași. Prin programarea doar a unui singur bit, cipul poate fi verificat (memoria program poate fi citită), dar nu se mai poate programa suplimentar. Această posibilitate de verificare poate fi suprimată prin programarea și a celui de al doilea bit.
Exemplu
[modificare | modificare sursă]În cazul lui 8751BH/8752BH cele două niveluri de blocare al memoriei program constau în 2 biți de blocare și a unui vector de criptare de 32 de octeți folosiți pentru protecția memoriei program împotriva pirateriei software.
În cadrul EPROM exista un vector de criptare de 32 de octeți, toți inițial neprogramați (ocupați cu 1). De fiecare dată când un octet este adresat în timpul unei verificări, sunt folosite 5 adrese pentru a selecta un octet din vectorul de criptare. Acest byte devine exclusive-NORed (XNOR) creându-se astfel un Encrypted Verify byte. Algoritmul, cu vectorul in forma neprogramată, va returna codul în forma sa originală, nemodificată.
Se recomandă ca de fiecare dată când se folosește vectorul de criptare, măcar un bit de blocare să fie programat.
Cei doi biți de blocare (Lock Bits) funcționează ca în tabelul de mai jos:
LB1 | LB2 | Efect |
---|---|---|
Neprogramat | Neprogramat | Codul este asigurat la un nivel minim. (verificarea codului este criptată de vectorul de criptare) |
Programat | Neprogramat | Instrucțiunile MOVC executate de pe memoria program externă nu au dreptul de a accesa octeți din memoria internă. |
Programat | Programat | La fel ca în cazul anterior, dar verificarea nu este permisă. |
Neprogramat | Programat | Rezervat pentru viitor. |
Trei biți de blocare
[modificare | modificare sursă]În cazul în care sunt oferiți trei biți de blocare, programarea unui singur bit duce la inactivarea posibilității de a folosi instructiunea MOVC astfel încât memoria externă să nu mai poată fi accesată. De asemenea nu permite programarea suplimentară. Verificarea memoriei este blocată prin programarea celui de-al doilea bit și execuția de cod de pe memoria externă este oprită prin programarea celui de-al treilea bit.
Exemplu
[modificare | modificare sursă]În cazul lui 89C52 puteți observa mai jos tabelul cu logica de programare a pinilor de blocare.
LB1 | LB2 | LB2 | Efect |
---|---|---|---|
Neprogramat | Neprogramat | Neprogramat | Codul nu este protejat |
Programat | Neprogramat | Neprogramat | Instrucțiunile MOVC executate de pe memorie program externă nu au dreptul de a accesa octeți din memoria internă. |
Programat | Programat | Neprogramat | La fel ca în cazul anterior, dar verificarea nu este permisă. |
Programat | Programat | Programat | La fel ca și în cazul anterior, dar nu se poate executa cod de pe memorie externă. |
Bibliografie
[modificare | modificare sursă]- 8051 Microcontroller : Internals, Instructions, Programming & Interfacing de Ghoshal Subrata
- [PhD]Copy Protection in Modern Microcontrollers de Sergei P. Skorobogatov
- MCS51, 8-BIT CONTROL-ORIENTED MICROCONTROLLERS