Sunteți pe pagina 1din 3

Intel HEX

Intel HEX is a file format for conveying binary information for applications like
programming microcontrollers, EPROMs, and other kinds of chips. It is one of the
oldest file formats available for this purpose, having been in use since the 1970s.

Intel HEX es un formato de archivo para transmitir información binaria para


aplicaciones como la programación de microcontroladores, EPROMs y otros tipos de
chips. Es uno de los formatos de archivo más antiguos disponibles para este propósito,
habiendo estado en uso desde la década de 1970.

Formato
El formato es un archivo de texto, con cada línea conteniendo una secuencia de datos y
su desplazamiento de inicio o la dirección absoluta de codificación de valores
hexadecimales.

Hay tres tipos de formato Intel HEX: 8 bits, 16 bits y 32 bits. Se distinguen por su
orden de byte.

Cada línea del archivo de Intel HEX consta de seis partes:

1. Start code (Código de Inicio), un carácter, un signo de dos puntos de ASCII ': '.
2. Byte count (Número de bytes), dos dígitos hexadecimales, un número de bytes
(pares de dígitos hexadecimales) en el campo de datos. 16 (0 x 10) o 32 bytes (0
x 20) de datos son los valores de compromiso habitual entre la longitud de la
línea y la dirección de sobrecarga.
3. Address (Dirección), cuatro dígitos hexadecimales, una dirección de 16 bits del
comienzo de la posición de memoria para los datos. Se limita a 64 kilobytes, el
límite es trabajando al ir especificando bits altos a través de los tipos de registros
adicionales. Esta dirección es big endian.
4. Record type (Tipo de registro), dos dígitos hexadecimales, 00 a 05, para
definir el tipo del campo de datos.
5. Data (Datos), una secuencia de n bytes de los datos en sí mismos, representados
por 2n dígitos hexadecimales.
6. Checksum, two hex digits - the least significant byte of the two's complement of
the sum of the values of all fields except fields 1 and 6 (Start code ":" byte and
two hex digits of the Checksum). It is calculated by adding together the hex-
encoded bytes (hex digit pairs), then leaving only the LSB of the result, and
making a 2's complement (either by subtracting the byte from 0x100, or
inverting it by XOR-ing with 0xFF and adding 0x01). If you are not working
with 8-bit variables, you must suppress the overflow by AND-ing the result with
0xFF. The overflow may occur since both 0x100-0 and (0x00 XOR 0xFF)+1
equal 0x100. If the checksum is correctly calculated, adding all the bytes (the
Byte count, both bytes in Address, the Record type, each Data byte and the
Checksum) together will always result in a value wherein the least significant
byte is zero (0x00).
7. Cheksum (Suma de comprobación), dos dígitos hexadecimales: el byte menos
significativo de complemento a dos de la suma de los valores de todos los
campos excepto los campos 1 y 6 de hexadecimal (código de inicio ":" byte y
dos dígitos hexadecimales de la suma de comprobación). Se calcula sumando los
bytes codificados en hexadecimal (pares de dígitos hexadecimales), a
continuación, dejando sólo la LSB del resultado, y haciendo complemento de 2
(ya sea por restar el byte de 0 x 100, o invertirlo por XOR-ing con 0xFF y 0 x 01
de agregar). Si no estás trabajando con variables de 8 bits, se debe suprimir el
desbordamiento por AND-ing el resultado con 0xFF. El desbordamiento puede
producirse desde ambos 0 x 100-0 y (0 x 00 XOR 0xFF)+ iguala 10 x 100. Si se
calcula correctamente la suma de comprobación, sumando todos los bytes (el
recuento de byte, ambos bytes en dirección, tipo de registro, cada byte de datos y
la suma de comprobación) siempre producirá un valor en la que el byte menos
significativo es cero (0 x 00).
Por ejemplo, sea :0300300002337A1E
03 + 00 + 30 + 00 + 02 + 33 + 7A = E2, su complemento a 2's es 1E

Hay seis tipos de regfistro (record types):

 00, registro de datos, data record, contiene datos y direcciones de 16 bits. El


formato descrito anteriormente.
 01, Final de archivo registro End Of File record, un registro de la terminación de
archivo. No hay datos. Tiene que ser la última línea del archivo, sólo uno por
cada archivo permitido. Por lo general ': 00000001FF '. Originalmente, el
registro de final de archivo, podría contener una dirección de inicio para el
programa que se está cargando, por ejemplo: 00AB2F0125 haría un salto a la
dirección AB2F. Esto era conveniente cuando los programas eran cargados desde
la cinta de papel perforada.

 02, Registro de dirección de segmento extendido, Extended Segment Address


Record, dirección de segmento-base. Se utiliza cuando 16 bits no son
suficientes, idéntico al abordar el modo real de direccionamiento del 80 x 86. La
dirección especificada por el registro 02 se multiplica por 16 (desplazado 4 bits a
la izquierda) y añadida a las siguientes direcciones de registros 00. Esto permite
el direccionamiento de hasta un megabyte de espacio de direcciones. El campo
de dirección de este registro tiene que ser 0000, el número de bytes es 02 (el
segmento es de 16-bit). El dígito hexadecimal menos significativo de la
dirección de segmento siempre es 0.

 03, Registro de la dirección de segmento de inicio. Start Segment Address


Record Para los procesadores de 80 x 86, especifica el contenido inicial de los
registros de CS:IP. El campo de dirección es 0000, el contador de bytes es 04,
los dos primeros bytes son el valor de CS, estos dos últimos son el valor de IP.

 04, Record de dirección lineal extendido, Extended Linear Address Record, lo


que permite abordar plenamente 32 bits de direcciones. El campo de dirección es
0000, el número de bytes es 02. Los dos bytes de datos representan la parte
superiores de 16 bits de la dirección de 32 bits, cuando se combina con la
dirección de los registros de tipo 00.
 05, Inicio de registro de la dirección lineal. Start Linear Address Record. El
campo de dirección es 0000, el número de bytes es 04. Los 4 bytes de datos
representan el valor de 32 bits que se cargan en el registro EIP de la CPU 80386
y posteriores.

Existen varios subtipos de formato:

 I8HEX o INTEL 8, formato de 8-bit.


 I16HEX o INTEL 16, formato de 16-bit. Permite el uso de registros 02 y 03. La
campo de datos endianness puede ser intercambiado por byte..
 I32HEX o INTEL 32, formato de 32-bit. Permite el uso de registros 02 y 03. La
campo de datos endianness puede ser intercambiado por byte..

¡ Cuidado! intercambiar Byte de datos podría ser


confuso. Es posible interpretar el orden de bytes en
caso de I16HEX y I32HEX.
Una codificación similar, con formato de ASCII
ligeramente diferente, denominado SREC se utiliza
con los procesadores Motorola.
Ejemplo
:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF
Start code Byte count Address Record type Data
Checksum

S-ar putea să vă placă și