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.
Descarga, creación, instalación y ejecución de la demostración de OTA de FreeRTOS en Renesas RX65N
importante
Esta integración de referencia 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 al repositorio RTOS Github gratuito de Amazon.
En este capítulo se muestra cómo descargar, crear, instalar y ejecutar la demostración de OTA de FreeRTOS en Renesas RX65N.
Temas
Configuración del entorno operativo
Para los procedimientos de esta sección se requieren los siguientes entornos:
-
IDE: e2 studio 7.8.0, e2 studio 2020-07
-
Cadenas de herramientas: CCRX Compiler v3.0.1
-
Dispositivos de destino: RSKRX65N-2MB
-
Depuradores: emulador E2, E2 Lite
-
Software: Renesas Flash Programmer, Renesas Secure Flash Programmer.exe, Tera Term
Configuración del hardware
-
Conecte el emulador E2 Lite y el puerto serie USB a la placa RX65N y al PC.
-
Conecte la fuente de alimentación a RX65N.
Configura tus AWS recursos
-
Para ejecutar las demostraciones de FreeRTOS, debe tener una AWS cuenta con un usuario de IAM que tenga permiso para acceder a los servicios. AWS IoT Si aún no lo ha hecho, siga los pasos que se indican en Configurar tu AWS cuenta y tus permisos.
-
Para configurar las actualizaciones de OTA, siga los pasos que se indican en OTAactualizar los requisitos previos. En concreto, siga los pasos que se indican en Requisitos previos para las OTA actualizaciones mediante MQTT.
-
Abra la consola de AWS IoT
. -
En el panel de navegación izquierdo, elija Administrar y, a continuación, Objetos.
Un objeto es una representación de un dispositivo o de una entidad lógica de AWS IoT. Puede ser un dispositivo físico o un sensor (por ejemplo, una bombilla o un interruptor en la pared). También puede ser una entidad lógica, como una instancia de una aplicación o entidad física AWS IoT, a la que no se conecta, pero que está relacionada con los dispositivos que sí lo hacen (por ejemplo, un automóvil con sensores de motor o un panel de control). AWS IoT proporciona un registro de cosas que le ayuda a administrarlas.
-
Elija Crear y después Crear un solo objeto.
-
Introduzca un Nombre para el objeto y, a continuación, seleccione Siguiente.
-
Elija Create certificate.
-
Descargue los tres archivos que se crean y, a continuación, seleccione Activar.
-
Elija Attach a policy (Asociar una política).
-
Seleccione la política que creó en Política de dispositivos.
Cada dispositivo que reciba una actualización OTA mediante MQTT debe estar registrado AWS IoT y tener una política adjunta como la que aparece en la lista. Puede encontrar más información acerca de los elementos de los objetos
"Resource"
y"Action"
en las Acciones de la política principal de AWS IoT y en los recursos de acciones principales de AWS IoT.Notas
-
Los
iot:Connect
permisos permiten que el dispositivo se conecte a AWS IoT través de MQTT. -
Los permisos
iot:Subscribe
yiot:Publish
en los temas de trabajos de AWS IoT (.../jobs/*
) permiten que el dispositivo conectado reciba notificaciones de trabajo y documentos de trabajo, y publique el estado de finalización de una ejecución de trabajo. -
Los
iot:Publish
permisosiot:Subscribe
y relacionados con los temas de las transmisiones AWS IoT OTA (.../streams/*
) permiten al dispositivo conectado obtener datos de actualización de OTA desde ellos. AWS IoT Estos permisos son necesarios para realizar actualizaciones de firmware sobre MQTT. -
Los
iot:Receive
permisos permiten AWS IoT Core publicar mensajes sobre esos temas en el dispositivo conectado. Este permiso se verifica en cada entrega de un mensaje MQTT. Puede utilizar este permiso para revocar el acceso a los clientes que están actualmente suscritos a un tema.
-
-
-
Para crear un perfil de firma de código y registrar un certificado de firma de código en él. AWS
-
Para crear las claves y la certificación, consulte la sección 7.3 “Generación de pares de claves ECDSA-SHA256 con OpenSSL” en la Política de diseño de actualización del firmware de la MCU de Renesas
. -
Abra la consola de AWS IoT
. En el panel de navegación izquierdo, elija Administrar y, a continuación, Trabajos. Seleccione Crear un trabajo y, a continuación, Crear trabajo de actualiz. de OTA. -
En Seleccionar dispositivos para actualizar, elija Seleccionar y, a continuación, elija el objeto que creó anteriormente. Seleccione Siguiente.
-
En la página Crear un trabajo de actualización OTA de FreeRTOS, realice lo siguiente:
-
En Seleccionar el protocolo para la transferencia de imágenes de firmware, elija MQTT.
-
En Seleccionar y firmar la imagen de firmware, elija Firmar una nueva imagen de firmware por mí.
-
En Perfil de firma de código, elija Crear.
-
En la ventana Crear un perfil de firma de código, introduzca un Nombre de perfil. En Plataforma de hardware de dispositivos, seleccione Simulador de Windows. En Certificado de firma de código, elija Importar.
-
Busque para seleccionar el certificado (
secp256r1.crt
), la clave privada del certificado (secp256r1.key
) y la cadena de certificados (ca.crt
). -
Introduzca el Nombre de ruta del certificado de firma de código en el dispositivo. A continuación, seleccione Crear.
-
-
-
Para conceder acceso a la firma de código AWS IoT, sigue los pasos que se indican. Conceda acceso a la firma de código para AWS IoT
Si no tiene Tera Term instalado en el PC, puede descargarlo desde https://ttssh2.osdn.jp/index.html.en
Importación, configuración del archivo de encabezado y creación de aws_demos y boot_loader
Para empezar, selecciona la última versión del paquete FreeRTOS, que se descargará GitHub e importará automáticamente al proyecto. De esta forma, puede centrarse en la configuración de FreeRTOS y en escribir el código de la aplicación.
-
Inicie e2 studio.
-
Elija Archivo y, a continuación, Importar.
-
Seleccione el proyecto Renesas GitHub FreeRTOS (con bibliotecas de IoT).
-
Seleccione Buscar más versiones… para mostrar el cuadro de diálogo de descarga.
-
Seleccione el paquete más reciente.
-
Elija Acepto para aceptar el acuerdo de licencia de usuario final.
-
Espere a que finalice la descarga.
-
Seleccione los proyectos aws_demos y boot_loader y, a continuación, seleccione Finalizar para importarlos.
-
Para ambos proyectos, abra las propiedades del proyecto. En el panel de navegación, elija Editor de cadena de herramientas.
-
Elija la Cadena de herramientas actual.
-
Elija el Creador actual.
-
-
En el panel de navegación, seleccione Configuración. Seleccione la pestaña Cadena de herramientas y, a continuación, elija la Versión de la cadena de herramientas.
Seleccione la pestaña Configuración de la herramienta, expanda Convertidor y, a continuación, seleccione Salida. En la ventana principal, asegúrese de seleccionar Archivo hexadecimal de salida y, a continuación, elija el Tipo de archivo de salida.
-
En el proyecto del cargador de arranque, abra
projects\renesas\rx65n-rsk\e2studio\boot_loader\src\key\code_signer_public_key.h
e introduzca la clave pública. Para obtener información sobre cómo crear una clave pública, consulte Cómo implementar FreeRTOS OTA mediante Amazon Web Services en RX65Ny la sección 7.3 “Generación de pares de claves ECDSA-SHA256 con OpenSSL” en la Política de diseño de actualizaciones de firmware de MCU de Renesas . Para crear el proyecto para crear
boot_loader.mot
. -
Abra el proyecto
aws_demos
.-
Abra la consola de AWS IoT
. -
En el panel de navegación izquierdo, elija Configuración. Anote su punto de conexión personalizado en el cuadro de texto Punto de enlace de datos de dispositivo.
-
Seleccione Administrar y Objetos. Anota el nombre del elemento de tu tablero. AWS IoT
-
En el proyecto
aws_demos
, abrademos/include/aws_clientcredential.h
y especifique los siguientes valores.#define clientcredentialMQTT_BROKER_ENDPOINT[] = "
Your AWS IoT endpoint
"; #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of your board
" -
Abra el archivo
tools/certificate_configuration/CertificateConfigurator.html
. -
Importe el archivo PEM del certificado y el archivo PEM de clave privada que descargó anteriormente.
-
Elija Generar y guardar aws_clientcredential_keys.h y guarde el archivo en el directorio
demos/include/
. -
Abra el archivo
vendors/renesas/boards/rx65n-rsk/aws_demos/config_files/ota_demo_config.h
y especifique estos valores.#define otapalconfigCODE_SIGNING_CERTIFICATE [] = "
your-certificate-key
";Donde
your-certificate-key
es el valor del archivosecp256r1.crt
. Recuerde añadir “\” después de cada línea de la certificación. Para obtener información sobre cómo crear el archivosecp256r1.crt
, consulte Cómo implementar FreeRTOS OTA mediante Amazon Web Services en RX65Ny la sección 7.3 “Generación de pares de claves ECDSA-SHA256 con OpenSSL” en la Política de diseño de actualizaciones de firmware de MCU de Renesas .
-
-
Tarea A: Instalar la versión inicial del firmware
-
Abra el archivo
vendors/renesas/boards/board/aws_demos/config_files/aws_demo_config.h
, comente#define CONFIG_CORE_MQTT_MUTUAL_AUTH_DEMO_ENABLED
y definaCONFIG_OTA_MQTT_UPDATE_DEMO_ENABLED
oCONFIG_OTA_HTTP_UPDATE_DEMO_ENABLED
. -
Abra el archivo
demos/include/ aws_application_version.h
y configure la versión inicial del firmware en0.9.2
. -
Cambie los siguientes ajustes en Visor de sección.
-
Seleccione Crear para crear el archivo
aws_demos.mot
.
-
-
Cree el archivo
userprog.mot
con el programador Secure Flash de Renesas.userprog.mot
es una combinación deaws_demos.mot
yboot_loader.mot
. Puede instalar este archivo en RX65N-RSK para instalar el firmware inicial.-
Descargue https://github.com/renesas/Amazon-FreeRTOS-Tools
y abra Renesas Secure Flash Programmer.exe
. -
Seleccione la pestaña Firma inicial y, a continuación, defina los siguientes parámetros:
-
Ruta de clave privada: la ubicación de
secp256r1.privatekey
. -
Ruta del archivo del cargador de arranque: la ubicación de
boot_loader.mot
(projects\renesas\rx65n-rsk\e2studio\boot_loader\HardwareDebug
). -
Ruta del archivo: la ubicación de
aws_demos.mot
(projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug
).
-
-
Cree un directorio denominado
init_firmware
, genereuserprog.mot
y guárdelo en el directorioinit_firmware
. Compruebe que se haya generado correctamente.
-
-
Instale el firmware inicial en RX65N-RSK.
-
Descargue la versión más reciente del programador Renesas Flash (GUI de programación) desde https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html
. -
Abra el archivo
vendors\renesas\rx_mcu_boards\boards\rx65n-rsk\aws_demos\flash_project\erase_from_bank\ erase.rpj
para borrar los datos del banco. -
Seleccione Empezar para borrar el banco.
-
Para instalar
userprog.mot
, seleccione Buscar…, acceda al directorioinit_firmware
, seleccione el archivouserprog.mot
y elija Iniciar.
-
-
La versión 0.9.2 (versión inicial) del firmware se instaló en su RX65N-RSK. La placa RX65N-RSK ahora escucha las actualizaciones OTA. Si ha abierto Tera Term en su PC, verá algo parecido a lo siguiente cuando se ejecute el firmware inicial.
------------------------------------------------- RX65N secure boot program ------------------------------------------------- Checking flash ROM status. bank 0 status = 0xff [LIFECYCLE_STATE_BLANK] bank 1 status = 0xfc [LIFECYCLE_STATE_INSTALLING] bank info = 1. (start bank = 0) start installing user program. copy secure boot (part1) from bank0 to bank1...OK copy secure boot (part2) from bank0 to bank1...OK update LIFECYCLE_STATE from [LIFECYCLE_STATE_INSTALLING] to [LIFECYCLE_STATE_VALID] bank1(temporary area) block0 erase (to update LIFECYCLE_STATE)...OK bank1(temporary area) block0 write (to update LIFECYCLE_STATE)...OK swap bank... ------------------------------------------------- RX65N secure boot program ------------------------------------------------- Checking flash ROM status. bank 0 status = 0xf8 [LIFECYCLE_STATE_VALID] bank 1 status = 0xff [LIFECYCLE_STATE_BLANK] bank info = 0. (start bank = 1) integrity check scheme = sig-sha256-ecdsa bank0(execute area) on code flash integrity check...OK jump to user program 0 1 [ETHER_RECEI] Deferred Interrupt Handler Task started 1 1 [ETHER_RECEI] Network buffers: 3 lowest 3 2 1 [ETHER_RECEI] Heap: current 234192 lowest 234192 3 1 [ETHER_RECEI] Queue space: lowest 8 4 1 [IP-task] InitializeNetwork returns OK 5 1 [IP-task] xNetworkInterfaceInitialise returns 0 6 101 [ETHER_RECEI] Heap: current 234592 lowest 233392 7 2102 [ETHER_RECEI] prvEMACHandlerTask: PHY LS now 1 8 3001 [IP-task] xNetworkInterfaceInitialise returns 1 9 3092 [ETHER_RECEI] Network buffers: 2 lowest 2 10 3092 [ETHER_RECEI] Queue space: lowest 7 11 3092 [ETHER_RECEI] Heap: current 233320 lowest 233320 12 3193 [ETHER_RECEI] Heap: current 233816 lowest 233120 13 3593 [IP-task] vDHCPProcess: offer c0a80a09ip 14 3597 [ETHER_RECEI] Heap: current 233200 lowest 233000 15 3597 [IP-task] vDHCPProcess: offer c0a80a09ip 16 3597 [IP-task] IP Address: 192.168.10.9 17 3597 [IP-task] Subnet Mask: 255.255.255.0 18 3597 [IP-task] Gateway Address: 192.168.10.1 19 3597 [IP-task] DNS Server Address: 192.168.10.1 20 3600 [Tmr Svc] The network is up and running 21 3622 [Tmr Svc] Write certificate... 22 3697 [ETHER_RECEI] Heap: current 232320 lowest 230904 23 4497 [ETHER_RECEI] Heap: current 226344 lowest 225944 24 5317 [iot_thread] [INFO ][DEMO][5317] ---------STARTING DEMO--------- 25 5317 [iot_thread] [INFO ][INIT][5317] SDK successfully initialized. 26 5317 [iot_thread] [INFO ][DEMO][5317] Successfully initialized the demo. Network type for the demo: 4 27 5317 [iot_thread] [INFO ][MQTT][5317] MQTT library successfully initialized. 28 5317 [iot_thread] [INFO ][DEMO][5317] OTA demo version 0.9.2 29 5317 [iot_thread] [INFO ][DEMO][5317] Connecting to broker... 30 5317 [iot_thread] [INFO ][DEMO][5317] MQTT demo client identifier is rx65n-gr-rose (length 13). 31 5325 [ETHER_RECEI] Heap: current 206944 lowest 206504 32 5325 [ETHER_RECEI] Heap: current 206440 lowest 206440 33 5325 [ETHER_RECEI] Heap: current 206240 lowest 206240 38 5334 [ETHER_RECEI] Heap: current 190288 lowest 190288 39 5334 [ETHER_RECEI] Heap: current 190088 lowest 190088 40 5361 [ETHER_RECEI] Heap: current 158512 lowest 158168 41 5363 [ETHER_RECEI] Heap: current 158032 lowest 158032 42 5364 [ETHER_RECEI] Network buffers: 1 lowest 1 43 5364 [ETHER_RECEI] Heap: current 156856 lowest 156856 44 5364 [ETHER_RECEI] Heap: current 156656 lowest 156656 46 5374 [ETHER_RECEI] Heap: current 153016 lowest 152040 47 5492 [ETHER_RECEI] Heap: current 141464 lowest 139016 48 5751 [ETHER_RECEI] Heap: current 140160 lowest 138680 49 5917 [ETHER_RECEI] Heap: current 138280 lowest 138168 59 7361 [iot_thread] [INFO ][MQTT][7361] Establishing new MQTT connection. 62 7428 [iot_thread] [INFO ][MQTT][7428] (MQTT connection 81cfc8, CONNECT operation 81d0e8) Wait complete with result SUCCESS. 63 7428 [iot_thread] [INFO ][MQTT][7428] New MQTT connection 4e8c established. 64 7430 [iot_thread] [OTA_AgentInit_internal] OTA Task is Ready. 65 7430 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [Ready] Event [Start] New state [RequestingJob] 66 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled. 67 7431 [OTA Agent T] [INFO ][MQTT][7431] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion. 68 7436 [ETHER_RECEI] Heap: current 128248 lowest 127992 69 7480 [OTA Agent T] [INFO ][MQTT][7480] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS. 70 7480 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/$next/get/accepted 71 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8) SUBSCRIBE operation scheduled. 72 7481 [OTA Agent T] [INFO ][MQTT][7481] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Waiting for operation completion. 73 7530 [OTA Agent T] [INFO ][MQTT][7530] (MQTT connection 81cfc8, SUBSCRIBE operation 818c48) Wait complete with result SUCCESS. 74 7530 [OTA Agent T] [prvSubscribeToJobNotificationTopics] OK: $aws/things/rx65n-gr-rose/jobs/notify-next 75 7530 [OTA Agent T] [prvRequestJob_Mqtt] Request #0 76 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8) MQTT PUBLISH operation queued. 77 7532 [OTA Agent T] [INFO ][MQTT][7532] (MQTT connection 81cfc8, PUBLISH operation 818b80) Waiting for operation completion. 78 7552 [OTA Agent T] [INFO ][MQTT][7552] (MQTT connection 81cfc8, PUBLISH operation 818b80) Wait complete with result SUCCESS. 79 7552 [OTA Agent T] [prvOTAAgentTask] Called handler. Current State [RequestingJob] Event [RequestJobDocument] New state [WaitingForJob] 80 7552 [OTA Agent T] [prvParseJSONbyModel] Extracted parameter [ clientToken: 0:rx65n-gr-rose ] 81 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: execution 82 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobId 83 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: jobDocument 84 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: afr_ota 85 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: protocols 86 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: files 87 7552 [OTA Agent T] [prvParseJSONbyModel] parameter not present: filepath 99 7651 [ETHER_RECEI] Heap: current 129720 lowest 127304 100 8430 [iot_thread] [INFO ][DEMO][8430] State: Ready Received: 1 Queued: 0 Processed: 0 Dropped: 0 101 9430 [iot_thread] [INFO ][DEMO][9430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 102 10430 [iot_thread] [INFO ][DEMO][10430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 103 11430 [iot_thread] [INFO ][DEMO][11430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 104 12430 [iot_thread] [INFO ][DEMO][12430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 105 13430 [iot_thread] [INFO ][DEMO][13430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 106 14430 [iot_thread] [INFO ][DEMO][14430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0 107 15430 [iot_thread] [INFO ][DEMO][15430] State: WaitingForJob Received: 1 Queued: 0 Processed: 0 Dropped: 0
-
Tarea B: actualizar la versión del firmware
-
Abra el archivo
demos/include/aws_application_version.h
y aumente el valor del tokenAPP_VERSION_BUILD
a0.9.3
. -
Vuelva a compilar el proyecto.
-
-
Cree el archivo
userprog.rsu
con el programador Secure Flash de Renesas para actualizar la versión de su firmware.-
Abra el archivo
Amazon-FreeRTOS-Tools\Renesas Secure Flash Programmer.exe
. -
Seleccione la pestaña Actualice el firmware y, a continuación, defina los siguientes parámetros:
-
Ruta del archivo: la ubicación del archivo
aws_demos.mot
(projects\renesas\rx65n-rsk\e2studio\aws_demos\HardwareDebug
).
-
-
Cree un directorio llamado
update _firmware
. Genereuserprog.rsu
y guárdela en el directorioupdate_firmware
. Compruebe que se haya generado correctamente.
-
-
Cargue la actualización del firmware,
userproj.rsu
, en un bucket de Amazon S3 tal y como se describe enCreación de un bucket de Amazon S3 para almacenar la actualización. -
Cree un trabajo para actualizar el firmware del RX65N-RSK.
AWS IoT Jobs es un servicio que notifica a uno o más dispositivos conectados una tarea pendiente. Puede usar un trabajo para administrar una flota de dispositivos, actualizar el firmware y los certificados de seguridad de sus dispositivos o realizar tareas administrativas, como reiniciar los dispositivos y realizar diagnósticos.
-
Inicie sesión en la consola de AWS IoT
. En el panel de navegación, elija Administrar y, a continuación, Trabajos. -
Elija Crear y, a continuación, elija Crear trabajo de actualización OTA. Seleccione un objeto y, a continuación, elija Siguiente.
-
Cree un trabajo de actualización OTA de FreeRTOS de la siguiente manera:
-
Elija MQTT.
-
Seleccione el perfil de firma de código que ha creado en la sección anterior.
-
Seleccione la imagen de firmware que ha cargado en un bucket de Amazon S3.
-
En Nombre de la ruta de la imagen de firmware en el dispositivo, introduzca
test
. -
Elija el rol de IAM que ha creado en la sección anterior.
-
-
Elija Siguiente.
-
Introduzca el ID y, a continuación, elija Crear.
-
-
Vuelva a abrir Tera Term para comprobar que el firmware se actualizó correctamente a la versión de demostración 0.9.3 de OTA.
-
En la AWS IoT consola, compruebe que el estado del trabajo es Correcto.