Genere y actualice un archivo binario para STM32

Creé una imagen de cargador de arranque para mi STM32 y la almacené en un área específica de la memoria. Tengo un nuevo proyecto de Keil que representa la capa de aplicación. Por defecto, Keil genera un archivo HEX. Lo que quiero hacer es mantener la imagen del gestor de arranque y actualizar la capa de la aplicación en otra área de la memoria. El FW final verificará una entrada GPIO. Si está en un nivel alto, se lanzará la imagen del gestor de arranque y actualizará la capa de la aplicación con una nueva imagen; de lo contrario (la entrada GPIO está en un nivel bajo), se activará el modo normal y se ejecutará la aplicación. Mi pregunta es:

  1. ¿Debo convertir el archivo hexadecimal generado de la capa de la aplicación en un archivo BIN para actualizarlo en un área específica de la memoria?
  2. ¿Cómo puedo especificar la dirección de inicio de la capa de aplicación y su longitud?.
  3. Si utilizo una herramienta para convertir un archivo HEX a binario, ¿qué debo hacer con la dirección vacía reservada para la imagen del gestor de arranque?

Respuestas (2)

  1. Eso depende de su aplicación de gestor de arranque. ¿Puede leer archivos HEX?
  2. Utilice el cuadro de diálogo de destino en las opciones de destino, o un archivo de carga de dispersión .
  3. No incluyas regiones vacías esto en la imagen. Keil incluye una herramienta para crear archivos binarios.

Tenga en cuenta que es posible que desee firmar su archivo binario con una suma de comprobación. El enlazador de brazo no puede hacer esto. Pero puedes hacer esto con SRecord . (también eliminando/convirtiendo regiones)

Para ver un ejemplo de cómo usar SRecord para agregar una suma de verificación, consulte la sección Prueba de inicio de la autoprueba de ROM en la nota de la aplicación MDK-ARM.

No estoy familiarizado con la cadena de herramientas de Keil, por lo que solo puedo dar respuestas generales a las que tendrá que investigar los detalles en su manual de la cadena de herramientas.

  1. Los archivos HEX contienen información sobre dónde colocar los bytes. Esto podría o no ser útil en su situación. Los cargadores de arranque simplistas que encontré hasta ahora solo manejaban archivos binarios. Comenzaron a escribir bytes en la ubicación que le indicaste, por lo que el manejo de la dirección estaba fuera del gestor de arranque.
  2. Esto generalmente se hace con un archivo de enlace. El archivo del enlazador contendrá el espacio de direcciones de su aplicación, que no tiene que ser toda la memoria disponible en un dispositivo. En un IDE suele haber un cuadro de diálogo que le permitirá cambiar esa configuración. En un proyecto creado en la línea de comandos, debe especificarlo a través de los parámetros de la línea de comandos, pero generalmente es un archivo (pueden volverse bastante complejos).
  3. No incluya el espacio (vacío) que utilizan otras partes. Comience con el primer byte de su aplicación.
  4. Utilice un mecanismo de suma de comprobación para asegurarse de que tiene una aplicación ejecutable. Por ejemplo, coloque un CRC32 al final de su espacio de su aplicación, complete el espacio no utilizado con 0xFF solo para asegurarse de que también estén incluidos. (Aplicación - 0xFFs - CRC de 32 bits al final). Con suerte, su cadena de herramientas tiene una herramienta para hacer eso (los enlazadores probablemente no hagan esto, para IAR es el ielftool el que hace esto).