芯片开放社区
直播中

Arvinhw

9年用户 845经验值
擅长:嵌入式技术
私信 关注
[技术讨论]

TG6101上手指南:FOTA使用

1 概述

FOTA方案使用了 平头哥芯片开发社区(OCC)作为服务端,用户需要在 OCC 上注册账号、创建产品、并上传升级包。设备端通过连接 OCC 服务器,下载升级包,进行升级。关于OCC FOTA服务的详情,请参考OCC文档:《FOTA服务》

2 流程说明

本小节主要通过示意图解释各个步骤之间的关系,帮助使用者更深一层理解FOTA服务。

补充:图中的model对应下文的产品型号,cid(device_id)对应下文的设备ID。

3 上传镜像

工程在编译完成后生成固件,位于工程目录 generated/images.zip。该压缩文件将用于上传至OCC服务器生成升级包。

3.1 进入控制台

注册或登录平头哥芯片开发社区(OCC)控制台


3.2 添加产品

  • 在平头哥芯片开发社区上创建产品,在控制台->FOTA服务->添加产品,填写产品信息并提交。


  • 注意:【产品型号】需要设置到设备中,后续操作会说明。
  • 提交完成后页面中生成产品列表,在新建产品的右侧点击编辑按钮,可进入产品的详细配置界面。


3.3 初始固件的添加及发布

  • 进入产品详细配置界面中选择FOTA选项卡,点击添加固件 进入添加新版本设置。


  • 添加新版本页面中填写名称以及版本号、上传工程目录下生成的generated/images.zip镜像包并提交。


  • 点击上一步骤提交的待发布固件名称,并点击发布,等待服务器处理十几秒即完成版本发布。



  • 确认版本状态为已发布后,下载发布后的镜像至本地。


附:后续会需要将这里下载并解压镜像包得到的total_iamge.bin文件烧录至设备。

3.4 升级固件的添加及发布

  • 再次将设备升级后的版本固件通过添加固件上传。


  • 填写版本信息:


注:新版本的【固件版本号】不要与前版本一致,建议递增。

  • 选中并发布新固件版本:


等待版本状态变为已发布则表示升级固件上传成功。

4 升级设备管理

4.1 生成许可证

OCC平台会对每一个设备颁发一个许可证,用于设备升级,并需把许可证信息配置到设备中。进入产品详细配置界面中选择许可证选项卡:


页面中点击下载开始下载许可证数据。解压后,pieces目录中以设备ID为文件名,保存了每个设备的信息。通过文件名获取设备ID,后续操作会说明。

4.2 添加标签

  • 标签是用来区分升级的设备组,一个标签可以包含多个设备,版本升级通过选择不同的标签来确定需要升级的设备。点击【添加标签】,为设备添加标签。


  • 选择设备对应的CID 来创建标签并提交。


4.3 设置升级策略

  • 通过点击升级版本对应操作栏下的升级策略设置版本之间的升级策略。


  • 勾选对应标签并确认提交即可。


5 烧录镜像

从OCC 平台上下载的镜像,会有签名认证,需要将镜像中的total_image.bin文件烧录至设备,这里用Flash Programmer工具烧录,工具来源参考《TG6101上手指南:Flash Programmer使用说明》。

  • 通过镜像包中确认bin文件起始烧录地址,如图所示的0x8000000


  • 浏览镜像包中的total_iamge.bin文件,并设置起始地址为 0x8000000,步骤以及细节如下:


  • 直到烧录工具提示Success则表示文件烧录成功,至此,可关闭烧录工具。

烧写完成后,按下REAET键复位设备使其运行。

6 设置设备端参数

串口通过 cli 命令写入升级参数和使能FOTA功能。

  > factory set model {产品型号}
  success
  > factory set device_id {设备ID}
  success
  > kv setint 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即可。

文章转载自:平头哥芯片开放社区 作者:炎赫

更多回帖

发帖
×
20
完善资料,
赚取积分