Cargador de arranque de demostración para la placa de desarrollo Curiosity PIC32MZEF de Microchip - Gratuito RTOS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cargador de arranque de demostración para la placa de desarrollo Curiosity PIC32MZEF de Microchip

importante

Esta demostración está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos empezar por aquí al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte Guía de migración del repositorio Github de Amazon-FreeRTOS.

nota

De acuerdo con Microchip, eliminaremos Curiosity PIC32MZEF (DM320104) de la rama principal del repositorio de integración de referencias de FreeRTOS y ya no lo incluiremos en las nuevas versiones. Microchip ha publicado un aviso oficial en el que indica que PIC32MZEF (DM320104) ya no se recomienda para los nuevos diseños. Aún se puede acceder a los proyectos y al código fuente de PIC32MZEF a través de las etiquetas de las versiones anteriores. Microchip recomienda a los clientes que utilicen la placa de desarrollo PIC32MZ-EF-2.0 (DM320209) de Curiosity para los nuevos diseños. La plataforma PIC32MZv1 todavía se encuentra en la versión 202012.00 del repositorio de integración de referencias de FreeRTOS. Sin embargo, la plataforma ya no es compatible con la versión 202107.00 de la referencia de FreeRTOS.

Este cargador de arranque de demostración implementa la comprobación de la versión de firmware, la verificación de firma criptográfica y el autodiagnóstico de la aplicación. Estas capacidades admiten actualizaciones de firmware over-the-air (OTA) para FreeRTOS.

La verificación de firmware incluye la verificación de la autenticidad y la integridad del firmware nuevo recibido vía inalámbrica. El cargador de arranque verifica la firma criptográfica de la aplicación antes del arranque. La demostración utiliza el Algoritmo de firma digital de curva elíptica (ECDSA) a través de SHA-256. Las utilidades proporcionadas se pueden utilizar para generar una aplicación firmada que se pueden actualizar en el dispositivo.

El cargador de arranque es compatible con las siguientes características necesarias para OTA:

  • Mantiene imágenes de la aplicación en el dispositivo y cambia entre ellas.

  • Permite la ejecución del autodiagnóstico de una imagen recibida a través de OTA y la reversión en caso de error.

  • Comprueba la firma y la versión de la imagen de actualización OTA.

nota

Para configurar y ejecutar las demostraciones de FreeRTOS, siga los pasos que se indican en Introducción a FreeRTOS.

Estados del cargador de arranque

El proceso del cargador de arranque se muestra en la siguiente máquina de estado.

Inicie la máquina de estado Bootloader que muestre los estados de inicialización, verificación, ejecución y error con la opción Notificar error.

En la tabla siguiente se describen los estados del cargador de arranque.

Estado del cargador de arranque Descripción

Inicialización

El cargador de arranque se encuentra en el estado de inicialización.

Verificación

El cargador de arranque está verificando las imágenes presentes en el dispositivo.

Execute Image (Ejecutar imagen)

El cargador de arranque está lanzando la imagen seleccionada.

Execute Default (Ejecutar predeterminada)

El cargador de arranque está lanzando la imagen predeterminada.

Error

El cargador de arranque se encuentra en el estado de error.

En el diagrama anterior, se muestran Execute Image y Execute Default como el estado Execution.

Bootloader Execution State (Estado de ejecución del cargador de arranque)

El cargador de arranque se encuentra en el estado Execution y está listo para lanzar la imagen verificada seleccionada. Si la imagen que se van a lanzar se encuentra en el banco superior, los bancos se intercambian antes de ejecutar la imagen, ya que la aplicación siempre se crea para el banco inferior.

Bootloader Default Execution State (Estado de ejecución predeterminado del cargador de arranque)

Si la opción de configuración para lanzar la imagen predeterminada está habilitada, el cargador de arranque lanza la aplicación desde una dirección de ejecución predeterminada. Esta opción debe estar deshabilitada, excepto durante la depuración.

Bootloader Error State (Estado de error del cargador de arranque)

El cargador de arranque se encuentra en un estado de error y no hay imágenes válidas presentes en el dispositivo. El cargador de arranque debe notificar al usuario. La implementación predeterminada envía un mensaje de registro a la consola y el LED parpadea en el tablero de forma indefinida.

Dispositivo flash

