[新唐博主] FOTA应用实例 - 基于 NuMaker-IoT-M487 实现连网装置的在线固件更新

[复制链接]
612|1
 楼主| 21ic小管家 发表于 2023-4-10 17:01 | 显示全部楼层 |阅读模式
物联网普及的现在,在工业、汽车应用领域中,设备制造商通常都采用在线固件更新 (Firmware Over-the-Air, FOTA) 来更新产品软件,并借此更新和解决产品可靠性和安全性问题。FOTA技术有助于提升用户对产品的满意度,降低工程师现场更新的高成本,更可避免采用昂贵的产品召回方式来对产品系统进行升级。

FOTA功能有许多的优点,但必须在下载和安装更新的过程中,避免发生任何不可预见的风险,才能有效地减少死机维修的机会。在成本压力和上市时间的要求下,通常希望能在现有成熟系统架构下,即可以简单快速并安全地实施FOTA功能。FOTA通过无线或有线的通讯方法进行固件更新成为市场的新兴需求。
NuMaker-IoT-M487 开发板提供多种连网方式与接口。基于NuMaker-IOT-M487开发板,通过与Wi-Fi 模块进行 AT 指令串口通信,可快速实现与云连接的 IoT设备典型开发应用实例。入门教程包含如何在您的计算机获取开发软件、实例编译、固件下载以及连网、连接云测试。
NuMaker-IoT-M487 开发板整合常用器件,板载多轴传感器,提供兼容 Arduino UNO 与 mikroBUS™ 接口,不论是 GPIO、UART、ADC、PWM、SPI 或 I2C 等等都能连接;外挂 SPI Flash 及提供 microSD 卡插槽。
新唐以 M487 整合 AWS IoT SDK 的 OTA 功能,提供在线固件更新的参考实例。
以下说明以 NuMaker-IoT-M487 开发板为例。预设连网方式是 Wi-Fi,下载的固件先储存在开发板上的 SPI Flash中。

图1 : NuMaker-IoT-M487 开发板。蓝框是 4M bytes 的 Winbond W25Q32 SPI Flash
M487 内部有 4K bytes LDROM 和 512K bytes APROM。LDROM 可以存放 bootloader,APROM 主要存放应用的固件。由于 LDROM 空间不够,在 APROM 划分出 Cloner 和 metadata 空间。Cloner 负责固件的复制,metadata 存放固件相关信息。图2 是 M487 内部的 LDROM / APROM 以及外设 SPI Flash 的使用地址分配。

图2 : M487 的 LDROM / APROM与板子上的 SPI Flash 的地址分配

在 AWS IoT 上建立好更新的工作 (Job) 就会触发下载固件到设备。下载的固件先存到 SPI Flash。

图3 : 固件下载
固件下载确认无误后,设备会重置从 LDROM 启始。当 LDROM 的 Loader 侦测到有新版本的固件,会将原本在 APROM 的固件复制到 SPI Flash 的回复(Rollback)区块,再将新的固件从 SPI Flash 复制到 APROM。

图4 : 固件更新
代码可以从 github 下载,网址是https://github.com/OpenNuvoton/N ... oT-CSDK-OTA-example。在实践这个 OTA 范例前,需要做一些准备与设定的步骤。
账号与开发工具

为了使用 AWS 的 IoT Core、IAM 和 S3 服务,您必须要注册 AWS 账号。网址是 https://aws.amazon.com,大部分服务第一年使用免费,之后以服务用量或网络流量计费。
Arm 提供免费的 Mbed 开发工具,您必须要注册一个 Mbed 账号。网址是 https://os.mbed.com
开发工具有 Online Compiler、Mbed Studio 和 Mbed CLI。范例的 README.md 说明是使用 Mbed CLI开发工具。在这里如改以 Mbed Studio 做为开发工具。请参考这个网址 https://os.mbed.com/docs/mbed-st ... -started/index.html下载 Mbed Studio 的程序再进行安装。
另外为了烧写固件到 M487,请安装 NuMicro ICP Programming Tool。下载网址是https://www.nuvoton.com/tool-and ... ol/programmer-tool/。下载后再安装。
在 Mbed Studio 导入范例

执行 Mbed Studio
登入您的 Mbed OS 账号
点按 File
点按 Import Program

图5 : Mbed Studio 导入
URL 填入范例的网址 https://github.com/OpenNuvoton/N ... oT-CSDK-OTA-example
点按 Add Program

图6 : Mbed Studio 导入
Active program 确定是 numaker-mbed-aws-iot-csdk-ota-example
Target 选 NuMaker-IoT-M487

导入动作包含范例和 Mbed OS 整个原始代码,需要等待一段时间。

图 7 : Mbed Studio 导入
预设 Wi-Fi 连网,所以要设定 Wi-Fi 的 SSID 和 password。
点按左侧的 mbed_app.json 文件
右侧 mbed_app.json 的代码,往下找到 NuMaker-IoT-M487 的配置。
修改 SSID 和 Password

图 8 : 修改 SSID 和 password
在 AWS 建立相关设置

