Autoactualización del firmware de MCU, un método fiable y práctico

Haga clic en "Uncle Wheat" arriba y seleccione "Cuenta pública superior/estrella"

Productos secos de bienestar, entregados lo antes posible.

La función principal del programa de arranque del software del automóvil es actualizar el programa de la aplicación. En un proyecto de cliente específico, el arranque también forma parte de los requisitos del cliente y existen planes de desarrollo de software que siguen al proyecto (para distinguirlo de otros arranques, el arranque del proyecto se denomina CB, arranque del cliente).

Para el controlador que se ha sacado de la cubierta de la caja, ya sea que se pruebe en manos del proveedor o del cliente, la aplicación solo se puede actualizar a través de CB. Se requieren métodos adicionales si se requiere la actualización automática de CB.

especificación:

Los OEM solo tienen especificaciones para la actualización del programa de la aplicación, pero no para la actualización automática del arranque. Debido a que la especificación es para vehículos producidos en masa, el servicio posventa solo es responsable de la actualización del programa de la aplicación, no de la actualización de arranque (y la actualización de arranque no está permitida).

Por lo tanto, la actualización automática de Boot solo existe en la etapa de desarrollo del proyecto y la solución la brinda el proveedor. Este documento analiza las ventajas y desventajas de cinco métodos de autoactualización de arranque.

Método 1, SB actualiza CB:

Como se muestra en la Figura 1-a, algunas arquitecturas de software son Arranque de dos niveles: SB+CB, Start Boot solo verifica el sistema de CPU mínimo y no tiene nada que ver con el circuito periférico del proyecto específico. Es independiente de los requisitos del cliente. y mantenido por el proveedor En el proyecto Piloto Debe ser desarrollado temprano. Debido a que la secuencia de inicio del programa es SB->CB->App, agregar lógica de actualización en SB puede actualizar CB. En circunstancias normales, ejecute el programa de actualización de CB App. En casos especiales, el programa permanecerá en la SB y actualizará la CB después de iniciar el programa.

ventaja:

1. La estructura lógica es simple y clara, y la división del trabajo del software es clara.

2. Una actualización, fácil de operar.

defecto:

1. Se requiere un espacio Flash más grande para almacenar la lógica de actualización en la SB, y este método de actualización debe prohibirse después del SOP del proyecto, lo que genera un desperdicio adicional.

2. El software se inicia en tres niveles, la estructura es compleja y los costos de desarrollo y mantenimiento son altos. Es una carga para los controladores que no necesitan SB.

3. ¿Qué sucede si también es necesario actualizar SB? Según esta estrategia, ¿tiene que ser un SSB? Obviamente no es realista.

7a88ca9624dd40ee9827e93b12e07790.png

Método 2, actualización de reinicio de RAM + Flash

Como se muestra en la Figura 2-a, en ausencia de SB, la secuencia de inicio del programa es CB->App. Cuando necesite actualizar el Arranque, primero descargue el programa Reboot en la RAM no utilizada (Figura 2-b), luego ejecute ReBoot en el entorno de la RAM para descargar el nuevo CB (Figura 2-c)

ventaja:

1. No se requiere espacio Flash adicional y solo se requiere una pequeña cantidad de RAM para ejecutar el programa de arranque, por lo que la RAM diseñada para la aplicación puede guardar temporalmente el programa de reinicio.

2. Si la velocidad de borrado de RAM es rápida, la velocidad de descarga de ReBoot será muy rápida.

defecto:

Si la CPU se apaga durante el proceso de actualización de CB, después de volver a encenderla, no hay contenido de reinicio, la CB se ha dañado, el programa no se puede iniciar normalmente y el controlador está paralizado. cubra y use JTAG para programar el programa.

020a59cb26eef0e68e8d49a7dec02c9a.png

Método 3, actualización de RAM+RAM ReBoot (mejora del método 2)

Primero descargue ReBoot (azul) + NewCB ​​​​(púrpura) juntos en la RAM (Figura 3-a), luego ejecute ReBoot, borre el área CB Flash y copie NewCB ​​en RAM al área CB Flash (este paso es hecho internamente). Finalmente, después de encender y reiniciar, ReBoot y NewCB ​​​​en RAM se pierden automáticamente y el programa comienza a ejecutarse desde el nuevo CB.

ventaja:

 1. En comparación con el segundo método, hay una actualización menos (porque ReBoot y CB están vinculados).

 2. En comparación con el segundo método, la actualización de CB se ejecuta completamente dentro de la CPU, libre de interferencias externas y toma menos tiempo.

defecto:

 1. En comparación con el segundo método, se requiere más espacio de RAM para almacenar ReBoot+NewCB.

 2. Al igual que el segundo método, existe el riesgo de que el controlador se paralice después del corte de energía en la fase de actualización de CB.

fbea45efd698b718ce87df730ea2b84b.png

Método 4. Con la ayuda del programa de aplicaciones Flash space

