SREC
# SREC

El formato Motorola S-record codifica datos binarios en texto ASCII. Sus ventajas sobre un archivo binario son su facilidad de edición con un editor de texto y la presencia de una suma de verificación para detectar archivos corruptos. El formato de archivo también se conoce como SRECORD, SREC, S19, S28 o S37.

Se creó en los años '70 para el procesador Motorola 6800. Es usado por herramientas de programación para codificar datos binarios, generalmente ejecutables, para procesadores embebidos.

Un formato similar, denominado Intel HEX, se usa más comúnmente con procesadores Intel.

## Formato

Un archivo SREC consiste de registros. Los números hexadecimales están en formato big endian. La estructura de un registro es la siguiente:

* Código de inicio, un carácter S.
* Tipo de registro, un dígito de 0 a 9, especifica el tipo de registro.
* Largo, dos dígitos hexadecimales con la cantidad de bytes (pares de dígitos hexadecimales) que siguen.
* Dirección, cuatro, seis u ocho dígitos hexadecimales, según el tipo de registro.
* Datos, 2n dígitos hexadecimales codifican n bytes de datos.
* Checksum, dos dígitos hexadecimales con el byte menos significativo del complemento a uno de la suma de los campos largo, dirección y datos.

Hay ocho tipos de registros:

* S0: El campo de dirección contiene ceros (0x0000). El campo de datos contiene los siguientes subcampos:

| Nombre | Bytes | Descripción |
| - | - | - |
| mname | 20 | Nombre del módulo |
| ver | 2 | Versión (hexadecimal) |
| rev | 2 | Revisión (hexadecimal) |
| description | 0-36 | Comentario |

* S1, S2 y S3: Su campo de datos contiene información a cargar en memoria. Los registros S1, S2 y S3 tienen campos de dirección de 4, 6 y 8 dígitos hex respectivamente.
* S5: No contiene datos. Su campo de dirección, de cuatro dígitos hex, indica la cuenta de registros S1, S2 y S3 transmitidos.
* S7, S8 y S9: No contienen datos. Su campo de dirección indica dónde comienza la ejecución, y tiene 8, 6 o 4 dígitos hex respectivamente.

## Ejemplo

Código de inicio  Tipo  Largo  Dirección  Datos  Checksum

