Inicio Artículos Actualización del firmware en el campo mediante un microcontrolador de la modo...

Actualización del firmware en el campo mediante un microcontrolador de la modo DFU

Casi todos los sistema integrados necesitan la capacidad de tener su firmware actualizado en el campo para agregar nuevas funciones o corregir errores. No obstante, las actualizaciones de firmware sobre el campo pueden ser un desafío ya que un desarrollador debe programar su propio cargador de arranque o adquirir un cargador de arranque de un proveedor de componentes de terceros. No es un camino fácil. En este artículo se muestra cómo usar la función de actualizaciones de firmware del dispositivo (DFU) que está incorporada en muchos microcontroladores, pero a menudo se pasa por alto.
Opciones de actualización de firmware
El desarrollo de un gestor de arranque desde cero no es un esfuerzo trivial. Los desarrolladores necesitan analizar su espacio flash de modo que varias aplicaciones puedan coexistir. Luego necesitan desarrollar algún método para transferir sus binarios compilados en el microcontrolador sin el uso de una herramienta de programación. Esto les obliga a desarrollar su protocolo de comunicación o aumentar la complejidad del sistema mediante la adición de memoria externa para almacenar imágenes nuevas. También pueden aumentar la cantidad de memoria interna que tienen en su microcontrolador. Además, el propio software puede tornarse complejo, ya que el gestor de arranque necesita establecer el estado del sistema y determinar si es seguro ir al código de la aplicación o no. El uso de un cargador de arranque personalizado puede ofrecer a los desarrolladores la flexibilidad necesaria para sus aplicaciones, pero hay una actualización de firmware estándar que puede funcionar en muchas aplicaciones que no requieren el trabajo de un programador: el estándar USB incorporado en la ac tualización del firmware del dispositivo (DFU). Esto puede utilizarse para actualizar un código de aplicación de microcontrolador en el campo a través de su puerto USB, que puede reducir drásticamente el proceso de actualización del firmware y el ciclo de desarrollo. La DFU se ha vuelto tan generalizada que algunos proveedores de microcontroladores como STMicroelectronics incluso incluyen el software necesario para realizar las actualizaciones codificados en la ROM. Los que no, suelen proporcionar un código de ejemplo sobre cómo apoyar la DFU.
Selección de un microcontrolador capaz de DFU
La manera más fácil de apoyar DFU es seleccionar un microcontrolador que ya tenga DFU incluida en su ROM, como los microcontroladores STM32 de STMicroelectronics. De estos, los dispositivos que serían más interesantes para que un desarrollador pueda experimentar son los de STM32 IoT Discovery Node y los STM32F429 Discovery Kit. El STM32 IoT Discovery Node es una placa de desarrollo de bajo costo diseñada para usar como un nodo sensor IoT. La placa incluye varias interfaces diferentes para la conexión de la placa, como Wi-Fi y Bluetooth. Lo interesante es que la tarjeta STM32L475 proporciona a los desarrolladores la capacidad de probar y utilizar las capacidades de DFU en un dispositivo diseñado para conectarse a Internet. Para los desarrolladores que simplemente quieren probar la DFU en un dispositivo normal que sería independiente, el STM32F429 Discovery Kit es un kit de desarrollo conocido de bajo costo para la serie STM32F4 de microcontroladores. Veamos cómo un desarrollador podría probar DFU en estos microcontroladores.

 
 
 
 
 
 
Figura 1. El STM32 IoT Discovery Node de STMicroelectronics está basado en un núcleo ARMCortex ®®-M4 que ejecuta un MCU STM32L475 que incluye capacidades de modo DFU para actualizaciones de firmware. Este dispositivo está diseñado para su uso como un nodo de IoT. (Fuente de la imagen: STMicroelectronics).
 
Un simple ejemplo de DFU
Se accede a DFU de forma distinta en cada microcontrolador. Como un simple ejemplo, veamos cómo un desarrollador podría actualizar su firmware en un dispositivo que ejecuta un MCU STM32L475. Como se mencionó anteriormente, los microcontroladores STM32 incluyen un gestor de arranque de DFU incorporado en la ROM. Para acceder a ese gestor de arranque, un desarrollador debe conectar a tierra uno de los pines de BOOT (arranque) mientras el MCU se está iniciando. Los pines BOOT controlan el modo en que arranca en el MCU, como el arranque desde la memoria flash, la memoria RAM, o en nuestro caso preferido, el modo USB de la DFU. Preparar una aplicación para ser descargada usando DFU no requiere ningún trabajo adicional para el desarrollador.

 
 
 
 
 
 
Figura 2. El STM32F429 Discovery Kit de STMicroelectronics se basa en un núcleo ARM® Cortex®-M4. Este MCU de la placa de desarrollo de bajo costo también incluye capacidades de modo DFU para actualizaciones de firmware. (Fuente de la imagen: STMicroelectronics).
 
