SREC (formato de archivo) - SREC (file format)

S-record
Motorola SREC Chart.png
Una tabla de referencia rápida para el formato Motorola SREC. (Tenga en cuenta que en la imagen de ejemplo de registro, la palabra "bytes" se usa alternativamente para especificar caracteres).
Extensión de nombre de archivo
.s19 , .s28 , .s37 , .s , .s1 , .s2 , .s3 , .sx , .srec , .exo , .mot , .mxt
Desarrollado por Motorola

Motorola S-record es un formato de archivo, creado por Motorola , que transmite información binaria como valores hexadecimales en formato de texto ASCII . Este formato de archivo también puede conocerse como SRECORD , SREC , S19 , S28 , S37 . Se usa comúnmente para programar memoria flash en microcontroladores, EPROM , EEPROM y otros tipos de dispositivos lógicos programables. En una aplicación típica, un compilador o ensamblador convierte el código fuente de un programa (como C o lenguaje ensamblador) en código de máquina y lo genera en un archivo HEX. Luego, un programador importa el archivo HEX para "grabar" el código de la máquina en una memoria no volátil , o se transfiere al sistema de destino para su carga y ejecución.

Visión general

Historia

El formato S-record se creó a mediados de la década de 1970 para el procesador Motorola 6800 . Las herramientas de desarrollo de software para ese y otros procesadores integrados generarían código y datos ejecutables en formato S-record. Los programadores de PROM leerían el formato de registro S y "grabarían" los datos en las PROM o EPROM utilizadas en el sistema integrado.

Otros formatos hexadecimales

Hay otras codificaciones ASCII con un propósito similar. BPNF , BHLF y B10F eran formatos binarios tempranos, pero no son ni compactos ni flexibles. Los formatos hexadecimales son más compactos porque representan 4 bits en lugar de 1 bit por carácter. Muchos, como S-record, son más flexibles porque incluyen información de dirección para que puedan especificar solo una parte de una PROM. El formato Intel HEX se usaba a menudo con procesadores Intel. TekHex es otro formato hexadecimal que puede incluir una tabla de símbolos para depurar.

Formato

Estructura de registro

S Escribe Recuento de bytes Dirección Datos Suma de comprobación

Un archivo de formato SREC consta de una serie de registros de texto ASCII. Los registros tienen la siguiente estructura de izquierda a derecha:

  1. Inicio de registro : cada registro comienza con una letra mayúscula "S" (ASCII 0x53) que significa "Inicio de registro".
  2. Tipo de registro : un solo dígito numérico "0" a "9", que define el tipo de registro.
  3. Recuento de bytes : dos dígitos hexadecimales, que indican el número de bytes (pares de dígitos hexadecimales) que siguen en el resto del registro (dirección + datos + suma de comprobación). Este campo tiene un valor mínimo de 3 para el campo de dirección de 16 bits más 1 byte de suma de comprobación y un valor máximo de 255 (0xFF).
  4. Dirección : cuatro / seis / ocho dígitos hexadecimales según lo determine el tipo de registro. Los bytes de la dirección están organizados en formato big endian .
  5. Datos : una secuencia de 2 n dígitos hexadecimales, para n bytes de datos. Para los registros S1 / S2 / S3, es típico un máximo de 32 bytes por registro, ya que cabe en una pantalla de terminal de 80 caracteres de ancho, aunque 16 bytes serían más fáciles de decodificar visualmente cada byte en una dirección específica.
  6. Suma de comprobación : dos dígitos hexadecimales, el byte menos significativo del complemento a unos de la suma de los valores representados por los dos pares de dígitos hexadecimales para el recuento de bytes, la dirección y los campos de datos. Consulte la sección de ejemplos para ver un ejemplo detallado de suma de comprobación.

Terminadores de línea de texto

Los registros SREC están separados por uno o más caracteres de terminación de línea ASCII para que cada registro aparezca solo en una línea de texto. Esto mejora la legibilidad al delimitar visualmente los registros y también proporciona un relleno entre registros que se puede utilizar para mejorar la eficiencia del análisis de la máquina .

Los programas que crean registros HEX suelen utilizar caracteres de terminación de línea que se ajustan a las convenciones de sus sistemas operativos . Por ejemplo, los programas de Linux usan un solo carácter LF ( avance de línea , 0x0A como valor de carácter ASCII) para terminar líneas, mientras que los programas de Windows usan un carácter CR ( retorno de carro , 0x0D como valor de carácter ASCII) seguido de un carácter LF.

Tipos de registro

La siguiente tabla describe 10 posibles registros S. S4 está reservado y no está definido actualmente. S6 se reservó originalmente, pero luego se redefinió.


