Use un chip que tenga más del doble de la cantidad de memoria Flash que necesitará para su código. De esta forma, puede llevar el nuevo firmware a esta memoria sin dejar el antiguo en caso de que algo salga mal.
Después de descifrar y verificar las sumas de comprobación en el nuevo firmware un gestor de arranque puede copiarlo en su ubicación definitiva, en sustitución de la antigua. Si algo va mal durante esta parte, después de un duro restablecer el gestor de arranque debería ver que el nuevo firmware no es válido (mediante la ejecución de la suma de comprobación, una vez más) y vuelva a intentar la copia.
Esta es la forma más simple y más infalible que conozco. También requiere poco código en el gestor de arranque y no requiere la duplicación de cualquier funcionalidad entre el programa principal y el gestor de arranque (no se necesita ninguna lógica de la comunicación en el gestor de arranque).
Utilizar un gestor de arranque y unos pocos KB de flash adicional.
El gestor de arranque realiza una actualización, enviando un comando especial a través de UART, USB, I2C u otro protocolo. Sólo el código principal se actualiza alguna vez - código de gestor de arranque no se toca, excepto a través de un programador externo (es decir JTAG / PICkit para las fotos, etc.)
Si la actualización falla (falta de energía eléctrica, alguien tropezó con un cable u otra razón), entonces el widget no funcionará, pero el gestor de arranque todavía estará allí por lo que la actualización se puede intentar de nuevo.
Se podría establecer un indicador en algún byte en algún lugar que impida que el código principal se ejecute incorrectamente porque no se ha actualizado completamente.
fuente
Si su dispositivo es relativamente caro y puede pagar el costo (y sus clientes se preocupan por las actualizaciones), puede hacer esto ...
(en general, esta técnica requiere almacenamiento externo o uso desviado de jtag ..)
Tenga un programa micro fijo (como un pequeño PIC) que puede detener el sistema y reprogramarlo.
Como no puede cambiar el firmware del "procesador de actualización", nunca puede salir mal.
1) el usuario puede actualizar el dispositivo
2) si falla una actualización, siempre pueden volver a intentarlo. No puede ser ladrillo
3) incluso cuando su dispositivo de destino no es compatible con un cargador de arranque (solo quiere arrancar y ejecutar), aún puede hacer que haga lo que quiera.
funciona para FPGA, DSP y otros objetivos extraños.
Puede tener una interfaz de usuario realmente ordenada (incluso un PIC puede ejecutar un servidor web ...)
fuente
Asegúrese de que su producto tenga algún tipo de interfaz serial simple , preferiblemente EIA232. Un conector no estándar está bien si no tiene espacio para un DB-9. Por ejemplo, un conector TRS es todo lo que necesita para TxD, RxD y tierra.
Cuando programe el dispositivo por primera vez, incluya un gestor de arranque . Esto debería ser lo más simple posible , porque tarde o temprano querrá actualizar el gestor de arranque si necesita nuevas funciones. (Probablemente ni siquiera puedas actualizarlo)
Luego el conector TRS. Use un conector con interruptor para poder detectar cuándo hay un conector presente. Simplemente salga del reinicio e inicie el gestor de arranque si el enchufe está presente; de lo contrario, inicie la aplicación. De esa manera, el gestor de arranque y el programa de aplicación del usuario permanecen bien separados. (La comprobación es en realidad parte del gestor de arranque; la necesitaremos independientemente de la versión de la aplicación, de lo contrario no podremos ingresar al gestor de arranque).
fuente
¿Qué equipo tendrá disponible el 'mejorador'? ¿Una PC, una memoria USB, una tarjeta micro SD?
Una forma sería tener la aplicación en un elemento extraíble (memoria USB, tarjeta SD, etc.). El chip carga su aplicación desde el artículo. Su actualizador simplemente intercambia el elemento y se reinicia.
Los chips de microcontrolador ARM y Cortex que conozco (NXP, Atmel) tienen un cargador de arranque en serie incorporado, por lo que si su actualizador llega con una PC y un cable en serie (y ha dispuesto una interfaz de puerto COM), simplemente puede descargar su actualizar.
fuente