¿Qué es el formato de archivo HEX?
Los archivos con la extensión .hex utilizan el formato Intel HEX, un formato de registro ASCII de texto plano que codifica el firmware binario compilado para que pueda transferirse de forma fiable a un programador o herramienta de flasheo. En lugar de almacenar datos binarios puros, cada byte de contenido se representa mediante dos caracteres hexadecimales, lo que mantiene el archivo totalmente legible para el ser humano en cualquier editor de texto.
Los archivos .hex son siempre texto plano y pueden abrirse con un editor de texto estándar como Notepad. Para flashear el firmware a un microcontrolador, se utilizan herramientas especializadas como avrdude o Arduino IDE. Cuando se necesita código máquina puro en su lugar, un compilador también puede generar una imagen binaria .bin, o un Motorola S-record .srec para sistemas que prefieran ese formato.
Un archivo .hex es el resultado de un compilador o ensamblador que convierte el código fuente en código máquina y luego lo codifica para una transferencia segura al dispositivo de destino.
Dónde se utilizan los archivos .hex
Los datos contenidos en los archivos .hex se utilizan para programar microcontroladores y para escribir contenido en memorias embebidas como el almacenamiento EEPROM y Flash. Los microcontroladores están instalados en muchos dispositivos de uso común, desde mandos a distancia y sistemas que controlan el motor de un coche hasta modernos sensores IoT y hardware de robótica.
Estructura de los datos en los archivos .hex
Los datos hexadecimales en un archivo .hex se almacenan en líneas de texto llamadas registros, y cada registro consta de seis campos:
- Código de inicio - dos puntos (
:) que marcan el comienzo de cada registro - Recuento de bytes - dos dígitos hexadecimales que definen el número de bytes de datos en ese registro
- Dirección - cuatro dígitos hexadecimales que especifican la dirección de destino de 16 bits (direccionando hasta 64 KB por segmento en el formato base)
- Tipo de registro - dos dígitos hexadecimales, del
00al05(por ejemplo,00= registro de datos,01= fin de archivo) - Datos - la carga útil real, con cada byte codificado como dos caracteres hexadecimales
- Checksum - dos dígitos hexadecimales que contienen el checksum de complemento a dos de todos los bytes anteriores del registro
La línea final de todo archivo Intel HEX válido es el registro fijo de fin de archivo :00000001FF.
Seguridad y protección
RIESGO: MEDIUMUn archivo .hex son datos puros y no puede ejecutarse en su PC por sí solo, por lo que abrir uno en un editor de texto o hexadecimal es inofensivo. El riesgo real está en el dispositivo: flashear un firmware no confiable puede inutilizar el hardware o cargar código malicioso en un microcontrolador. Solo flashee archivos .hex del fabricante del dispositivo o de una fuente en la que confíe, y confirme que el archivo coincide exactamente con su placa/chip antes de subirlo. Editar los bytes del firmware a mano también puede corromper la imagen.
Detalles del formato
en pocas palabras- Volcado hexadecimal genérico - Una transcripción legible por humanos de los bytes puros de otro archivo (columnas de desplazamiento + hex + ASCII) producida por un editor hexadecimal o herramientas como xxd/hexdump; a veces los blobs binarios puros también se guardan de forma laxa como .hex.
Programas que abren archivos HEX
Detalles técnicos
especificación profunda| Codificación | Texto ASCII puro; cada byte de datos se representa como dos caracteres hexadecimales |
| Carácter de inicio de registro | Dos puntos `:` (0x3A) - cada línea de registro comienza con este carácter; no hay un número mágico binario |
| Tipos de registro | Seis tipos numerados del 00 al 05: datos (00), fin de archivo (01), dirección de segmento extendida (02), dirección de segmento de inicio (03), dirección lineal extendida (04), dirección lineal de inicio (05) |
| Rango de dirección base | Direccionamiento de 16 bits por segmento, cubriendo hasta 64 KB sin registros de extensión de dirección |
| Rango de dirección extendido | Hasta 4 GB (32 bits) utilizando registros de dirección lineal extendida tipo 04, permitiendo un mapeo de memoria completo de 32 bits |
| Máximo de bytes de datos por registro | Hasta 255 bytes (0xFF) de datos por registro; la práctica común utiliza 16 o 32 bytes por registro |
| Algoritmo de checksum | Complemento a dos de 8 bits de todos los bytes del registro (recuento de bytes, dirección, tipo de registro y datos), excluyendo los dos puntos iniciales |
| Marcador de fin de archivo | El registro fijo `:00000001FF` debe terminar todo archivo Intel HEX válido |
| Tipo MIME | text/plain |
| Orden de bytes de dirección | Big-endian - el byte más significativo primero en los campos de dirección y recuento multibyte |
| Uso principal | Programación de Flash y EEPROM en microcontroladores como las familias AVR, PIC, ARM Cortex-M y 8051 |
| Origen de la cadena de herramientas | Salida de compiladores y ensambladores incluyendo avr-gcc, MPLAB X IDE, Keil MDK e IAR Embedded Workbench |
| Sobrecarga de tamaño de archivo | Aproximadamente 1,4-2 veces el tamaño del binario puro, ya que cada byte de datos se convierte en dos caracteres ASCII más los bytes de encuadre por registro |
| Lanzado | 1973 (Intel HEX format) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | en.wikipedia.org |
Conversiones de HEX
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos HEX.