La plataforma de la Curiosity PIC32MZEF de Microchip contiene un flash de programa interno de dos megabytes (MB) dividido en dos bancos. Admite el intercambio de mapas de memoria entre estos dos bancos y actualizaciones directas. El cargador de arranque de demostración se programa en una región flash del cargador inferior separada.

Diagrama de diseño de memoria que muestra las regiones Flash de arranque inferior, Flash de programa inferior de 1 MB y Flash de programa superior de 2 MB asignadas a Bootloader, Application Bank 0 y Application Bank 1, respectivamente.

Estructura de la imagen de la aplicación

Estructura de imágenes OTA que muestra el encabezado, el descriptor, el binario de la aplicación (firmado por el servicio de firmantes) y las secciones de tráileres con campos como el código mágico, los números de secuencia, las direcciones de inicio y final, la dirección de ejecución y el ID de hardware.

El diagrama muestra los componentes principales de la imagen de aplicación almacenados en cada banco del dispositivo.

Componente Tamaño (en bytes)

Encabezado de la imagen

8 bytes

Descriptor de la imagen

24 bytes

Binario de la aplicación

< 1 MB - (324)

Trailer

292 bytes

Encabezado de la imagen

Las imágenes de la aplicación en el dispositivo deben comenzar con un encabezado que consta de un código mágico y marcas de imágenes.

Campos del encabezado Tamaño (en bytes)

Código mágico

7 bytes

Marcadores de imágenes

1 byte

Código mágico

La imagen en el dispositivo Flash debe empezar con un código mágico. El código mágico predeterminado es @AFRTOS. El cargador de arranque comprueba si hay un código mágico válido presente antes de arrancar la imagen. Esta es el primer paso de la verificación.

Marcadores de imágenes

Los marcadores de imágenes se utilizan para almacenar el estado de las imágenes de la aplicación. Los marcadores se utilizan en el proceso de OTA. Los marcadores de imágenes de ambos bancos determinan el estado del dispositivo. Si la imagen de ejecución se marca como pendiente de confirmación, significa que el dispositivo está en la fase de autodiagnóstico OTA. Aunque las imágenes en los dispositivos se marcan como válidas, pasan por los mismos pasos de verificación en cada arranque. Si una imagen se marca como nueva, el cargador de arranque la marca como pendiente de confirmación y la lanza para el autodiagnóstico después de la verificación. El cargador de arranque también inicializa e inicia el temporizador de vigilancia de modo que si se produce un error en el autodiagnóstico de la nueva imagen OTA, el dispositivo se reinicia y el cargador de arranque rechaza la imagen eliminándola y ejecuta la imagen válida anterior.

El dispositivo solo puede tener una imagen válida. La otra imagen puede ser una imagen OTA nueva o una pendiente de confirmación (autodiagnóstico). Después de una actualización OTA correcta, la imagen anterior se elimina del dispositivo.

Status Valor Descripción

New image (Nueva imagen)

0xFF

La imagen de aplicación es nueva y no se ha ejecutado nunca.

Commit pending (Confirmación pendiente)

0xFE

La imagen de la aplicación está marcada para la ejecución de las pruebas.

Valid (Válido)

0xFC

La imagen de la aplicación está marcada como válida y confirmada.

Invalid (No válido)

0xF8

La imagen de la aplicación está marcada como no válido.

Descriptor de la imagen

La imagen de aplicación en el dispositivo flash debe contener el descriptor de la tras el encabezado de la imagen. El descriptor de la imagen es generado por una utilidad posterior a la compilación que utiliza archivos de configuración (ota-descriptor.config) para generar el descriptor adecuado y lo añade al binario de la aplicación. El resultado de este paso posterior a la compilación es la imagen binaria que se puede utilizar para OTA.

Campo del descriptor Tamaño (en bytes)

Sequence Number

4 bytes

Start Address (Dirección de inicio)

4 bytes

End Address (Dirección final)

4 bytes

Execution Address (Dirección de ejecución)

4 bytes

Hardware ID (ID de hardware)

4 bytes

Reserved (Reservado)

4 bytes

Sequence Number (Número de secuencia)

El número de secuencia debe incrementarse antes de crear una nueva imagen OTA. Consulte el archivo ota-descriptor.config. El cargador de arranque utiliza este número para determinar la imagen que se va a arrancar. Los valores válidos son de 1 a 4294967295.

Start Address (Dirección de inicio)

