Red de conocimiento informático - Aprendizaje de programación - ¿Cómo funcionan los archivos HEX?

¿Cómo funcionan los archivos HEX?

Un archivo Intel HEX es un archivo de texto ASCII que consta de una línea de texto que se ajusta al formato de archivo Intel HEX. Cada línea de un archivo Intel HEX contiene un registro HEX. Los archivos Intel HEX se utilizan normalmente para transferir programas y datos almacenados en ROM o EPROM. La mayoría de los programadores o emuladores de EPROM utilizan archivos Intel HEX.

Formato de registro

Intel HEX consta de cualquier número de registros hexadecimales. Cada registro contiene cinco campos, que están organizados en el siguiente formato:

:llaaaatt[dd....] cc

Cada conjunto de letras corresponde a un campo diferente, y cada La letra corresponde a un número codificado en hexadecimal. Cada campo consta de al menos dos dígitos codificados en hexadecimal que forman un byte, como se describe a continuación:

: Cada registro Intel HEX comienza con dos puntos.

ll es el campo de longitud de datos, que indica el número de bytes de datos (dd) en el registro.

aaaa es el campo de dirección, que indica la dirección inicial de los datos del registro.

tt es un campo que indica el tipo de registro HEX:

00 - Registro de datos

01 - Registro de fin de archivo

02 - Registro de dirección de segmento extendido

04 - Registro de dirección lineal extendido

dd es el campo de datos, que representa un byte de datos. Un registro puede tener varios bytes de datos. El número de bytes de datos en el registro debe coincidir con el número especificado en el campo Longitud de datos (ll).

cc es el campo de suma de verificación, que indica la suma de verificación del registro. La suma de verificación se calcula sumando los valores de todos los pares de dígitos codificados en hexadecimal en el registro, módulo 256, y el siguiente complemento.

Registros de datos

Los archivos Intel HEX constan de cualquier número de registros de datos y terminan con un retorno de carro y un avance de línea. El registro de datos es el siguiente:

:10246200464C5549442050524F46494C4500464C33

Donde:

10 es el número de bytes de datos en el registro.

2462 es la dirección donde se descargan los datos a la memoria.

00 es el tipo de registro (registro de datos)

464C...464C son datos.

33 es la suma de comprobación de este registro.

Registro de direcciones lineales extendido HEX386

El registro de direcciones lineales extendidos también se conoce como registro de direcciones de 32 bits o registro HEX386. Estos registros contienen los 16 bits superiores de la dirección de datos. Los registros de direcciones lineales extendidas siempre tienen dos bytes de datos y tienen este aspecto:

:02000004FFFFFC

Donde:

02 son los datos de este registro Número de bytes.

0000 es el campo de dirección y el campo de dirección de los registros de dirección lineal extendidos es siempre 0000.

04 es el tipo de registro 04 (registro de dirección lineal extendida)

FFFF son los 16 bits superiores de la dirección.

FC es la suma de verificación del registro y la fórmula de cálculo es la siguiente:

01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).

Al leer un registro de dirección lineal extendida, la dirección lineal extendida almacenada en el campo de datos se guarda y se aplica a los registros posteriores leídos del archivo Intel HEX. Una dirección lineal es válida hasta que la cambie otro registro de dirección extendida.

Agregue el campo de dirección en el registro a los datos de la dirección de desplazamiento en el registro de dirección lineal extendida para obtener la dirección de memoria absoluta del registro de datos.

El siguiente ejemplo demuestra este proceso....

Agregar la dirección 2462 desde el campo de dirección del registro de datos

Extender el campo de datos de la dirección lineal record+ FFFF

------------

Dirección de memoria absoluta FFFF2462

Registro de dirección de segmento extendido (HEX86)

El registro de dirección de segmento extendido, también llamado registro HEX86, consta de segmentos de dirección de datos de 4 a 19 bits. Los registros de direcciones de segmento extendido siempre tienen dos bytes de datos y tienen este aspecto:

:020000021200EA

donde:

02 es la palabra de datos en el registro Número de secciones .

0000 es el campo de dirección. Para registros de direcciones de segmento extendido, este campo siempre es 0000.

02 es el tipo de registro 02 (registro de dirección de segmento extendido)

1200 es el segmento de dirección.

EA es la suma de verificación del registro y la fórmula de cálculo es la siguiente:

01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).

Al leer un registro de dirección de segmento extendido, la dirección del segmento extendido almacenada en el campo de datos se guarda y se aplica a los registros posteriores leídos del archivo Intel HEX. Una dirección de segmento es válida hasta que la cambie otro registro de dirección extendida.

Agregue el campo de dirección en el registro y los datos de la dirección de desplazamiento en el registro de dirección del segmento extendido para obtener la dirección de memoria absoluta del registro de datos.

El siguiente ejemplo demuestra este proceso....

Dirección 2462 en el campo de dirección del registro de datos

Campo de datos del registro de dirección de segmento extendido + 1200

---------

Dirección de memoria absoluta 00014462

Registro de fin de archivo (EOF)

Se requiere archivo Intel HEX Fin con un registro de fin de archivo (EOF). El registro debe tener un valor de campo RecordType de 01. Un registro EOF siempre se ve así:

:00000001FF

Donde:

00 es el número de bytes de datos en el registro.

0000 es la dirección donde se descargan los datos a la memoria. En un registro de fin de archivo, la dirección no tiene significado y se ignora. 0000h es una dirección típica.

01 es el tipo de registro 01 (registro de fin de archivo)

FF es la suma de verificación del registro, la fórmula de cálculo es la siguiente:

01h + NOT (00h+00h+00h+01h).

Ejemplo de archivo Intel HEX:

A continuación se muestra un ejemplo completo de archivo Intel HEX:

:10001300AC12AD13AE10AF1112002F8E0E8F0F2244

.10000300E50B250DF509E50A350CF508120013225 9

:03000000020023D8

:0C002300787FE4F6D8FD7581130200031D

:.10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016

:04003F00A42EF E22 CB

:00000001FF