Campo de registro

Propósito del registro

Campo de dirección

Campo de datos

Descripción del registro
S0 Encabezamiento 16 bits
"0000"
No Este registro contiene un comentario de texto ASCII específico del proveedor representado como una serie de pares de dígitos hexadecimales. Es común ver los datos de este registro en el formato de una cadena terminada en nulo . Los datos de texto pueden ser cualquier cosa, incluida una combinación de la siguiente información: nombre de archivo / módulo, número de versión / revisión, fecha / hora, nombre del producto, nombre del proveedor, designación de memoria en PCB, aviso de derechos de autor. Es común ver: 48 44 52 que es el ASCII H, D y R - "HDR".
S1 Datos
Dirección de 16 bits
sí Este registro contiene datos que comienzan en el campo de dirección de 16 bits. Este registro se utiliza normalmente para microcontroladores de 8 bits, como AVR, PIC, 8051, 68xx, 6502, 80xx, Z80. El número de bytes de datos contenidos en este registro es "Campo de recuento de bytes" menos 3 (es decir, 2 bytes para el "Campo de dirección de 16 bits" y 1 byte para el "Campo de suma de comprobación").
S2 Datos
Dirección de 24 bits
sí Este registro contiene datos que comienzan en una dirección de 24 bits. El número de bytes de datos contenidos en este registro es "Campo de recuento de bytes" menos 4 (es decir, 3 bytes para el "Campo de dirección de 24 bits" y 1 byte para el "Campo de suma de comprobación").
S3 Datos
Dirección de 32 bits
sí Este registro contiene datos que comienzan en una dirección de 32 bits. Este registro se utiliza normalmente para microcontroladores de 32 bits, como ARM y 680x0. El número de bytes de datos contenidos en este registro es "Campo de recuento de bytes" menos 5 (es decir, 4 bytes para el "Campo de dirección de 32 bits" y 1 byte para el "Campo de suma de comprobación").
S4 Reservado N / A N / A Este registro está reservado.
S5 Contar
Recuento de 16 bits
No Este registro opcional contiene un recuento de 16 bits de registros S1 / S2 / S3. Este registro se usa si el recuento de registros es menor o igual a 65,535 (0xFFFF); de lo contrario, se usaría el registro S6.
S6 Contar
Recuento de 24 bits
No Este registro opcional contiene un recuento de 24 bits de registros S1 / S2 / S3. Este registro se utiliza si el recuento de registros es menor o igual a 16.777.215 (0xFFFFFF). Si es menos de 65,536 (0x10000), entonces se usaría el registro S5. NOTA: Este registro más nuevo es el cambio más reciente (puede que no sea oficial).
S7 Dirección de inicio
(terminación)

Dirección de 32 bits
No Este registro contiene la ubicación de ejecución inicial en una dirección de 32 bits. Se utiliza para terminar una serie de registros S3. Si un archivo SREC solo se usa para programar un dispositivo de memoria y se ignora la ubicación de ejecución, entonces se podría usar una dirección de cero.
S8 Dirección de inicio
(terminación)

Dirección de 24 bits
No Este registro contiene la ubicación de ejecución inicial en una dirección de 24 bits. Se utiliza para terminar una serie de registros S2. Si un archivo SREC solo se usa para programar un dispositivo de memoria y se ignora la ubicación de ejecución, entonces se podría usar una dirección de cero.
S9 Dirección de inicio
(terminación)

Dirección de 16 bits
No Este registro contiene la ubicación de ejecución inicial en una dirección de 16 bits. Se utiliza para terminar una serie de registros S1. Si un archivo SREC solo se usa para programar un dispositivo de memoria y se ignora la ubicación de ejecución, entonces se podría usar una dirección de cero.

Orden de registro

Aunque parte de la documentación de Unix establece que "el orden de los registros S dentro de un archivo no tiene importancia y no se puede asumir ningún orden en particular", en la práctica, la mayoría del software ha ordenado los registros SREC. El orden de registro típico comienza con un registro de encabezado S0 (a veces opcional), continúa con una secuencia de uno o más registros de datos S1 / S2 / S3, puede tener un registro de conteo S5 / S6 opcional y termina con un S7 / S8 / Registro de terminación S9.

Registros de direcciones de 16 bits estilo S19
  1. S0
  2. S1 (uno o más registros)
  3. S5 (registro opcional)
  4. S9
Registros de direcciones de 24 bits estilo S28
  1. S0
  2. S2 (uno o más registros)
  3. S5 (registro opcional)
  4. S8
Registros de direcciones de 32 bits estilo S37
  1. S0
  2. S3 (uno o más registros)
  3. S5 (registro opcional)
  4. S7