La colección de compiladores GNU (GCC), junto con muchos otras cadenas de herramientas, apoyan la generación de un archivo de DFU cuando se compila una aplicación. El único truco para el desarrollador es determinar dónde se almacena ese archivo: al igual que con cualquier aplicación normal, la carpeta de depurar u objetos está donde se puede encontrar el archivo .dfu. El archivo DFU es muy similar a otros formatos de registro de aplicación como binario, s-registro y archivos hex. El formato de archivo contiene la dirección y datos la información que se transmiten a través de una conexión USB, se procesan y luego se escriben en la ubicación especificada dentro de flash. El proceso es tan perfecto que un desarrollador rara vez, si acaso, necesita incluso examinar el protocolo que se utiliza. Esto se abstrae desde detrás de bambalinas, lo que ayuda a hacer el proceso de actualización del firmware y el esfuerzo de desarrollo menos complejos. Hay varias herramientas que un desarrollador puede utilizar para transferir su aplicación a su microcontrolador usando DFU.
Una herramienta de línea de comandos generales que se puede utilizar es el dfu-util. Está disponible tanto en Linux y Windows® como un paquete de software de fuente abierta. Si un desarrollador está trabajando con la cadena de herramientas de STM, puede beneficiarse de la aplicación DfuSe de STMicroelectronics (Figura 3). DfuSe es una utilidad de interfaz gráfica de usuario de Windows capaz de detectar cualquier dispositivo STM32 que ha estado encendido en modo DFU y conectado mediante USB a la computadora. Los desarrolladores pueden recuperar información como el ID de proveedor y producto programado. Si el espacio de flash no ha sido debidamente asegurado, incluso se puede copiar el contenido de la memoria del MCU y almacenarlos en la computadora utilizando el cuadro de acción de carga. Cuando utiliza DfuSe, un desarrollador sólo suelen utilizar las secciones de Actualización o Verificar Acción.

 
 
 
 
 
 
Figura 3. La herramienta DfuSe de STMicroelectronics puede utilizarse para programar un archivo DFU que se genera mediante un compilador como GCC y se carga en un microcontrolador capaz de DFU. (Fuente de la imagen: Beningo Embedded Group).
 
En este ámbito, un desarrollador puede seleccionar su archivo de aplicación DFU y, a continuación, seleccionar el botón de actualización. Entonces DfuSe coordina automáticamente el proceso de actualización de firmware hasta que todo el archivo se ha cargado correctamente en el MCU. Un desarrollador puede entonces decidir verificar que la imagen se ha recibido correctamente. Una vez verificado, los pines de arranque pueden volver a configurarse en su configuración predeterminada, como el arranque a flash, y luego se selecciona el modo ‘Abandonar DFU’ para cargar y ejecutar el firmware actualizado.
Usar DFU en dispositivos sin soporte DFU
Sólo porque un microcontrolador no incluye un gestor de arranque DFU en ROM no significa que un desarrollador no pueda aún utilizar capacidades de DFU. DFU es una clase de USB y es compatible con muchas pilas USB. Esto significa que un desarrollador puede añadir fácilmente capacidad DFU a sus marcos de aplicaciones y aún así realizar una actualización de DFU. Por ejemplo, Microchip Technology ofrece A32UC3A3, que no tiene incorporado un modo DFU (Figura 4). Un desarrollador puede seguir una sencilla nota de aplicación que describe cómo funciona DFU, y cómo un desarrollador debe configurar su microcontrolador para apoyar DFU correctamente.

 
 
 
 
 
Figura 4. La placa de evaluación integrada AVR de 32 bits MCU AT32UC3A3 UC3-A3 XPLD AVR®32 no incluye DFU on-chip pero puede añadir código USB de marco que habilita la función de actualización de firmware de DFU. (Fuente de la imagen: Microchip Technology).
 
Consejos y trucos para realizar actualizaciones de firmware
La actualización del firmware en el campo no tiene necesariamente que provenir únicamente de un microcontrolador capaz DFU. Un desarrollador puede decidir que un enfoque alternativo a la actualización del firmware es necesario o más práctico. En estas circunstancias, hay varios consejos que un desarrollador debe tener en cuenta sobre su proceso de actualización de firmware. Estos incluyen:
• Usar un hash o checksum para verificar la aplicación se escribirá en la memoria del microcontrolador.
• Seleccione un microcontrolador con memoria suficiente para almacenar una copia de seguridad del firmware, de manera que si algo va mal, la versión del firmware se puede revertir.
• Verificar que si el microcontrolador tenga un flashloader incorporado, que el usuario final no podrá activar accidentalmente.
• Asegúrese de que todos los gestores de arranque de software hayan sido compilados y optimizados para el tamaño.
• Bloquear el periférico de flash, de modo que la aplicación no pueda ser leída desde la memoria y sufrir ingeniería inversa.
• Asegúrese siempre de que el puntero de pila, la tabla de vectores y los registros de contador de programa se establecen en el correspondiente valor de aplicación.
• Considere la posibilidad de utilizar otros métodos de actualización como actualizaciones dragn- drop mediante MSD USB como se demostró en el KL46Z Freedom Board (Figura 5).

 
 
 
 
 
 
 
Figura 5. KL46Z Freedom Board de NXP Semiconductor es una placa de desarrollo de bajo costo que por defecto no admite instrucciones de uso. Los desarrolladores pueden usar otros métodos de actualización, tales como MSD USB donde se arrastra y suelta una nueva imagen de firmware en la memoria interna. (Fuente de la imagen: NXP Semiconductor).
 
Conclusión
Casi todos los sistemas integrados requieren un método para actualizar el código de la aplicación en el campo para evitar reclamos. La creación de un gestor de arranque desde cero o modificar uno existente puede introducir complejidad y problemas de integración en un ciclo de desarrollo. En su lugar, los desarrolladores pueden hacer uso de la capacidad DFU bien probada que está incorporada en el estándar USB para realizar actualizaciones de campo rápida y eficientemente con poco o ningún esfuerzo. Para que esto funcione a la perfección, los desarrolladores deben revisar cuidadosamente sus microcontroladores y determinar si la DFU está incorporada a su microcontrolador o si necesitan incluir una pila de software que permita capacidades de DFU.