Intel hexagonal
La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la
versión revisada el 14 de diciembre de 2017; las comprobaciones requieren
23 ediciones .
Intel HEX es un formato de archivo diseñado para representar datos binarios arbitrarios en forma de texto. Por razones históricas, es el estándar de facto para flashear varios microcircuitos con memoria ( microcontroladores , ROM , EEPROM , etc.). En consecuencia, la mayoría de las herramientas para preparar imágenes de firmware ( compiladores , editores, visores, etc.) pueden funcionar con este formato.
El archivo suele tener la extensión .hex. Los nombres I8HEX, I16HEX e I32HEX a veces se utilizan para identificar el conjunto de registros utilizados en un archivo. I8HEX solo usa entradas con tipos 00/01 (direccionamiento de 16 bits), I16HEX agrega entradas 02/03 (direccionamiento de 20 bits) e I32HEX agrega entradas 04/05 (direccionamiento de 32 bits).
La ventaja del formato (a diferencia del binario simple) es la capacidad de especificar solo ciertas áreas de direcciones (con precisión de byte ). Muchas arquitecturas de microcontroladores tienen múltiples áreas de programación con amplias brechas de direccionamiento entre ellas.
Formato de grabación
Explicación uno
El archivo consta de líneas de texto ASCII . Cada línea representa una entrada. Cada entrada comienza con dos puntos ( : ), seguida de un conjunto de dígitos hexadecimales que son múltiplos de un byte :
- Inicio de grabación ( : ).
- El número de bytes de datos contenidos en esta entrada. Ocupa un byte (dos dígitos hexadecimales), que corresponde a 0...255 en decimal .
- La dirección inicial del bloque de datos a escribir es de 2 bytes. Esta dirección define la ubicación absoluta de los datos de esta entrada en el archivo binario.
- Un byte que indica el tipo de registro. Se definen los siguientes tipos de registro:
- 0: la entrada contiene datos de archivos binarios.
- 1 - registro indica el final del archivo , no contiene datos. Tiene la forma característica ":00000001FF".
- 2: entrada de la dirección del segmento (para más detalles, consulte a continuación).
- 4 - entrada de dirección ampliada (ver más abajo para más detalles).
- Bytes de datos a almacenar en la EPROM (su número se especifica al principio del registro, de 0 a 255 bytes).
- El último byte de la entrada es la suma de comprobación . Se calcula para que la suma de todos los bytes del registro sea igual a 0.
- La línea termina con un par CR/LF estándar (0Dh 0Ah).
Explicación dos
Un archivo Intel HEX puede contener cualquier número de entradas. Cada entrada es una cadena ASCII que consta de varios pares de dígitos hexadecimales. La cadena debe comenzar con un carácter de dos puntos y terminar con un par de caracteres CR y LF. El registro consta de cinco campos con el siguiente formato:
: LL AAAA TT DD… CC
Cada grupo de letras (LL, AAAA, TT, etc.) es un campo separado. Cada letra es un dígito hexadecimal separado (4 bits). Cada campo consta de al menos dos dígitos hexadecimales (un byte). A continuación se muestra un desglose de los campos de registro:
- : Cada entrada en el archivo HEX de Intel debe comenzar con dos puntos.
- Campo de longitud de LL: muestra el número de bytes de datos (DD) en el registro.
- Campo de dirección AAAA: representa la dirección de inicio de la entrada.
- Campo Tipo TT. Puede tomar los siguientes valores:
- La entrada 00 contiene datos de archivos binarios.
- La entrada 01 es el final del archivo.
- Entrada de dirección de 02 segmentos (consulte los detalles a continuación).
- 03 Dirección de inicio del lanzamiento del programa en formato 80x86 (valores de los registros CS:IP del contador del programa y registro de compensación)
- 04 entrada de dirección ampliada (consulte los detalles a continuación).
- 05 Dirección de inicio del programa de 32 bits en el espacio de direcciones "lineal"
- Campo de datos DD. Un registro puede contener varios bytes de datos. El número de bytes de datos debe coincidir con el campo LL.
- Campo de suma de comprobación CC. El campo de suma de verificación se calcula sumando los valores de todos los bytes (pares de dígitos hexadecimales) del módulo de registro 256, seguido de la conversión a un formato adicional (restar el valor resultante de 0). Por lo tanto, si suma todos los pares de números hexadecimales, incluidos LL, AA, TT, DD, CC, obtiene 0.
Entrada de dirección de segmento
Un archivo de formato Intel HEX puede contener entradas para procesadores Intel 8086 que definen la dirección del segmento (en otras palabras, el número de párrafo, un párrafo tiene 16 bytes). Si se usa la directiva H167, este tipo de registro reemplaza el registro de dirección lineal extendida. El número de párrafo se utiliza como compensación de dirección para todos los registros de datos que siguen a este registro. El desplazamiento es el desplazamiento de la dirección cuatro bits a la izquierda. Por ejemplo, un desplazamiento de 0x1234 daría la dirección real 0x12340. Ejemplo de grabación:
: 02 0000 02 1000 CE
dónde:
- 02 Número de bytes de datos
- 0000 Siempre es igual a 0000 en este tipo de registro
- 02 Tipo de registro 02 (registro de dirección de segmento).
- 1000 Número de párrafo (la dirección real será 0x10000).
- Suma de comprobación CE
Entrada de dirección extendida
Cuando se utiliza la directiva H167, el archivo de formato Intel HEX posiblemente contenga entradas de direcciones lineales extendidas. Este tipo de entrada define los valores de los dos bytes más significativos de la dirección absoluta (bits 16-31). Estos dos bytes más significativos de la dirección se utilizarán como compensación de dirección para todos los registros de datos que siguen a este registro. Ejemplo de grabación:
: 02 0000 04 00FF FB
dónde:
- 02 Número de bytes de datos
- 0000 Siempre 0
- 04 Tipo de registro 04 (registro de dirección lineal extendido)
- 00FF Palabra alta de desplazamiento de dirección (0x00FF0000)
- Suma de comprobación de FB
Grabación de fin de archivo
Los archivos con formato Intel HEX deben tener una entrada de fin de archivo (EOF).
Ejemplo de grabación:
: 00 0000 01FF _
dónde:
- 00 Número de bytes a escribir
- 0000 El campo se ignora. No importa lo que esté escrito allí, pero por lo general siempre es 0
- 01 Tipo de registro 01 (Fin de archivo)
- FF Checksum calculado como 01h + NOT(00h + 00h + 00h + 01h).
Ejemplos
Ejemplo 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
Empezar a grabar
Número de bytes de datos en esta entrada (fila)
La dirección desde la que se empiezan a colocar los datos de este registro
tipo de registro
Datos
Registrar suma de control
Ejemplo 2
Ejemplo de un registro de datos:
: 10 2462 00 464C5549442050524F46494C4500464C 33
dónde
- 10 Número de bytes de datos (16 bytes)
- 2462 Dirección de memoria donde se colocará la entrada.
- 00 Tipo de registro - datos.
- Datos 464C…464C
- 33 Escribir suma de control
Ejemplo 3
:020000021000EC
:10C20000E0A5E6F6FDFFE0AEE00FE6FCFDFFE6FD93
:10C21000FFFFF6F50EFE4B66F2FA0CFEF2F40EFE90
:10C22000F04EF05FF06CF07DCA0050C2F086F097DF
:10C23000F04AF054BCF5204830592D02E018BB03F9
:020000020000FC
:04000000FA00000200
:00000001FF
Registro con dirección de segmento (registro tipo 02). Los 2 bytes de datos contienen la parte alta de la dirección.
Registros con datos (tipo de registro 00).
Un registro que marca el final de un archivo (tipo de registro 01). Las líneas posteriores a esta entrada se ignoran.
Véase también
- SREC es un formato de archivo utilizado por Motorola
- ELF es un formato de archivo utilizado por la mayoría de los sistemas similares a UNIX.
Enlaces