登入 AWS
点击 IoT Core 服务。如果画面没有,在页面上的搜寻输入 IoT Core 找寻这个服务,再点击 IoT Core。
点击 All Devices
点击 Things
点击 Create things

图 9 : AWS 的 IoT Core 服务建立事务
点击 Create single thing
点击 Next
填入 Thing name。请指定事务名称,这里设定 MY-IOT-OTA-Device
其他选项不用变更,点击 Next
选取 Auto-generate a new certificate (recommended)
点按 Next
目前暂不用附加策略 (policy),点击 Next

图 10 : 设定设备事务名称
点击每一个 Download,下载 这五个档案
Device certificate
Public key file
Private key file
RSA 2048 bit key : Amazon Root CA 1
ECC 256 bit key : Amazon Root CA 3

图 11 : 下载相关凭证档案
回到 AWS IoT 画面
左侧选单下方选按 Setting
记下 AWS IoT 的Endpoint 网址

图 12 : 取得 AWS IoT Endpoint 网址
继续在 AWS 配合 OTA 的需求建立策略 (policy)、存储桶 (bucket)、角色 (role) 以及签章等。参考的网址是 https://docs.aws.amazon.com/free ... de/ota-prereqs.html
Prerequisites for OTA updates using MQTT 建立名为 my-ota-polcy000 的策略(policy)
Create an Amazon S3 bucket to store to store you update 建立名为 my-ota-bucket001 的存储桶(bucket)
Create an OTA update service role 建立名为 my-ota-role001 的角色(role)
Create an OTA user policy 建立 OTA 用的账号并赋予 OTA 权限
Create a code-signing certificate 建立证书 ecdsasigner.crt 和 ecdsasigner.key 档案
Grant access to code signing for AWS IoT 建立策略并授予 OTA 账号对代码签名的权限
图 13 : 建立策略 (policy)、存储桶 (bucket)、角色 (role) 以及签章
编译与烧录

到此已经取得相关的凭证,回到 Mbed Studio
点击左侧的 configs
点击 aws_config.h
用前面取得的信息填入 aws_config.h
Endpoint 填到AWS_IOT_ENDPOINT
指定一个唯一的名称给 CLIENT_IDENTIFIER
THING_NAME 填入 “MY-IOT-OTA-Device”
图 14 : 修改 aws_config.h
点击左侧的 aws_credentials.c
将前面取得的文档,都填入 aws_credentials.c
AmazonRootCA1.pem 填入 aws_rootCACrt[]
XXXX-certificate.pem.crt.txt 填入 aws_deviceCrt[]
XXXX-public.pem.key 填入 aws_devicePubKey[]
XXXX-private.pem.key 填入 aws_devicePvtKey[]
ecdsasigner.crt 填入 awe_codeVerCrt[]
请注意每一行的开头要加上 “ ,而每一行的结尾要加上 \n”。
图 15 : 修改 aws_ credentials.h
点击锤子图示开始编译代码
编译需要一段时间。编译完成后,固件 numaker-mbed-aws-iot-csdk-ota-example.bin 位于 C:\Users\YOUR-ACCOUNT\Mbed Programs\numaker-mbed-aws-iot-csdk-ota-example\BUILD\NUMAKER_IOT_M487\ARMC6 的文件夹中。
固件名称加上 _V1.0.0,变成 numaker-mbed-aws-iot-csdk-ota-example_V1.0.0.bin
点按 aws_config.h
往下移动,找到 APP_VERSION_BUILD
将 APP_VERSION_BUILD 从 0 改成 1
点按锤子图示再次编译
再把这个固件名称如同上面方式,加上 _V1.0.1
此时有两个固件,分别为 V1.0.0 和 V1.0.1 版本。
图 16 : 点击编译的图示开始编译
连接 NuMaker-IoT-M487 侧边 Nu-Link 的 USB 到 PC
执行 NuMicro ICP Programming Tool
选取 M480 series,连接到开发板
需要烧写三个固件到 NuMaker-IoT-M487 开发板。三个固件分别是前面编译的 numaker-mbed-aws-iot-csdk-ota-example_V1.0.0.bin,以及在 C:\Users\YOUT-ACCOUNT\Mbed Programs\numaker-mbed-aws-iot-csdk-ota-example\bootloader 活页夹里的 Bootloader_LDROM.bin和 Bootloader_Cloner.bin。请依序刻录:
Bootloader_LDROM.bin 到 LDROM
numaker-mbed-aws-iot-csdk-ota-example_V1.0.0.bin 到 APROM,Offset 为 0
Bootloader_Cloner.bin 到 APROM,Offset 为 72000
由于烧写过程会先从开始地址清除到最后,因此不要变更 numaker 和 cloner 的刻录顺序。
烧写完后,NuMaker-IoT-M487 里就有 v1.0.0 版本的固件了。
图17 : 烧写各个固件


两只袜子 发表于 2023-4-14 09:46 | 显示全部楼层
什么东西?应用实例没有具体说啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:祝大家天天开❤ ///w/// 有问题咨询联系QQ:3326242524

2913

主题

6656

帖子

259

粉丝
快速回复 在线客服 返回列表 返回顶部