请选择 进入手机版 | 继续访问电脑版
查看: 1255|回复: 0

[分享] 在i.MX RT平台上进行阿里云OTA

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32001
    最后登录
    2024-4-9
    发表于 2021-9-16 15:21:03 | 显示全部楼层 |阅读模式
    在i.MX RT平台上进行阿里云OTA
    一、背景介绍
    在这个万物互联的时代,OTA升级功能更是为我们的生活增加便利。
    OTA = Over-the-Air Technology,空中下载技术。OTA升级则是通过OTA方式对设备实现固件或者软件升级。最为常见的就是移动终端的OTA升级,近几年很火的新能源汽车也让大家对这一技术更加熟悉。


    二、概述


    本文将介绍在i.MX RT10XX系列平台上,进行基于阿里云物联网平台的OTA。
    在此之前,先简单介绍一下本文用到的SBL&SFW工程。
    SBL(Secure Bootloader)是MCU SE团队为i.MX RT全平台设计的一个second bootloader工具,帮助用户进行程序的安全启动。
    SFW(Secure Firmware)是基于FreeRTOS创建的工程,生成固件为了配合SBL来实现完整的FOTA流程。
    本文的阿里云物联网平台OTA就是SFW中的一部分,SFW还支持U盘、SD卡以及AWS平台的OTA升级。
    以下是SBL和SFW两个工程的Github链接:
    https://github.com/NXPmicro/sbl


    https://github.com/NXPmicro/sfw

    三、配置阿里云OTA升级代码


    3.1 创建云端设备
    要实现阿里云物联网平台的OTA升级,首先要将阿里云物联网平台提供的C Link SDK(本次移植使用阿里云C-SDK 4.0.0)移植到工程中。
    登录阿里云物联网平台:https://iot.console.aliyun.com/,进入公共实例板块,创建自己的产品。
    13.png
    在“所属品类”中选择任一即可。“节点类型”选择“直连设备”,“连网方式”选择“以太网”,其余选项默认即可。


    完成产品创建之后,在相应产品下创建需要的设备,如对阿里云物联网平台不了解的读者,可以通过阿里云物联网平台的入门教程-公共实例快速入门中查找相应操作。


    至此我们已经拿到了对于i.MX RT设备连接阿里云IOT平台非常重要的三元组:ProductKey、DeviceName和DeviceSecret。


    3.2 配置设备端C-SDK
    创建好产品和设备之后,我们需要将阿里云物联网平台的Link SDK移植到我们的设备端中。


    在“公共实例”中,点击左侧最下端“文档与工具”,选择“设备接入SDK”中的“SDK定制”来下载所需要的设备端SDK。


    将下载的C-SDK包中需要用到的core、OTA文件夹以及external文件夹中的证书ali_ca_cert.c、portfiles文件夹中的freertos_port.c和demos文件夹中的fota_basic_demo.c添加到我们原本的工程文件中以便修改。


    本例程中,OTA升级的流程图如下所示:
    14.png
    3.3 OTA升级程序
    在OTA功能函数中,有几个需要注意的地方:


    1. 当前固件的版本号
    15.png
    在OTA升级的过程中,云端需要校验当前固件版本号,如果是需要升级的固件版本,才会对设备发送升级请求以及升级包URL,OTA升级才能继续下去。


    2.将固件一次性下载完成
    16.png
    阿里云C-SDK默认的下载方式为两段下载,此处我们采用一次性下载完整个固件的方式。


    3. flash的擦除
    17.png
    在设备端收到了OTA升级的MQTT消息后,会下载新的固件,并且需要设备端烧写到指定的flash位置,在此之前,需要先将该区域擦一下。


    4. 烧写下载的固件到flash上,分段下载,每一段一保存
    18.png
    至于其他一些可以变动的地方,可以详细阅读阿里云C-SDK。




    四、OTA演示


    下面就来演示一下在SBL工程配合下的阿里云OTA升级工程,平台为i.MX RT1064EVK,利用以太网进行网络连接(用户也可自行配置无线模块进行连网)。
    1. 修改当前版本号生成bin文件
    19.png
    在IAR中修改当前版本为1.0.0和1.4.0,并且生成相应的bin文件(此处以IAR工程为例);


    2. 在SBL工程中利用签名脚本进行bin文件的加头签名操作


    将上一步生成的两个bin文件拷贝到SBL工程中sbl/component/secure/mcuboot/scripts文件夹下,利用PowerShell给两个bin文件签名。


    3. 创建OTA任务


    在云端控制台页面,公共实例下的监控运维中,选择OTA升级。点击添加升级包按键以添加升级包,输入升级包名称,选择相应的升级选项,注意,升级包版本需要和上传的bin文件中版本一致,否则后续的OTA无法成功。


    4. 开始运行OTA工程


    Step1. 利用MCUBootUtility工具将加签的1064_ali_100.bin下载到板子的第一个启动区,默认的slot1为flash_offset+0x100000 ~ flash_offset+0x200000,整个区域大小为1MB。
    20.png
    Step2. 运行Secure Bootloader


    将SBL工程通过IDE下载到板子中,下面就可以开始进行整个OTA流程了。


    在开发板上插入以太网网线,按下reset键开始运行工程,串口显示“The image now inPRIMARY_SLOT slot”和“Getting IP address from DHCP”表示在slot1里面的程序已经成功运行。“IPv4 Address:” 和 “version:1.0.0”表示网络连接成功并且阿里云云端接收到当先设备的版本为1.0.0。
    21.png
    22.png

    上传升级包时,如果选择了需要进行升级包验证,则在云端接收到当前版本信息后,需要进行操作验证;如果没有选择验证,则可直接进行升级进程。


    串口会显示升级包信息,可以看到OTA目标版本为1.4.0,大小信息也会显示。
    23.png
    24.png
    下面的打印信息显示下载请求已经成功发送并开始下载流程,
    25.png
    下载完成后会有打印信息如下,并且开始进行系统重启,在系统重启后,会启动slot2中的升级包程序,可以看到当前的版本信息,并且可以在控制台看到OTA升级已经验证完成。
    26.png
    五、总结
    本文介绍了在i.MX RT平台上进行阿里云的OTA升级。
    虽然只是简单的版本号升级演示,但是通过本文可以知道在基于i.MX RT的IOT设备进行固件升级时,需要进行操作的地方有哪些,在针对你的设备进行功能代码升级的同时,加上上文中的OTA升级部分,即可轻松借助阿里云物联网平台进行设备的固件升级。

    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-18 21:57 , Processed in 0.107306 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表