La actualización se divide en tres pasos: 1. Figura 4-b, ejecute el CB, borre la aplicación y descargue ReBoot en el área de la aplicación. 2. Figura 4-c Ejecute ReBoot, borre el CB anterior y actualice el nuevo CB. 3. Figura 4-d Ejecute el nuevo CB y vuelva a la aplicación.

ventaja:

1. No se requieren recursos Flash y RAM adicionales.

2. Estable y confiable, a través del diseño optimizado, se puede garantizar que la energía se corte repentinamente en cualquier paso, y puede continuar funcionando después de encender la energía, y el controlador no se cepillará hasta la muerte. (Consulte el apéndice para conocer el método de diseño detallado)

3. Una pequeña modificación de CB puede convertirse en un programa de reinicio y el desarrollo es rápido.

defecto:

1. Hay muchos pasos.Para actualizar el CB, primero debe borrar la aplicación y luego restaurar la aplicación al menos tres veces. Es fácil confundir a los operadores que no están familiarizados con el procedimiento.

2. El tiempo de actualización general será más largo, dos Boots + una aplicación

5ead26ec587f86074a1845f3f01f9526.png

Método 5. Con la ayuda de espacio Flash adicional

En comparación con el método 4, se requiere un espacio Flash adicional del mismo tamaño que CB y la actualización se divide en tres pasos:

  1. Figura 5-b, ejecute CB, flash Reinicie a Flash adicional.

  2. Figura 5-c, ejecute ReBoot para actualizar CB.

  3. Ejecute un nuevo CB, destruya el reinicio (borre todo o simplemente borre el indicador de validez de reinicio)

Ventajas: en comparación con el método 4, no es necesario destruir el programa de la aplicación y esta parte del tiempo de actualización también se guarda.

Desventaja: en comparación con el Modo 4, se requiere espacio Flash adicional y debe ser un Bloque independiente.

31afdbfa2b5a1c85cf424e72b7ace9ee.png

resumen:

Esencialmente solo hay tres:

  1. Basándose en el programa de inicio SB (método 1), este método es el que más ahorra tiempo cuando los recursos Flash de la CPU son abundantes y el proyecto requiere dos niveles de arranque.

  2. Con ayuda de RAM (métodos 2 y 3) 3. Con ayuda de Flash (métodos 4 y 5). Cuando solo se necesita un arranque (CB) de una sola etapa, es más conveniente usar el segundo y el tercer método cuando se puede tolerar el tiempo, la mano de obra y el costo material de abrir el controlador debido a la parálisis de actualización del arranque.

  3. Cuando solo se requiere un Arranque (CB) de una sola etapa, no está permitido o es inconveniente que el controlador abra la cubierta, pero es más confiable usar los métodos 4 y 5 cuando puede tolerar una gran cantidad de pasos de actualización de Arranque y mucho tiempo.

En resumen, los ingenieros deben considerar exhaustivamente un método de actualización automática de arranque adecuado para sus propios productos y proyectos en función de factores de costo como la arquitectura general del software, los recursos de la CPU, el tiempo, la mano de obra y los materiales.

apéndice:

"El método de implementación específico del método cuatro de actualización automática de arranque (con la ayuda de Flash)"

antecedentes:

Para el modo 4, use Flash para actualizar [no hay riesgo de que se apague el parpadeo, el controlador pierde energía repentinamente en cualquier paso y puede continuar funcionando después del encendido. ] La conclusión es condicional. El autor da esta conclusión desde la premisa más ideal, es decir, siempre que haya al menos un Arranque en el controlador (incluso si uno es malo), el programa puede iniciarse y ejecutarse desde cualquier Arranque normal. Aquí hay una pregunta, ¿cómo determina la CPU qué arranque es bueno y cuál es malo? Ahora analice la situación y varias contramedidas del riesgo de que el controlador muera rozado.

Introducción de la dirección de inicio de dos niveles:

Como se muestra en la figura a continuación, después de encender la CPU, el programa verifica la validez del BootSector en el orden de las direcciones.Si el BOOT_ID es válido, la ejecución comienza desde la dirección especificada; de lo contrario, se verifica el siguiente BootSector.

24a9d925a46c19a2c2c6518fd0f98f99.png

Considere el caso en el que la CPU tiene al menos dos direcciones de arranque, como se muestra en la Figura 1-a, si y solo cuando la dirección de arranque 1 es válida (la aplicación está vacía), el programa entrará automáticamente en Arranque después del inicio. Como se muestra en la Figura 1-b, si y solo si la dirección de inicio 2 es válida (sin la prueba de arranque), el programa ingresará automáticamente a la aplicación después del inicio. Como se muestra en la Figura 1-c, cuando las direcciones de inicio 1 y 2 están activas, el programa comienza primero desde la dirección 1. Al verificar la validez del programa de la aplicación en el inicio, la instrucción de salto se usa para saltar a la dirección de inicio 2 para empezar a ejecutar la aplicación.

9510f48b6bb8702797ffd1543e2054e8.png

0f061fc01236fea8d037e27229522f11.png

Método 4 Análisis de la situación del controlador siendo rozado hasta la muerte:

Como se muestra en la Figura 2-a, la energía se corta mientras se ejecuta Reiniciar para actualizar el CB. Después de volver a encender, como se muestra en la Figura 2-b, dado que el contenido de la dirección de inicio 1 se actualiza al comienzo de la actualización, es válido y el programa ingresará al CB para ejecutarse, pero el CB está incompleto. y debe haber un error en la operación, y el programa no saltará a ReBoot, por lo que ya no se puede actualizar (es decir, cepillado hasta la muerte). Suponiendo que el tiempo desde que se borra el CB antiguo hasta que se completa el flasheo del CB nuevo es de 10S, no se puede ignorar la posibilidad de un corte de energía durante este período.

9b4ba288ebf341fd639b1e48db2749f0.png

Contramedida 1. El indicador de validez de arranque coincide con la dirección de inicio

Considerando la situación más común, la CPU solo puede borrar el bloque completo (16K, 32K, 64K...), y puede escribir unidades de al menos 4 bytes. No hay límite de secuencia. Ahora CB solo usa un bloque. Ahora ajuste la secuencia de actualización: después de que el borrado sea exitoso, actualice primero el área naranja y actualice el indicador de validez (área gris) de la dirección de inicio 1 en el último paso. De esta manera, incluso si se pierde la energía durante la actualización del área naranja.

Después de volver a encender la alimentación, el programa aún comienza a ejecutarse desde la dirección de inicio 2, es decir, vuelva a ejecutar Reiniciar y continúe esperando el comando de actualización de CB, como se muestra en la Figura 3-a. No hay necesidad de cambiar el proceso de descarga durante la operación específica. Use el servicio $34,36 para transferir datos desde la computadora host a la CPU en secuencia. Primero coloque el indicador de validez de la dirección de inicio 1 en la RAM. Después de descargar el área naranja al Flash, luego escriba el indicador de validez de la dirección de inicio 1 en el Flash desde la RAM (este paso se puede completar en 10 ms, y la posibilidad de una falla de energía durante este tiempo se puede ignorar por completo)

Si la dirección de inicio 1 se actualiza correctamente en el último paso, después de que se vuelva a encender, el programa comienza a ejecutar un nuevo inicio desde la dirección de inicio 1. Es decir, la dirección de inicio 1 desempeña el papel del indicador de validez de inicio (el primer borrado, la última escritura), como se muestra en la Figura 3-b.

228ad04da3cfb03e59ef3be580e4b459.png

Contramedida 2. El indicador de validez de inicio se sigue de forma independiente y se agrega la lógica de verificación de validez de inicio.

Como se muestra en la Figura 4-a, el arranque se divide en dos segmentos. Solo una pequeña cantidad de lógica de autocomprobación de inicio se almacena en Sec1. Cuando detecta que el CB_ValidFlg colocado al final de Sec2 no es válido, se considera que el arranque está incompleto y el control del programa salta. Continúe ejecutando ReBoot a la dirección de inicio 2 y actualice el arranque nuevamente.

Como se muestra en la Figura 4-b, cuando la lógica de Sec1 detecta que CB_ValidFlg es válido, se considera que se completó la actualización de arranque y el control del programa salta a Sec2. En este momento, dado que App_ValidFlg al final de App ( ReBoot) no es válido, el programa no saltará Transfer to ReBoot, y luego puede actualizar la nueva aplicación.

Este método solo necesita hacer algunos ajustes a la lógica y la asignación de segmentos del CB, y no necesita cambiar el orden de actualización. La lógica de autocomprobación de inicio en Sec1 se puede hacer lo más pequeña posible Siempre que no se pierda la energía durante la actualización del segmento Sec1, el controlador no se apagará, lo que reduce en gran medida el riesgo. Sin embargo, para el software producido en masa, no es razonable saltar directamente a la aplicación después de verificar que CB_ValidFlg no es válido, por lo que cuando finaliza el arranque, la lógica de salto debe desactivarse.

80737953e468a8018cf9162ea5e97247.png

resumen:

La contramedida 1 es simple y confiable, y ha sido verificada por pruebas reales, que pueden cumplir completamente con los requisitos de ECU de actualización estable.

原文地址:https://blog.csdn.net/weixin_40137252/article/details/111054011
转自公众号:技术让梦想更伟大
版权声明:本文来源网络,版权归原作者所有。版权问题,请联系删除。
—— The End ——

						
							
									往期推荐

						
							
								
								
									
										如何成为高手?嵌入式开发进阶之路...

								
							
								
									
										单片机高负载串口通信,如何设计可靠的方案?

								
							
								
									
										量子充电,9秒充满一辆车!这是玄学?

								
							
								
									
										GD32替换STM32,有哪些区别?这些坑你别踩...

								
							
								
									
										高效解析单片机通讯协议,最实用的一个方法

								
							
								
									
										最适合单片机的通信协议,如何设计?

								
							
点击下方名片关注我

Supongo que te gusta

Origin blog.csdn.net/u010632165/article/details/123887931
Recomendado
Clasificación