Intel HEX
Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 14 decembrie 2017; verificările necesită
23 de modificări .
Intel HEX este un format de fișier conceput pentru a reprezenta date binare arbitrare sub formă de text. Din motive istorice, este standardul de facto pentru intermiterea diferitelor microcircuite cu memorie ( microcontrolere , ROM , EEPROM etc.). În consecință, majoritatea instrumentelor pentru pregătirea imaginilor firmware ( compilatoare , editori, vizualizatoare etc.) pot funcționa cu acest format.
Fișierul are de obicei extensia .hex. Numele I8HEX, I16HEX și I32HEX sunt uneori folosite pentru a identifica setul de înregistrări utilizate într-un fișier. I8HEX folosește doar intrări cu tipurile 00/01 (adresare pe 16 biți), I16HEX adaugă intrări 02/03 (adresare pe 20 de biți), iar I32HEX adaugă intrări 04/05 (adresare pe 32 biți).
Avantajul formatului (spre deosebire de binarul simplu) este capacitatea de a specifica doar anumite zone de adrese (cu precizie de octet ). Multe arhitecturi de microcontrolere au mai multe zone de programare cu lacune extinse de adresare între ele.
Format de înregistrare
Explicația unu
Fișierul este format din linii de text ASCII . Fiecare linie reprezintă o intrare. Fiecare intrare începe cu două puncte ( : ), urmate de un set de cifre hexazecimale care sunt multipli ai unui octet :
- Începe înregistrare ( : ).
- Numărul de octeți de date conținute în această intrare. Ocupă un octet (două cifre hexazecimale), care corespunde la 0 ... 255 în zecimală .
- Adresa de pornire a blocului de date care trebuie scris este de 2 octeți. Această adresă definește locația absolută a datelor acestei intrări în fișierul binar.
- Un octet indicând tipul de înregistrare. Sunt definite următoarele tipuri de înregistrări:
- 0 - Intrarea conține date de fișier binar.
- 1 - înregistrarea indică sfârșitul fișierului , nu conține date. Are forma caracteristică „:00000001FF”.
- 2 — introducerea adresei segmentului (pentru detalii, vezi mai jos).
- 4 - introducerea adresei extinse (a se vedea mai jos pentru detalii).
- Octeți de date care urmează să fie stocați în EPROM (numărul acestora este specificat la începutul înregistrării, de la 0 la 255 de octeți).
- Ultimul octet din intrare este suma de control . Se calculează astfel încât suma tuturor octeților din înregistrare să fie egală cu 0.
- Linia se termină cu o pereche standard CR/LF (0Dh 0Ah).
Explicația doi
Un fișier Intel HEX poate conține orice număr de intrări. Fiecare intrare este un șir ASCII format din mai multe perechi de cifre hexazecimale. Șirul trebuie să înceapă cu un caracter două puncte și să se termine cu o pereche de caractere CR și LF. Înregistrarea constă din cinci câmpuri în următorul format:
: LL AAAA TT DD… CC
Fiecare grup de litere (LL, AAAA, TT etc.) este un câmp separat. Fiecare literă este o cifră hexazecimală separată (4 biți). Fiecare câmp este format din cel puțin două cifre hexazecimale (un octet). Mai jos este o defalcare a câmpurilor de înregistrare:
- : Fiecare intrare din fișierul Intel HEX trebuie să înceapă cu două puncte.
- Câmp LL Lungime - arată numărul de octeți de date (DD) din înregistrare.
- Câmp Adresă AAAA - Reprezintă adresa de început a intrării.
- Câmpul TT Type. Poate lua următoarele valori:
- Intrarea 00 conține date de fișier binar.
- Intrarea 01 este sfârșitul fișierului.
- 02 introducerea adresei segmentului (a se vedea mai jos pentru detalii).
- 03 Adresa de pornire a lansării programului în format 80x86 (valorile registrelor CS:IP ale contorului programului și ale registrului offset)
- 04 introducerea adresei extinse (a se vedea mai jos pentru detalii).
- 05 Adresă de pornire a programului pe 32 de biți în spațiul de adrese „liniar”.
- Câmp de date DD. O înregistrare poate conține mai mulți octeți de date. Numărul de octeți de date trebuie să corespundă câmpului LL.
- Câmpul Sumă de control CC. Câmpul sumei de control se calculează prin adăugarea valorilor tuturor octeților (perechile de cifre hexazecimale) ale înregistrării modulo 256, urmată de conversia într- un format suplimentar (scăderea valorii rezultate din 0). Astfel, dacă însumați toate perechile de numere hexazecimale, inclusiv LL, AA, TT, DD, CC, obțineți 0.
Segmentul de introducere a adresei
Un fișier în format Intel HEX poate conține intrări pentru procesoarele Intel 8086 care definesc adresa segmentului (cu alte cuvinte, numărul paragrafului, un paragraf este de 16 octeți). Dacă este utilizată directiva H167, atunci acest tip de înregistrare înlocuiește înregistrarea de adresă liniară extinsă. Numărul de paragraf este utilizat ca decalaj de adresă pentru toate înregistrările de date care urmează acestei înregistrări. Offset-ul este deplasarea adresei de patru biți la stânga. De exemplu, un offset de 0x1234 ar da adresa reală 0x12340. Exemplu de înregistrare:
: 02 0000 02 1000 EC
Unde:
- 02 Număr de octeți de date
- 0000 este întotdeauna egal cu 0000 în acest tip de înregistrare
- 02 Tipul de înregistrare 02 (înregistrarea adresei segmentului).
- 1000 Număr de paragraf (adresa reală va fi 0x10000).
- Suma de control EC
Introducerea adresei extinse
Când este utilizată directiva H167, fișierul în format Intel HEX va conține posibil intrări de adrese liniare extinse. Acest tip de intrare definește valorile celor mai semnificativi doi octeți ai adresei absolute (biții 16-31). Acești doi octeți cei mai importanți ai adresei vor fi utilizați ca compensare a adresei pentru toate înregistrările de date care urmează acestei înregistrări. Exemplu de înregistrare:
: 02 0000 04 00FF FB
Unde:
- 02 Număr de octeți de date
- 0000 Întotdeauna 0
- 04 Tip de înregistrare 04 (Înregistrare de adresă liniară extinsă)
- 00FF Cuvânt mare decalat adresa (0x00FF0000)
- Sumă de control FB
Înregistrare la sfârșitul fișierului
Fișierele în format Intel HEX trebuie să aibă o intrare End of File (EOF).
Exemplu de înregistrare:
: 00 0000 01FF _
Unde:
- 00 Numărul de octeți de scris
- 0000 Câmpul este ignorat. Nu contează ce scrie acolo, dar de obicei este întotdeauna 0
- 01 Tip de înregistrare 01 (Sfârșitul fișierului)
- Suma de control FF calculată ca 01h + NOT(00h + 00h + 00h + 01h).
Exemple
Exemplul 1
: 10 0100 00 214601360121470136007EFE09D21901 40
: 10 0110 00 2146017EB7C20001FF5F160021480119 88
: 10 0120 00 194E79234623965778239EDA3F01B2CA A7
: 10 0130 00 3F0156702B5E712B722B732146013421 C7
: 00 0000 01 FF
Începe înregistrarea
Numărul de octeți de date din această intrare (rând)
Adresa de la care încep să fie plasate datele acestei înregistrări
Tipul de înregistrare
Date
Înregistrați suma de control
Exemplul 2
Exemplu de înregistrare de date:
: 10 2462 00 464C5549442050524F46494C4500464C 33
Unde
- 10 Număr de octeți de date (16 octeți)
- 2462 Adresa de memorie unde va fi plasată intrarea.
- 00 Tip înregistrare - date.
- Date 464C…464C
- 33 Scrieți suma de control
Exemplul 3
:020000021000EC
:10C20000E0A5E6F6FDFFE0AEE00FE6FCFDFFE6FD93
:10C21000FFFFF6F50EFE4B66F2FA0CFEF2F40EFE90
:10C22000F04EF05FF06CF07DCA0050C2F086F097DF
:10C23000F04AF054BCF5204830592D02E018BB03F9
:020000020000FC
:04000000FA00000200
:00000001FF
Înregistrare cu adresa segmentului (tip de înregistrare 02). Cei 2 octeți de date conțin partea superioară a adresei.
Înregistrări cu date (tip de înregistrare 00).
O înregistrare care marchează sfârșitul unui fișier (tip de înregistrare 01). Rândurile după această intrare sunt ignorate.
Vezi și
- SREC este un format de fișier folosit de Motorola
- ELF este un format de fișier utilizat de majoritatea sistemelor de tip UNIX.
Link -uri