Intel Hex

Z Wikipedii, wolnej encyklopedii

Intel HEXformat pliku zawierający dane binarne, stosowany przy programowaniu mikrokontrolerów - systemów wbudowanych, pamięci EEPROM, FLASH. Jest najstarszym tego typu formatem, stosowanym od lat 70. XX wieku.

Dane w postaci hexadecymalnej zapisane są w liniach w postaci tekstowej.Każda z linii zawiera 6 pól:

  1. Znacznik rozpoczynający, jeden znak ASCII - dwukropek ':',
  2. Liczba bajtów, dwie cyfry hexadecymalne, określające długość rekordu danych,
  3. Adres, cztery cyfry hexadecymalne, 16 bitowy adres, umożliwiający zaadresowanie do 64K pamięci w jednym segmencie (zapisany w formacie Big Endian)
  4. Typ rekordu, dwie cyfry hexadecymalne w przedziale od 00 do 05,
  5. Dane, sekwencja danych, gdzie bajt zapisany jest w hexadecymalnej postaci tekstowej,
  6. Suma kontrolna, dwie cyfry hexadecymalne, suma kontrolna rekordu - cały rekord poza ':'.

Przykład obliczenia sumy kontrolnej dla wartości rekordu: 0300300002337A1E

03 + 00 + 30 + 00 + 02 + 33 + 7A = E2, po uzupełnieniu do dwóch (U2) otrzymujemy - 1E (w systemie szesnastkowym: 100 - E2 = 1E). Innymi słowy najmniej znaczący bajt sumy wszystkich bajtów w jednym rekordzie musi wynosić 0.

03 + 00 + 30 + 00 + 02 + 33 + 7A + 1E = 100, najmniej znaczący bajt jest równy 0.

Typ rekordu[edytuj | edytuj kod]

Istnieje sześć różnych typów rekordów:

  • 00, rekord zawierający dane oraz 16 bitowy adres,
  • 01, koniec pliku, ostatni rekord,
  • 02, rekord adresu segmentu rozszerzonego (20 bitów adresu), używany do adresowania do 1MB (pole adresowe jest równe 0000, w danych umieszczony jest 2 bajtowy adres zapisany w kolejności big endian, który pomnożony przez 2^4 dodawany jest do adresów rekordów typu 00 następujących po nim)
  • 03, rekord ustawiający 20 bitowy adres, spod którego rozpocznie się wykonywanie kodu. Zawiera on parę rejestrów CS (pierwsze 2 bajty danych) i IP (2 pozostałe bajty). Może zostać użyty tylko w trybie rzeczywistym. Jeżeli adres nie zostanie podany, wykonanie kodu rozpocznie się od domyślnego adresu.
  • 04, rekord adresu segmentu rozszerzonego (32 bity adresu), używany do adresowania do 4GB (podobnie do 02 lecz 2 bajtowy adres z pola danych mnożony jest przez 2^16)
  • 05, rekord ustawiający 32 bitowy adres liniowy, spod którego rozpocznie się wykonywanie kodu (Rejestr EIP). Może zostać użyty tylko w trybie chronionym. Jeżeli adres nie zostanie podany, wykonanie kodu rozpocznie się od domyślnego adresu.

Przykład[edytuj | edytuj kod]

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

     Znacznik rozpoczynający

     Liczba bajtów

     Adres

     Typ rekordu

     Dane

     Suma kontrolna

Bibliografia[edytuj | edytuj kod]