Estoy tratando de entender un archivo HEX que compilé con Microchip MPLAB X IDE usando el Microchip MPLAB XC16 Compilador .
Con respecto a la MCU, estoy apuntando al PIC24EP512GU814. Sin embargo, el alcance de esta pregunta debería aplicarse al menos a todas las MCU PIC24.
Para compilar el ejemplo HEX a continuación, durante el asistente "Nuevo proyecto", seleccioné Muestras > Microchip incrustado > PIC24 C Template y seleccionó la configuración XC16_24EP512GU814 .
De acuerdo con PIC24EP / dsPIC33 Datasheet sección 4.1.1 página 48, La memoria está segmentado en palabras de 16 bits, de modo que cada posición (0x0000, 0x0001, ...) contenga 16 bits. En la misma página de la hoja de datos, se dice que las instrucciones del programa son de 24 bits y abarcan 2 palabras, de modo que el byte más significativo de la palabra más significativa es cero (00000000b).
Esto no parece ser consistente con el archivo HEX compilado. Aquí están las primeras 5 líneas del archivo, numeradas y con las diferentes partes espaciadas según las especificaciones de Intel HEX .
1. :02 0000 04 0000 fa
2. :08 0000 00 0002040000000000 f2
3. :02 0000 04 0000 fa
4. :10 0008 00 c8020000ce020000e4020000d4020000 92
5. :10 0018 00 da020000e8020000ec020000e0020000 42
Considere las líneas 4 y 5. El primer campo cuenta correctamente 0x10 (16) bytes en el campo de datos. Sin embargo, el segundo campo que denota la ubicación en la memoria salta de 0x0008 a 0x0018, o posiciones 0x0010 (16).
Según mi interpretación, esto significa que este archivo HEX en particular es de 8 bits en lugar de 16 bits porque cada posición está ocupada por un byte.
- ¿Hay alguna manera de hacer que el compilador genere un archivo de 16 bits?
- ¿Este archivo sigue siendo válido para una MCU de 16 bits? ¿Cómo puedo interpretar el archivo HEX para poder flashear manualmente la MCU?