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 , EEPROMy 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.
Extensión de nombre de archivo | .s19 , .s28 , .s37 , .s , .s1 , .s2 , .s3 , .sx , .srec , .exo , [1] .mot , .mxt |
---|---|
Desarrollado por | Motorola |
Descripció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 fueron los primeros formatos binarios, 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 | Tipo | Recuento de bytes | Habla a | 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:
- 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.
- 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).
- 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 .
- 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ía más fácil de decodificar visualmente cada byte en una dirección específica.
- 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" | 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". [3] | |
S1 | Datos | Dirección de 16 bits | Este registro contiene datos que comienzan en el campo de dirección de 16 bits. [4] 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 | Este registro contiene datos que comienzan en una dirección de 24 bits. [4] 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 | Este registro contiene datos que comienzan en una dirección de 32 bits. [4] 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 | Este registro opcional contiene un recuento de 16 bits de registros S1 / S2 / S3. [4] 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 | 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 reciente es el cambio más reciente (puede que no sea oficial). [4] | |
S7 | Dirección de inicio (terminación) | Dirección de 32 bits | Este registro contiene la ubicación de ejecución inicial en una dirección de 32 bits. [4] [5] Esto se usa 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 | Este registro contiene la ubicación de ejecución inicial en una dirección de 24 bits. [4] [5] Esto se usa 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 | Este registro contiene la ubicación de ejecución inicial en una dirección de 16 bits. [4] [5] Esto se usa 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", [4] 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
- S0
- S1 (uno o más registros)
- S5 (registro opcional)
- S9
- Registros de direcciones de 24 bits estilo S28
- S0
- S2 (uno o más registros)
- S5 (registro opcional)
- S8
- Registros de direcciones de 32 bits estilo S37
- S0
- S3 (uno o más registros)
- S5 (registro opcional)
- 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). [4] 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 de 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 ". [4] 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 Dirección, Datos, y campos Checksum. 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 ". [6]
Campo de datos : alguna documentación recomienda un máximo de 32 bytes de datos (64 caracteres hexadecimales) en este campo. [4] 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 verificació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. [7]
Ejemplos de
- Leyenda de color
Tipo de registro Recuento de bytes Habla a Datos Suma de comprobación
Cálculo de suma de comprobación
El siguiente registro de ejemplo:
S1 13 7AF0 0A0A0D00000000000000000000000000 61
se decodifica para mostrar cómo se calcula el valor de la suma de comprobación de la siguiente manera:
- Agregar: Agregue cada byte 0x13 + 0x7A + 0xF0 + 0x0A + 0x0A + 0x0D + 0x00 + ... + 0x00 = 0x19E total.
- Máscara: mantenga el byte menos significativo del total = 0x9E.
- Complemento: Calcule el complemento a unos del byte menos significativo = 0x61.
Dirección de memoria de 16 bits
S0 0F 0000 68656C6C6F20202020200000 3C S1 1F 0000 7C0802A6900100049421FFF07C6C1B787C8C23783C60000038630000 26 S1 1F 001C 4BFFFFE5398000007D83637880010014382100107C0803A64E800020 E9 S1 11 0038 48656C6C6F20776F726C642E0A00 42 S5 03 0003F9 S9 03 0000FC
Ver también
- Codificación de binario a texto , una encuesta y comparación de algoritmos de codificación
- Formato hexadecimal de Intel
- Formato de archivo de la tecnología MOS
- Formato hexadecimal de Tektronix
Referencias
- ^ "AR # 476 PROMGen - Descripción de formatos de archivo PROM / EEPROM: MCS, EXO, HEX y otros" . Xilinx . 2010-03-08. Motorola EXORmacs - Código de formato de archivo 87. Archivado desde el original el 03/03/2020 . Consultado el 3 de marzo de 2020 .
- ^ Wiles, Mike; Felix, Andre (21 de octubre de 2000) [1975]. Holley, Michael (ed.). MCM6830L7 MIKBUG / MINIBUG ROM (PDF) (Nota de ingeniería). Motorola Semiconductor Products, Inc. Nota 100. Archivado desde el original (PDF) el 16 de junio de 2019 . Consultado el 16 de junio de 2019 . (23 páginas)
- ^ Tareski, Val. "Descripción del registro S de Motorola" . www.amelek.gda.pl . Consultado el 26 de junio de 2018 .
- ^ a b c d e f g h yo j k l "Motorola S-records de las páginas man de Unix" . Consultado el 30 de junio de 2014 .
- ^ a b c "Apéndice C". Manual de referencia del programador de la familia M68000 (PDF) . Revisión 1. Motorola ( Freescale ). 1992. págs. C-1 – C-5. ISBN 978-0-13723289-5.
- ^ "srec_examples" . sourceforge.net .
- ^ Manual de referencia del compilador CCS PCB / PCM / PCH (PDF) , Custom Computer Services, Inc. , mayo de 2014, p. 107 , consultado el 8 de febrero de 2015
Otras lecturas
- "2.8. Formatos de microprocesador 2.8.1. Requisitos de entrada: Formato Motorola Exorciser. Seleccione el código 82". Guía del operador para las capacidades de E / S en serie de los programadores de E / S de datos - Paquete de formato de traducción (PDF) . Revisión C. Corporación de E / S de datos . Octubre de 1980. p. 2-9. 055-1901. Archivado (PDF) desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 .
- Manual del usuario del módulo de evaluación M1468705EVM (1 ed.). Motorola Inc. Diciembre de 1983. M1468705EVM / Dl . Consultado el 1 de marzo de 2020 . [1] [2]
- Formatos de archivos de traducción . Corporación de E / S de datos . 1987-09-03. Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 . [3] (56 páginas)
- Feichtinger, Herwig (1987). "1.8.5. Lochstreifen-Datenformate: Das Motorola-S-Format" [1.8.5. Formatos de datos de cinta de papel]. Arbeitsbuch Mikrocomputer [ Libro de trabajo del microordenador ] (en alemán) (2 ed.). Múnich, Alemania: Franzis-Verlag GmbH . págs. 240–243 [242]. ISBN 3-7723-8022-0.
- "Apéndice A. S Registro de información". Manual del usuario del módulo de evaluación M68HC05EVM (PDF) (4 ed.). Motorola . 1990. p. A-1.
[…] Para compatibilidad con teletipos, algunos programas pueden limitar el número de [datos] bytes a tan solo 28 (56 caracteres imprimibles en el registro S). […]
- "¿Cómo interpreto datos formateados Motorola S e Intel HEX? Motorola S-Records" . Inicio> Hardware>…> Sistemas de prueba en circuito> Equipo de prueba automatizado [descontinuado]> Detalles . Tecnologías Keysight . Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 .
- Beard, Brian (2016) [20]. "Formato Motorola S-record" . Tecnologías lúcidas . Archivado desde el original el 28 de febrero de 2020 . Consultado el 28 de febrero de 2020 .
- Strombergson, Joachim; Walleij, Linus; Faltstrom, Patrik (octubre de 2005). "El formato S Hexdump" . IETF . RFC 4194 . Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 .
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.