Guión
Quiero actualizar un dispositivo IoT de bajo costo por aire con un nuevo firmware que actualice los microcontroladores del dispositivo. La memoria del microcontrolador es memoria flash en el rango de 32k a 128k (cada centavo cuenta). Esta memoria barata tiene una limitación importante: solo se puede borrar en bloque.
Pregunta
¿Eso significa que no puedo hacer actualizaciones diferenciales ( delta )? ¿Siempre tengo que actualizar toda la memoria del controlador (o al menos partes importantes)?
Quiero reducir la necesidad de flashear todo y arriesgarme a bloquear el dispositivo lo más posible. ¿Existen estrategias existentes para flashear microcontroladores en el aire?
Respuestas:
La respuesta simple es sí: necesita suficientes bloques de flash para soportar el gestor de arranque y las imágenes de código A / B si desea una alta confiabilidad. Antes de activar la nueva imagen, puede escribir todo, verificarlo y volver a intentarlo.
Sin embargo, esta es una estrategia costosa / confiable y hay cosas que puede hacer para reducir los gastos generales. El soporte de bajo nivel para las actualizaciones de OTA también puede venir como parte del firmware del sistema operativo o del sistema operativo, por lo que puede evitar la suya propia a menos que desee aprender. Esta característica podría describirse como
FOTA
.Particionar su base de código permite actualizaciones incrementales, en el mejor de los casos el gestor de arranque puede abrir la conexión de red, descargar y verificar el código sin necesidad de ningún código de usuario alternativo. Con una puerta de enlace local, la administración de esta tarea se puede delegar desde los puntos finales de bajo costo.
Muchos dispositivos tienen una pequeña cantidad de flash de borrado de palabras, e incluso si falla esto, generalmente puede establecer bits sin necesidad de borrar un bloque completo. Estas características se pueden utilizar para manipular tablas de salto y unir código que se actualiza en bloques de tamaños de bloque. Incluso si inicialmente planificó un espacio de código A / B completo, es posible que deba recurrir a un esquema más complejo cuando la base de código crece demasiado.
Para aclarar la funcionalidad que se puede lograr con una solución sofisticada de firmware por aire, el gestor de arranque y potencialmente una pila de comunicación primaria pueden permanecer residentes mientras se vuelve a flashear el espacio de aplicación de usuario restante. Esto no necesita ninguna sobrecarga (particularmente si la partición del bloque es suave). En el escenario donde la pila de comunicación necesita actualizarse, la región generalmente utilizada para el código de la aplicación se puede usar temporalmente durante la descarga y la verificación. Lograr esto requiere cierto soporte en el SoC, pero los dispositivos de segunda y tercera generación diseñados con esto en mente ya existen.
fuente
Además de su código que realiza la actualización que sería relativamente estática, debe mantener dos imágenes en su almacenamiento: una imagen activa y una imagen de respaldo. Siempre que necesite actualizar, hágalo en la copia de seguridad, luego cambie eso para que esté activo. Una vez estable, actualice la imagen activa anterior que ahora debería ser su copia de seguridad.
Con eso en mente, puede usar algoritmos de nivelación de desgaste al actualizar ambas imágenes. El código para tales algoritmos podría tomar alrededor del 10-15% del almacenamiento total, pero vale la pena para extender la vida útil del dispositivo.
( Techtarget.com: desgaste de nivelación )
fuente
Freescale Semiconductor describe una forma sólida de actualización de firmware por aire para sus microcontroladores Kinetis .
Se llama: Program Flash Memory Swap .
Puede actualizar bloques y luego intercambiarlos.
El documento vinculado contiene una descripción detallada.
Asegura actualizaciones de firmware más seguras, pero como requiere más memoria flash, ciertamente cuesta más . Tampoco es aplicable a ningún tipo de microcontrolador, solo aquellos que admiten el intercambio interno de bloques flash.
fuente