1 概述
FOTA方案使用了 平头哥芯片开发社区(OCC)作为服务端,用户需要在 OCC 上注册账号、创建产品、并上传升级包。设备端通过连接 OCC 服务器,下载升级包,进行升级。关于OCC FOTA服务的详情,请参考OCC文档:《FOTA服务》。
2 流程说明
本小节主要通过示意图解释各个步骤之间的关系,帮助使用者更深一层理解FOTA服务。
补充:图中的model对应下文的产品型号,cid(device_id)对应下文的设备ID。
3 上传镜像
工程在编译完成后生成固件,位于工程目录 generated/images.zip。该压缩文件将用于上传至OCC服务器生成升级包。
3.1 进入控制台
3.2 添加产品
3.3 初始固件的添加及发布
附:后续会需要将这里下载并解压镜像包得到的total_iamge.bin文件烧录至设备。
3.4 升级固件的添加及发布
注:新版本的【固件版本号】不要与前版本一致,建议递增。
等待版本状态变为已发布则表示升级固件上传成功。
4 升级设备管理
4.1 生成许可证
OCC平台会对每一个设备颁发一个许可证,用于设备升级,并需把许可证信息配置到设备中。进入产品详细配置界面中选择许可证选项卡:
页面中点击下载开始下载许可证数据。解压后,pieces目录中以设备ID为文件名,保存了每个设备的信息。通过文件名获取设备ID,后续操作会说明。
4.2 添加标签
4.3 设置升级策略
5 烧录镜像
从OCC 平台上下载的镜像,会有签名认证,需要将镜像中的total_image.bin文件烧录至设备,这里用Flash Programmer工具烧录,工具来源参考《TG6101上手指南:Flash Programmer使用说明》。
烧写完成后,按下REAET键复位设备使其运行。
6 设置设备端参数
串口通过 cli 命令写入升级参数和使能FOTA功能。
> factory set model {产品型号}
success
> factory set device_id {设备ID}
success
> kv se
tint fota_en 1
kv set int success
其中“{产品型号}”为《3.2 添加产品》填写的 产品型号,而“{设备ID}”为《4.1 生成许可证》通过文件名获取设备ID。再次重启开发板,检查FOTA串口打印升级信息,设备默认是 1分钟检测一次是否有新版本,需确认"cid"后面跟的字符串是否和设备ID一致,如果一致,表示设置生效。
7 检查版本
通过检查串口打印,可以知道当前软件版本是否升级成功:
可见,如同上传固件时设备的版本号一样,由1.1.1升级到了2.2.2,故升级成功。
8 分区单独升级
默认升级包会升级多个分区,如果需要升级单独分区,需修改上传固件包images.zip内的文件config.yaml解压 images.zip ,并修改 config.yamlconfig.yaml 文件中 partitions 字段内容如下:
partitions:
- { name: bmtb, address: 0x8000000, size: 0x001000 }
- { name: boot, address: 0x8001000, size: 0x010000 }
- { name: tee, address: 0x8011000, size: 0x010000, load_addr: 0x18000000}
- { name: fct, address: 0x8021000, size: 0x004000 }
- { name: imtb, address: 0x8025000, size: 0x002000 } #36K Reserve
- { name: prim, address: 0x8030000, size: 0x600000, load_addr: 0x18010000, verify: true, update: FULL}
- { name: lfs, address: 0x8630000, size: 0x200000, update: FULL }
- { name: kv, address: 0x8830000, size: 0x004000 } #48K Reserve
- { name: misc, address: 0x8840000, size: 0x788000 } #64K Reserve
# - { name: kp, address: 0x8FFF000, size: 0x001000 } #debug
partitions 字段的每个元素表示 一个分区,其中有 update 字段的分区表示可以升级的分区,去掉 update字段即表示不升级该分区,例如:
- { name: lfs, address: 0x8630000, size: 0x200000 }
lfs分区的 update字段删除,即表示不升级 lfs分区。修改完成后,重新打包images.zip上传到OCC即可。
文章转载自:平头哥芯片开放社区 作者:炎赫