Actualizaciones de firmware a prueba de balas

16

¿Qué tipo de técnicas se utilizan para permitir a un usuario de manera segura actualizar un post venta de firmware del dispositivo? Quiero hacer esto con un microcontrolador Cortex M3 / 4, pero supongo que las técnicas para cualquier micro deben hacer.

Preferiblemente con la menor cantidad de componentes adicionales, por supuesto.

    
pregunta Imbrondir

5 respuestas

16

Use un chip que tenga más del doble de memoria Flash que necesitará para su código. De esta manera, puede llevar el nuevo firmware a esta memoria mientras aún deja 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 cargador de arranque puede copiarlo en su ubicación final, reemplazando el anterior. Si algo sale mal durante esta parte, después de un restablecimiento completo, el gestor de arranque debería ver que el nuevo firmware no es válido (ejecutando la suma de comprobación una vez más) y volver a intentar la copia.

Esta es la forma más simple e infalible que conozco. También requiere poco código en el cargador de arranque y no requiere duplicar ninguna funcionalidad entre el programa principal y el cargador de arranque (no necesita ninguna lógica de comunicación en el cargador de arranque).

    
respondido por el jpc
12

Use un cargador de arranque y unos pocos KB de flash adicional.

El gestor de arranque realiza una actualización mediante el envío de un comando especial a través de UART, USB, I2C u otro protocolo. Solo se actualiza el código principal: el código del cargador de arranque nunca se toca, excepto a través de un programador externo (es decir, JTAG / PICkit para PIC, etc.)

Si la actualización falla (falla de alimentación, alguien se tropezó por un cable u otro motivo), entonces el widget no funcionará, pero el cargador de arranque seguirá allí para que la actualización pueda intentarse nuevamente.

Se podría establecer una marca en algún byte en algún lugar, lo que evita que el código principal se ejecute incorrectamente porque no se ha actualizado por completo.

    
respondido por el Thomas O
3

Si su dispositivo es comparativamente costoso y usted puede pagar el costo (y a sus clientes les importan las actualizaciones), puede hacerlo ...

(en general, esta técnica requiere almacenamiento externo o uso tortuoso de jtag ..)

Tenga un programa fijo micro (como un pequeño PIC) que puede detener el sistema y reprogramarlo.

porque no puede cambiar el firmware del "procesador de actualización", no puede fallar nunca.

1) el usuario puede actualizar el dispositivo

2) si falla una actualización, siempre pueden intentarlo de nuevo. No puede ser de ladrillo

3) incluso cuando su dispositivo de destino no es compatible con un cargador de arranque (solo quiere arrancar y ejecutar) Todavía puedes hacer que haga lo que quieras.

funciona para FPGA, DSP y otros objetivos extraños.

Puede tener una interfaz de usuario realmente clara (incluso un PIC puede ejecutar un servidor web ...)

    
respondido por el Tim Williscroft
2

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 programes el dispositivo por primera vez, incluye un gestor de arranque . Esto debería ser lo más simple posible , porque tarde o temprano querría actualizar el propio cargador de arranque si necesita nuevas funciones. (Probablemente no pueda incluso actualizarlo)

Luego el conector TRS. Use un conector con un interruptor para que pueda detectar cuándo hay un conector presente. Simplemente verifique que no haya reinicio, e inicie el gestor de arranque si el enchufe está presente; de lo contrario, inicie la aplicación. De esta manera, el cargador de arranque y el programa de aplicación del usuario permanecen bien separados. (La verificació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 cargador de arranque).

    
respondido por el stevenvh
1

¿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 elemento. 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), puede simplemente descarga tu actualización.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas