Actualización del software ARM Cortex M a través del gestor de arranque

Deseo actualizar el software que se ejecuta en un nodo que tiene un MCU ARM Cortex M4.

para hacerlo, entiendo que tendré que ejecutar un cargador de arranque en mi placa de desarrollo TI ARM Cortex M4 que pueda recibir un archivo binario por aire y programar cierta sección de flash. Entiendo que la funcionalidad de recibir archivos binarios por aire tendrá que agregarse a este gestor de arranque.

Todo esto suena correcto, pero no entiendo cómo se puede lograr. ¿Cómo es posible que programe partes del flash en la MCU por la misma MCU?

¿Necesito hardware adicional para actualizar el software que se ejecuta en mi nodo? Todo lo que quiero hacer es actualizar el software que se ejecuta en mi nodo de forma inalámbrica. Se puede descargar una multa de contenedor a través de HSDPA. Para facilitar las pruebas, puedo hacerlo a través de Ethernet.

Agradecería mucho si alguien puede explicar cómo se realiza este proceso en un formato más detallado para que pueda entender el procedimiento. Muchas gracias.

Respuestas (2)

De hecho, es bastante fácil: hay varios métodos. Describí uno en este hilo .

Básicamente, tendrá dos piezas separadas de software ejecutándose. Considere la siguiente configuración (es solo un ejemplo):

  • Cargador de arranque (dirección flash 0x0000 - 0x1000)
  • Aplicación (Dirección flash 0x1000 - 0x2000)

(por supuesto, esos dependen de sus requisitos)

Ahora, la aplicación descargará el binario (lo llamaremos FW 2.0). Establecerá un bit especial en su controlador y realizará un reinicio. Su CPU siempre comienza en la dirección 0x0000, cargará su gestor de arranque. Su cargador de arranque verifica si el bit "especial" está configurado y luego mostrará el archivo binario en la dirección 0x1000-0x2000. Luego restablecerá ese bit especial, lo que indica que no hay nuevo firmware disponible. A continuación, se reiniciará de nuevo. Ahora, nuevamente, el cargador de arranque se inicia: detectará que el bit especial NO está configurado y no hará nada más que simplemente realizar un salto a la aplicación (0x1000) desde donde se ejecutará el programa (ahora con el nuevo firmware).

También es posible que desee incluir una opción para ejecutar un firmware predeterminado o para cargar un firmware a través de UART en caso de que su aplicación no se pueda escribir correctamente o se pierda la energía durante la actualización.

Gracias. Esto aclara mucho. Aunque todavía tengo un par de preguntas más. Digamos que Application_old descargó el archivo .bin, ¿dónde se supone que debe almacenarlo hasta que se vuelva a cargar el gestor de arranque? ¿Tengo que informar previamente al cargador de arranque dónde buscar un nuevo archivo .bin cada vez que se CONFIGURA el indicador especial?
¿Y cómo es posible que use una MCU para editar flash de sí misma? Yo uso el TI TIVA129 Arm Cortex M4. Espero que se permita realizar escrituras en flash mientras se ejecuta el código. Suponiendo que tengo un archivo binario, ¿el cargador de arranque lo lee byte por byte y coloca una copia del archivo bin en el área apropiada de la memoria flash? ¿Se supone que debo escribir para que el cargador de arranque admita esa acción? Muchas gracias por su respuesta
Probablemente necesitará definir una región para almacenar el archivo de la aplicación binaria (puede definir dicha sección en el enlazador). La otra opción es que depende de su cargador de arranque obtener ese archivo y (mientras lo recibe) almacenarlo directamente en la sección de la aplicación. Por lo general, desea mantener su cargador de arranque lo más simple posible (pero puede ser que necesite características especiales).
Por lo general, encontrará algún método para escribir en flash en el paquete de soporte de la placa o en las herramientas de TI (consulte los documentos de TI, no estoy familiarizado con la familia TIVA). Tenga en cuenta que no sobrescribe el código que se está ejecutando actualmente. Está sobrescribiendo código que "simplemente se sienta allí y espera a ser ejecutado".
Realmente aprecio tu esfuerzo Tom L.

Por lo general, no puede escribir en la misma página que está ejecutando, flash se divide en segmentos, páginas y bloques, las direcciones deben estar detalladas en la hoja de datos para ese procesador específico. Para moverse posiblemente, si el procesador lo admite, puede ejecutar desde la memoria. Cuando diseñe su cargador de arranque, siempre debe tener en cuenta los escenarios de fallas de energía, es decir, cómo sabe que el contenedor se descargó y se escribió en su totalidad para flashear sin ningún error, qué pasa si no lo hace, cómo se recupera.