Co to jest format pliku HEX?
Pliki z rozszerzeniem .hex korzystają z formatu Intel HEX - tekstowego formatu rekordów ASCII, który koduje skompilowane binarne oprogramowanie układowe, aby mogło być niezawodnie przesyłane do programatora lub narzędzia do flashowania. Zamiast przechowywać surowe dane binarne, każdy bajt zawartości jest reprezentowany przez dwa znaki szesnastkowe, co sprawia, że plik jest w pełni czytelny dla człowieka w dowolnym edytorze tekstu.
Pliki .hex są zawsze zwykłym tekstem i można je otworzyć za pomocą standardowego edytora tekstu, takiego jak Notatnik. Aby wgrać oprogramowanie do mikrokontrolera, używa się specjalistycznych narzędzi, takich jak avrdude lub Arduino IDE. Tam, gdzie wymagany jest surowy kod maszynowy, kompilator może również wygenerować obraz binarny .bin lub Motorola S-record .srec dla systemów preferujących ten format.
Plik .hex jest wynikiem pracy kompilatora lub asemblera, który konwertuje kod źródłowy na kod maszynowy, a następnie koduje go w celu bezpiecznego transferu do urządzenia docelowego.
Gdzie używane są pliki .hex
Dane zawarte w plikach .hex służą do programowania mikrokontrolerów oraz zapisywania zawartości w pamięciach wbudowanych, takich jak EEPROM i pamięć Flash. Mikrokontrolery są instalowane w wielu powszechnie używanych urządzeniach - od pilotów zdalnego sterowania i systemów sterujących silnikiem samochodowym po nowoczesne czujniki IoT i sprzęt robotyczny.
Struktura danych w plikach .hex
Dane szesnastkowe w pliku .hex są przechowywane w liniach tekstu zwanych rekordami, a każdy rekord składa się z sześciu pól:
- Kod startowy - dwukropek (
:) oznaczający początek każdego rekordu - Liczba bajtów - dwie cyfry szesnastkowe określające liczbę bajtów danych w tym rekordzie
- Adres - cztery cyfry szesnastkowe określające 16-bitowy adres docelowy (adresowanie do 64 KB na segment w formacie podstawowym)
- Typ rekordu - dwie cyfry szesnastkowe, od
00do05(na przykład00= rekord danych,01= koniec pliku) - Dane - właściwy ładunek (payload), gdzie każdy bajt jest zakodowany jako dwa znaki szesnastkowe
- Suma kontrolna - dwie cyfry szesnastkowe zawierające sumę kontrolną (uzupełnienie do dwóch) wszystkich poprzednich bajtów w rekordzie
Ostatnią linią każdego poprawnego pliku Intel HEX jest stały rekord końca pliku :00000001FF.
Bezpieczeństwo
RYZYKO: MEDIUMPlik .hex to czyste dane i nie może samoczynnie uruchomić się na komputerze PC, więc otwarcie go w edytorze tekstu lub szesnastkowym jest bezpieczne. Prawdziwe ryzyko dotyczy urządzenia: wgranie niezaufanego oprogramowania może uszkodzić sprzęt (brick) lub załadować złośliwy kod do mikrokontrolera. Flashuj tylko pliki .hex od producenta urządzenia lub z zaufanego źródła i przed przesłaniem upewnij się, że plik pasuje do Twojej konkretnej płytki/układu. Ręczna edycja bajtów oprogramowania może również uszkodzić obraz.
Szczegóły formatu
w pigułce- Ogólny zrzut szesnastkowy (hex dump) - Czytelny dla człowieka zapis surowych bajtów innego pliku (kolumny offset + hex + ASCII) generowany przez edytor szesnastkowy lub narzędzia takie jak xxd/hexdump; czasami surowe dane binarne są również potocznie zapisywane z rozszerzeniem .hex.
Programy otwierające pliki HEX
Szczegóły techniczne
specyfikacja| Kodowanie | Czysty tekst ASCII; każdy bajt danych jest reprezentowany przez dwa znaki szesnastkowe |
| Znak początku rekordu | Dwukropek `:` (0x3A) - każda linia rekordu zaczyna się od tego znaku; brak binarnej sygnatury (magic number) |
| Typy rekordów | Sześć typów ponumerowanych 00-05: dane (00), koniec pliku (01), rozszerzony adres segmentu (02), adres segmentu początkowego (03), rozszerzony adres liniowy (04), początkowy adres liniowy (05) |
| Podstawowy zakres adresów | 16-bitowe adresowanie na segment, obejmujące do 64 KB bez rekordów rozszerzenia adresu |
| Rozszerzony zakres adresów | Do 4 GB (32-bit) przy użyciu rekordów typu 04 (Extended Linear Address), co umożliwia pełne 32-bitowe mapowanie pamięci |
| Maksymalna liczba bajtów danych na rekord | Do 255 bajtów (0xFF) danych na rekord; w praktyce powszechnie stosuje się 16 lub 32 bajty na rekord |
| Algorytm sumy kontrolnej | 8-bitowe uzupełnienie do dwóch wszystkich bajtów w rekordzie (liczba bajtów, adres, typ rekordu i dane), z wyłączeniem początkowego dwukropka |
| Znacznik końca pliku | Stały rekord `:00000001FF` musi kończyć każdy poprawny plik Intel HEX |
| Typ MIME | text/plain |
| Kolejność bajtów adresu | Big-endian - najbardziej znaczący bajt jako pierwszy w polach adresu i wielobajtowej liczby |
| Główne zastosowanie | Programowanie pamięci Flash i EEPROM w mikrokontrolerach takich jak rodziny AVR, PIC, ARM Cortex-M oraz 8051 |
| Pochodzenie łańcucha narzędzi | Wynik działania kompilatorów i asemblerów, w tym avr-gcc, MPLAB X IDE, Keil MDK oraz IAR Embedded Workbench |
| Narzut rozmiaru pliku | Około 1,4-2× rozmiaru surowych danych binarnych, ponieważ każdy bajt danych staje się dwoma znakami ASCII plus bajty obramowania rekordu |
| Wydano | 1973 (Intel HEX format) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | en.wikipedia.org |
Konwersje HEX
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki HEX.