La dirección de partida de la imagen de aplicación en el dispositivo. Como el descriptor de la imagen se anexa al código binario de la aplicación, esta dirección es el principio del descriptor de la imagen.

End Address (Dirección final)

La dirección final de la imagen de la aplicación en el dispositivo, sin incluir el tráiler de imágenes.

Execution Address (Dirección de ejecución)

La dirección de ejecución de la imagen.

Hardware ID (ID de hardware)

Un ID de hardware único utilizado por el cargador de arranque para verificar que la imagen de OTA se ha creado para la plataforma correcta.

Reserved

Esto se reserva para un uso ulterior.

Tráiler de imágenes

El tráiler de imágenes se añade al código binario de la aplicación. Contiene la cadena del tipo de firma, el tamaño de la firma y la firma de la imagen.

Campo del tráiler Tamaño (en bytes)

Signature Type (Tipo de firma)

32 bytes

Signature Size (Tamaño de la firma)

4 bytes

Signature (Firma)

256 bytes

Signature Type (Tipo de firma)

El tipo de firma es una cadena que representa el algoritmo criptográfico que se está utilizando y sirve como un marcador para el tráiler. El cargador de arranque admite el Algoritmo de firma digital de curva elíptica (ECDSA). El valor predeterminado es sig-sha256-ecdsa.

Signature Size (Tamaño de la firma)

El tamaño en bytes de la firma criptográfica.

Signature

La firma criptográfica del código binario de la aplicación anexado al descriptor de la imagen.

Configuración del cargador de arranque

Las opciones de configuración básica del cargador de arranque se proporcionan en freertos/vendors/microchip/boards/curiosity_pic32mzef/bootloader/config_files/aws_boot_config.h. Se proporcionan algunas opciones para fines de depuración solamente.

Enable Default Start (Habilitar inicio predeterminado)

Habilita la ejecución de la aplicación en la dirección predeterminada y debe estar habilitado solo para la depuración. La imagen se ejecuta desde la dirección predeterminada sin ningún tipo de verificación.

Enable Crypto Signature Verification (Habilitar verificación de la firma criptográfica)

Habilita la verificación de firma criptográfica durante el arranque. Las imágenes con error se borran del dispositivo. Esta opción se ofrece solo para fines de depuración y debe permanecer habilitada en la producción.

Erase Invalid Image (Borrar imagen no válida)

Permite borrar un banco completo si se produce un error en la verificación de imagen de dicho banco. La opción se ofrece para fines de depuración y debe permanecer habilitada en la producción.

Enable Hardware ID Verification (Habilitar verificación de ID de hardware)

Habilita la verificación de ID de hardware en el descriptor de la imagen OTA y el ID de hardware programado en el cargador de arranque. Esto es opcional y se puede deshabilitar si no es necesario verificar el ID de hardware.

Enable Address Verification (Habilitar verificación de dirección)

Habilita la verificación de las direcciones de inicio, finalización y ejecución en el descriptor de la imagen OTA. Recomendamos que mantenga esta opción habilitada.

Creación del cargador de arranque

El cargador de arranque de demostración se incluye como un proyecto que se puede cargar en el proyecto aws_demos ubicado en freertos/vendors/microchip/boards/curiosity_pic32mzef/aws_demos/mplab/, en el repositorio de códigos fuente de FreeRTOS. Cuando se crea el proyecto aws_demos, crea el cargador de arranque en primer lugar, seguido de la aplicación. El resultado final es una imagen hexadecimal unificada que incluye el cargador de arranque y la aplicación. La utilidad factory_image_generator.py se suministra para generar una imagen hexadecimal unificada con firma criptográfica. Los scripts de utilidades del cargador de arranque se encuentran en freertos/demos/ota/bootloader/utility/.

Paso de compilación previa del cargador de arranque

Este paso de compilación previa ejecuta un script de utilidad llamado codesigner_cert_utility.py que extrae la clave pública del certificado de firma de código y genera un archivo de encabezado C que contiene la clave pública en formato codificado de Notación de Sintaxis Abstracta Uno (ASN.1). Este encabezado se compila en el proyecto del cargador de arranque. El encabezado generado contiene dos constantes: una matriz de la clave pública y la longitud de la clave. El proyecto del cargador de arranque también se puede crear sin aws_demos y se puede depurar como una aplicación normal.