¿El compilador MPLAB XC16 genera archivos HEX de 8 bits para PIC24?

2

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?
pregunta Daniel

3 respuestas

2

Los archivos Intel HEX siempre se direccionan en bytes. Esto no significa que no puedan manejar la información para otros tamaños de palabra, solo que debe haber una convención sobre cómo esas palabras se asignan a los bytes del archivo HEX.

Al igual que con todos los demás PIC direccionados sin byte (PIC 10, 12 y 16), las direcciones se duplican en el archivo HEX. El software del programador PIC lo sabe e interpreta las direcciones del archivo HEX en consecuencia. Esto, por supuesto, está bien documentado en la especificación de programación para cualquier parte que desee programar.

Usted dice que quiere hacer su propio programador. Eso está bien, siempre y cuando entiendas que esto llevará a way más tiempo y frustración que solo obtener uno conocido. Si el punto es la experiencia y el aprendizaje de crear el tuyo, entonces está bien, pero de lo contrario, compra uno.

Si realmente quieres crear el tuyo, deberías mirar el código de mis programadores PIC. Todo el código del host y el firmware están abiertos y disponibles en la versión del Software de desarrollo en enlace . Al mirar a través del código fuente del host, puede ver cómo hay indicadores que indican si las direcciones de los archivos HEX se duplican para varias partes de la memoria del PIC.

Si hace que su programador sea compatible con mi protocolo de programadores PIC , puede hacer uso de todos Mis herramientas del lado del host. Esto podría ser muy útil al abrir su sistema, ya que ha conocido el código de trabajo en el otro lado. La especificación del protocolo puede parecer intimidante al principio, pero observe detenidamente y verá que gran parte de ella es opcional, especialmente si planea admitir solo un PIC único.

    
respondido por el Olin Lathrop
3

Los archivos Intel HEX siempre especifican bytes, y las direcciones en el archivo se miden en bytes. Es solo un formato conveniente utilizado para transferir datos binarios entre su enlazador y su software de programación. Depende del software de programación que esté utilizando para interpretar los datos y sus direcciones y colocarlos en el PIC correctamente.

    
respondido por el Jim Paris
1

Aunque Olin Lathrop ha respondido la pregunta, estoy complementando su respuesta con un ejemplo de cómo se aplicaría a la plantilla que pegué en mi publicación original.

Después de una investigación adicional del IDE, encontré el visor de memoria accediendo a Ventana > Vistas de memoria PIC > Memoria del programa .

Comparando la tabla presentada en esta ventana con el archivo HEX, podemos observar cómo están estructuradas las instrucciones. Para el siguiente ejemplo, divido cada campo de dirección por dos y espaciando las instrucciones:

1. :02 0000 04 0000                                fa
2. :08 0000 00 00020400 00000000                   f2
3. :02 0000 04 0000                                fa
4. :10 0004 00 c8020000 ce020000 e4020000 d4020000 92
5. :10 000C 00 da020000 e8020000 ec020000 e0020000 42

Dado que los datos están en forma de big endian, los bytes aparecen en orden inverso a un literal hexadecimal. De este modo, cambiar los datos a literales hexadecimales produce lo siguiente:

1. :02 0000 04 0000                                        fa
2. :08 0000 00 0x00040200 0x00000000                       f2
3. :02 0000 04 0000                                        fa
4. :10 0004 00 0x000002c8 0x000002ce 0x000002e4 0x000002d4 92
5. :10 000C 00 0x000002da 0x000002e8 0x000002ec 0x000002e0 42
    
respondido por el Daniel

Lea otras preguntas en las etiquetas