Limitaciones

Longitud del registro : la documentación de la página del manual de Unix dice: "Un archivo de registro S consiste en una secuencia de cadenas de caracteres ASCII con formato especial. Un registro S tendrá una longitud menor o igual a 78 bytes". La página del manual limita aún más el número de caracteres en el campo de datos a 64 (o 32 bytes de datos). Un registro con una dirección de 8 caracteres hexadecimales y 64 caracteres de datos tendría 78 (2 + 2 + 8 + 64 + 2) caracteres de longitud (este recuento ignora los posibles caracteres de final de línea o terminación de cadena). El archivo podría imprimirse en una teleimpresora de 80 caracteres de ancho. Una nota en la parte inferior de la página del manual dice: "Esta [página del manual] es el único lugar donde se documenta un límite de 78 bytes en la longitud total del registro o un límite de 64 bytes en la longitud de los datos. No se debe confiar en estos valores para el caso general ". Si se ignora esa limitación, la longitud máxima de un registro S es de 514 caracteres: 2 para el campo Tipo de registro + 2 para el campo Recuento de bytes (cuyo valor sería 0xFF = 255) + 2 * 255 para los campos Dirección, Datos y Suma de comprobación . Es posible que se requiera espacio adicional en el búfer para los terminadores de línea y cadena. El uso de longitudes de línea largas tiene problemas: "La definición de formato de registro S de Motorola permite hasta 255 bytes de carga útil, o líneas de 514 caracteres, más la terminación de línea. Todos los programadores de EPROM deben tener búferes de línea suficientemente grandes para hacer frente a registros de este tamaño. Pocos lo hacen ".

Campo de datos : alguna documentación recomienda un máximo de 32 bytes de datos (64 caracteres hexadecimales) en este campo. La cantidad mínima de datos para los registros S0 / S1 / S2 / S3 es cero. La cantidad máxima de datos varía según el tamaño del campo de dirección. Dado que el campo Byte Count no puede ser mayor que 255 (0xFF), entonces el número máximo de bytes de datos se calcula por 255 menos (1 byte para el campo de suma de comprobación) menos (número de bytes en el campo de dirección). Los registros S0 / S1 admiten hasta 252 bytes de datos. El registro S2 admite hasta 251 bytes de datos. El registro S3 admite hasta 250 bytes de datos.

Comentarios : el formato de archivo SREC no admite comentarios. Algunos programas ignoran todas las líneas de texto que no comienzan con "S" e ignoran todo el texto después del campo de suma de comprobación; ese texto adicional se usa a veces (de manera incompatible) para los comentarios. Por ejemplo, el compilador CCS PIC admite colocar un ";" línea de comentarios en la parte superior o inferior de un archivo Intel HEX , y sus manuales dicen que "a algunos programadores (MPLAB en particular) no les gustan los comentarios en la parte superior del archivo hexadecimal", por lo que el compilador tiene la opción de colocar el comentario en la parte inferior del archivo hexadecimal.

Ejemplos de

Leyenda de color

  Tipo de registro   Recuento de bytes   Dirección   Datos   Suma de comprobación

Cálculo de suma de comprobación

El siguiente registro de ejemplo:

S1137AF00A0A0D0000000000000000000000000061

se decodifica para mostrar cómo se calcula el valor de la suma de comprobación. La discusión utiliza la convención de Motorola en la que un signo de dólar ( $ ) indica un valor hexadecimal:

  1. Agregar: Agregue cada byte $ 13 + $ 7A + $ F0 + $ 0A + $ 0A + $ 0D + $ 00 + ... + $ 00 = $ 019E .
  2. Máscara: descarte el byte más significativo ( $ 01 ) de la suma y conserve el byte menos significativo (LSB), que es $ 9E .
  3. Complemento: Calcule el complemento a unidades del LSB, que es $ 61 . Normalmente, esto se lleva a cabo en el microprocesador Motorola 6800 por exclusiva la operación lógica OR del acumulador con $ FF .

Dirección de memoria de 16 bits

S00F000068656C6C6F202020202000003C
S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026
S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9
S111003848656C6C6F20776F726C642E0A0042
S5030003F9
S9030000FC

Ver también

Referencias

Otras lecturas

enlaces externos

  • SRecord es una colección de herramientas para manipular archivos en formato SREC.
  • Utilidad de conversión de archivos BIN2MOT , BINARY a Motorola S-Record.
  • SRecordizer es una herramienta para ver, editar y verificar archivos de formato S19.
  • bincopy es un paquete de Python para manipular archivos en formato SREC.
  • kk_srec es una biblioteca y un programa C para leer el formato SREC.