Che cos'è il formato di file HEX?
I file con l'estensione .hex utilizzano il formato Intel HEX - un formato di record ASCII in testo semplice che codifica il firmware binario compilato in modo che possa essere trasferito in modo affidabile a un programmatore o a uno strumento di flashing. Invece di memorizzare dati binari grezzi, ogni byte di contenuto è rappresentato da due caratteri esadecimali, il che mantiene il file completamente leggibile dall'uomo in qualsiasi editor di testo.
I file .hex sono sempre in testo semplice e possono essere aperti con un editor di testo standard come Notepad. Per caricare il firmware su un microcontrollore, si utilizzano strumenti specializzati come avrdude o Arduino IDE. Laddove sia invece necessario il codice macchina grezzo, un compilatore può anche generare un'immagine binaria .bin, o un Motorola S-record .srec per i sistemi che preferiscono quel formato.
Un file .hex è il risultato di un compilatore o assemblatore che converte il codice sorgente in codice macchina e lo codifica per il trasferimento sicuro al dispositivo di destinazione.
Dove vengono utilizzati i file .hex
I dati contenuti nei file .hex vengono utilizzati per programmare i microcontrollori e per scrivere contenuti nelle memorie integrate come EEPROM e memorie Flash. I microcontrollori sono installati in molti dispositivi di uso comune - dai telecomandi e sistemi di controllo del motore di un'auto ai moderni sensori IoT e hardware per la robotica.
Struttura dei dati nei file .hex
I dati esadecimali in un file .hex sono memorizzati in righe di testo chiamate record, e ogni record è composto da sei campi:
- Codice di inizio - i due punti (
:) che segnano l'inizio di ogni record - Conteggio byte - due cifre esadecimali che definiscono il numero di byte di dati in quel record
- Indirizzo - quattro cifre esadecimali che specificano l'indirizzo di destinazione a 16 bit (indirizzamento fino a 64 KB per segmento nel formato base)
- Tipo di record - due cifre esadecimali, da
00a05(ad esempio,00= record di dati,01= fine del file) - Dati - il carico utile effettivo, con ogni byte codificato come due caratteri esadecimali
- Checksum - due cifre esadecimali che contengono il checksum in complemento a due di tutti i byte precedenti nel record
L'ultima riga di ogni file Intel HEX valido è il record fisso di fine file :00000001FF.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file .hex è composto da dati semplici e non può essere eseguito sul PC da solo, quindi aprirne uno in un editor di testo o esadecimale è innocuo. Il rischio reale riguarda il dispositivo: il flashing di firmware non attendibile può bloccare l'hardware (brick) o caricare codice dannoso su un microcontrollore. Carica solo file .hex provenienti dal produttore del dispositivo o da una fonte di cui ti fidi, e conferma che il file corrisponda esattamente alla tua scheda/chip prima dell'upload. La modifica manuale dei byte del firmware può inoltre corrompere l'immagine.
Dettagli del formato
in sintesi- Dump esadecimale generico - Una trascrizione leggibile dall'uomo dei byte grezzi di un altro file (colonne offset + hex + ASCII) prodotta da un editor esadecimale o strumenti come xxd/hexdump; a volte anche i blob binari grezzi vengono salvati genericamente come .hex.
Programmi che aprono file HEX
Dettagli tecnici
specifiche approfondite| Codifica | Testo ASCII puro; ogni byte di dati è rappresentato come due caratteri esadecimali |
| Carattere di inizio record | Due punti `:` (0x3A) - ogni riga di record inizia con questo carattere; non esiste un numero magico binario |
| Tipi di record | Sei tipi numerati 00-05: dati (00), fine del file (01), indirizzo di segmento esteso (02), indirizzo di segmento iniziale (03), indirizzo lineare esteso (04), indirizzo lineare iniziale (05) |
| Intervallo di indirizzi base | Indirizzamento a 16 bit per segmento, coprendo fino a 64 KB senza record di estensione dell'indirizzo |
| Intervallo di indirizzi esteso | Fino a 4 GB (32 bit) utilizzando record di Indirizzo Lineare Esteso di tipo 04, abilitando la mappatura completa della memoria a 32 bit |
| Byte di dati massimi per record | Fino a 255 byte (0xFF) di dati per record; la pratica comune utilizza 16 o 32 byte per record |
| Algoritmo di checksum | Complemento a due a 8 bit di tutti i byte nel record (conteggio byte, indirizzo, tipo di record e dati), escluso il carattere iniziale dei due punti |
| Marcatore di fine file | Il record fisso `:00000001FF` deve terminare ogni file Intel HEX valido |
| Tipo MIME | text/plain |
| Ordine dei byte dell'indirizzo | Big-endian - il byte più significativo per primo nei campi dell'indirizzo e del conteggio multi-byte |
| Utilizzo primario | Programmazione di Flash ed EEPROM su microcontrollori come le famiglie AVR, PIC, ARM Cortex-M e 8051 |
| Origine toolchain | Output di compilatori e assemblatori inclusi avr-gcc, MPLAB X IDE, Keil MDK e IAR Embedded Workbench |
| Sovraccarico dimensione file | Circa 1,4-2 volte la dimensione del binario grezzo, poiché ogni byte di dati diventa due caratteri ASCII più i byte di inquadratura per record |
| Rilasciato | 1973 (Intel HEX format) |
| Standard aperto | Sì · royalty-free |
| Specifica | en.wikipedia.org |
Conversioni HEX
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file HEX.