Cálculo de CRC para el firmware del cargador de arranque

1

Estoy usando PIC32MZ2048EFH064, MPLABx3.40, XC32 V1.42, Harmony V2.01b. Y mi aplicación de PC está utilizando MS Visual C ++ 2010 Express.   En lugar de usar el descargador Pic32 de microchip, quiero compilar mi propio descargador y quiero descargar mi firmware cifrado personalizado mediante la aplicación host de PC. Ahora, el problema es que puedo conectar y descargar el firmware del cargador de arranque usando mi aplicación personalizada, pero la verificación CRC (es decir, la verificación del programa) ha fallado. Debido a que el CRC calculado (y enviado) por el firmware no coincide con el CRC calculado por mi aplicación personalizada para el archivo hexadecimal. Ahora mis observaciones son:

Both are using same address range and same program length over which CRC is calcuated.
Address range is : 0x9FC00000 - 0x9FC0FFF4.
Both are using same CRC table, CRC routine to calculate CRC.

Quiero preguntar si el cálculo de CRC debería incluir también el área de registro de configuración.

    
pregunta Ravi C

1 respuesta

2

Por lo general, la imagen de su programa solo tendrá su CRC de verificación computada en toda la imagen y no en ninguno de los registros de configuración en la MCU. Pero tenga en cuenta que los cálculos de CRC pueden tener muchas variables incluso con la misma tabla de aceleración de CRC. Algunos de estos factores:

  1. ¿Se incluyen las ubicaciones de bytes CRC en la propia imagen en el cálculo?
  2. ¿Comienzas el ciclo de cálculo de CRC con una semilla de 0x0000 o 0xFFFF?
  3. El orden en que almacena los bytes CRC en la imagen debe ser comprendido.
  4. La tabla CRC suele tener una anchura de 16 bits para la aplicación de tipo MCU. Hace una diferencia si toma el byte de la tabla alta primero en el bucle de cálculo o el byte bajo.
  5. A veces, el CRC final calculado se invierte lógicamente antes de que se rellene su valor en la imagen.

Se recomienda encarecidamente que prototipo de su generador de CRC y rutinas de comprobación en un entorno de lenguaje C de PC para asegurar que los algoritmos codifiquen y descodifiquen de la misma manera. Si está tratando de comparar su propio algoritmo con el generado / decodificado por otra herramienta, es especialmente importante probarlo a fondo antes de intentar que funcione en un sistema integrado en vivo donde puede ser más difícil de probar y depurar.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas