Intel HEX
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 14 december 2017; kontroller kräver
23 redigeringar .
Intel HEX är ett filformat utformat för att representera godtyckliga binära data i textform. Av historiska skäl är det de facto standarden för att blinka olika mikrokretsar med minne ( mikrokontroller , ROM , EEPROM , etc.). Följaktligen kan de flesta verktyg för att förbereda firmware-bilder ( kompilatorer , redaktörer, tittare, etc.) fungera med detta format.
Filen har vanligtvis filtillägget .hex. Namnen I8HEX, I16HEX och I32HEX används ibland för att identifiera uppsättningen poster som används i en fil. I8HEX använder endast poster med typerna 00/01 (16-bitars adressering), I16HEX lägger till poster 02/03 (20-bitars adressering) och I32HEX lägger till poster 04/05 (32-bitars adressering).
Fördelen med formatet (till skillnad från enkel binär) är möjligheten att endast specificera vissa adressområden (med byte- noggrannhet ). Många mikrokontrollerarkitekturer har flera programmeringsområden med omfattande adresseringsluckor mellan dem.
Inspelningsformat
Förklaring ett
Filen består av ASCII -textrader . Varje rad representerar en post. Varje post börjar med ett kolon ( : ), följt av en uppsättning hexadecimala siffror som är multiplar av en byte :
- Inspelningen startar ( : ).
- Antalet byte med data som ingår i denna post. Den upptar en byte (två hexadecimala siffror), vilket motsvarar 0 ... 255 i decimal .
- Startadressen för datablocket som ska skrivas är 2 byte. Denna adress definierar den absoluta platsen för denna posts data i den binära filen.
- En byte som anger posttypen. Följande posttyper är definierade:
- 0 - Posten innehåller binära fildata.
- 1 - post indikerar slutet på filen , innehåller inga data. Den har den karakteristiska formen ":00000001FF".
- 2 — inmatning av segmentadressen (för detaljer, se nedan).
- 4 - utökad adressinmatning (se nedan för detaljer).
- Byte med data som ska lagras i EPROM (deras antal anges i början av posten, från 0 till 255 byte).
- Den sista byten i posten är kontrollsumman . Den beräknas så att summan av alla byte i posten är lika med 0.
- Linjen avslutas med ett standard CR/LF-par (0Dh 0Ah).
Förklaring två
En Intel HEX-fil kan innehålla valfritt antal poster. Varje post är en ASCII- sträng som består av flera par hexadecimala siffror. Strängen måste börja med ett kolontecken och sluta med ett par CR- och LF-tecken. Posten består av fem fält i följande format:
: LL AAAA TT DD… CC
Varje grupp av bokstäver (LL, AAAA, TT, etc.) är ett separat fält. Varje bokstav är en separat hexadecimal siffra (4 bitar). Varje fält består av minst två hexadecimala siffror (en byte). Nedan är en uppdelning av rekordfälten:
- : Varje post i Intel HEX-filen måste börja med ett kolon.
- LL Length-fält - visar antalet databyte (DD) i posten.
- AAAA-adressfält - Representerar startadressen för posten.
- TT Typfält. Det kan ha följande värden:
- 00-posten innehåller binära fildata.
- 01-posten är slutet på filen.
- 02 segmentadressinmatning (se nedan för detaljer).
- 03 Startadress för programstarten i 80x86-format (värden för CS:IP-registren för programräknaren och offsetregistret)
- 04 utökad adressinmatning (se nedan för detaljer).
- 05 32-bitars programstartadress i "linjärt" adressutrymme
- DD Datafält. En post kan innehålla flera byte med data. Antalet databyte måste matcha LL-fältet.
- CC-kontrollsummafält. Kontrollsummafältet beräknas genom att lägga till värdena för alla bytes (par av hexadecimala siffror) i posten modulo 256, följt av konvertering till ett ytterligare format (subtrahera det resulterande värdet från 0). Således, om du summerar alla par av hexadecimala tal, inklusive LL, AA, TT, DD, CC, får du 0.
Segmentadressinmatning
En fil i Intel HEX-format kan innehålla poster för Intel 8086-processorer som definierar segmentadressen (med andra ord, styckenumret, ett stycke är 16 byte). Om H167-direktivet används, ersätter denna posttyp den utökade linjära adressposten. Paragrafnumret används som adressoffset för alla dataposter som följer denna post. Offset är förskjutningen av adressen fyra bitar till vänster. Till exempel skulle en offset på 0x1234 ge den verkliga adressen 0x12340. Inspelningsexempel:
: 02 0000 02 1000 EC
var:
- 02 Antal databyte
- 0000 är alltid lika med 0000 i denna posttyp
- 02 Posttyp 02 (segmentadresspost).
- 1000 Styckenummer (den verkliga adressen är 0x10000).
- EG-kontrollsumma
Utökad adressinmatning
När H167-direktivet används, kommer Intel HEX-formatfilen möjligen att innehålla utökade linjära adressingångar. Denna inmatningstyp definierar värdena för de två mest signifikanta byten i den absoluta adressen (bitar 16-31). Dessa två mest signifikanta bytes av adressen kommer att användas som adressoffset för alla dataposter som följer denna post. Inspelningsexempel:
: 02 0000 04 00FF FB
var:
- 02 Antal databyte
- 0000 Alltid 0
- 04 Posttyp 04 (Utökad linjär adresspost)
- 00FF Adressförskjutning högt ord (0x00FF0000)
- FB Checksumma
Inspelning i slutet av filen
Intel HEX-formatfiler måste ha en End of File-post (EOF).
Inspelningsexempel:
: 00 0000 01FF _
var:
- 00 Antal byte att skriva
- 0000 Fältet ignoreras. Det spelar ingen roll vad som står där, men det är oftast alltid 0
- 01 Posttyp 01 (Slut på fil)
- FF Checksumma beräknad som 01h + NOT(00h + 00h + 00h + 01h).
Exempel
Exempel 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
Börja filma
Antal byte med data i denna post (rad)
Adressen från vilken uppgifterna i denna post börjar placeras
Inspelningstyp
Data
Registrera kontrollsumma
Exempel 2
Exempel på en datapost:
: 10 2462 00 464C5549442050524F46494C4500464C 33
var
- 10 antal databyte (16 byte)
- 2462 Minnesadress där posten kommer att placeras.
- 00 Posttyp - data.
- 464C…464C Data
- 33 Skriv kontrollsumma
Exempel 3
:020000021000EC
:10C20000E0A5E6F6FDFFE0AEE00FE6FCFDFFE6FD93
:10C21000FFFFF6F50EFE4B66F2FA0CFEF2F40EFE90
:10C22000F04EF05FF06CF07DCA0050C2F086F097DF
:10C23000F04AF054BCF5204830592D02E018BB03F9
:020000020000FC
:04000000FA00000200
:00000001FF
Rekord med segmentadress (posttyp 02). De 2 byten med data innehåller den höga delen av adressen.
Registrerar med data (posttyp 00).
En post som markerar slutet på en fil (posttyp 01). Rader efter denna post ignoreras.
Se även
- SREC är ett filformat som används av Motorola
- ELF är ett filformat som används av de flesta UNIX-liknande system.
Länkar