概述

本文介绍如何在CB5654开发板上进行FOTA升级。

目前系统升级支持多个分区的差分升级和全量升级。

差分升级

通过差分算法将新的固件和老的固件进行差分,从而得到差异部分。只更新差异部分可以节省数据传输带宽的消耗和存储资源的占用,在硬件资源较为紧张的IoT设备中优势较为明显。但是在固件还原的过程中需要耗费更多的时间。

全量升级

全量升级即用新版本固件直接替换老固件的一种升级方式。需要占用较大的硬件存储资源和消耗更多的数据传输带宽,但是速度会比较快。

步骤

集成使用升级功能可分为以下4个部分:

分区配置

使用升级功能需要指定升级包的存储区域。 配置文件:在board组件下的configs目录下cb5654/configs/config.yaml

mtb_version: 4
chip: sc5654a        # cb2201 / cb6501 / sc5654a
diff:
  fota_version: 0
  ram_buf: 50      #DEC     KB   ( max ram need)
  flash_buf: 16     #DEC    KB   ( buffer size)
  flash_sector: 4096 #DEC   byte ( flash sector)
  diff_mode: 010    #BIN
  double_control: 1
flash:
  base_address: 0x00000000
  run_base_address: 0x02000000 # base address of Storage
  sector: 4096       # Bytes
  size: 8388608      # $(sector count) * sector
partitions:
 # - { name: m0flash, address: 0x00000, size: 0x00070000 }
  - { name: boot, address: 0x00070000, size: 0x010000, load_addr: 0x02780000 }
  - { name: dsp,  address: 0x00080000, load_addr: 0x02000000, size: 0x200000 }
  - { name: bmtb, address: 0x00280000, size: 0x001000 }
  - { name: imtb, address: 0x00281000, size: 0x002000 }
  - { name: prim, address: 0x00283000, load_addr: 0x02200000, size: 0x200000, update: DIFF }
  - { name: kv,   address: 0x00483000, size: 0x004000 }
  - { name: misc, address: 0x00487000, size: 0x200000 }
  - { name: user, address: 0x00687000, size: 0x179000 }

字段解释

一级字段

字段 说明
mtb_version mtb格式版本号,默认1
chip 芯片类型
diff 用于差分相关的配置参数
flash flash相关参数
partitions 分区表相关参数

差分选项

diff 是否必选 说明
ram_buf 差分还原时所需的ram空间,单位KB
flash_buf 差分还原时所需的flash空间,单位KB
flash_sector flash每个sector的尺寸,单位byte
diff_mode 差分模式,二进制字符串,一般使用10模式
double_control 差分还原是否使用双flash block备份
signature_type 签名算法,当前支持RSA1024
digest_type 摘要算法,当前支持SHA1
差分模式(diff_mode)
mode_value verify(校验差分包) auto_config(自动调整flash_buf大小)
00 disable disable
01 disable enable
10 enable disable
11 enable enable

partitions

字段 是否必选 说明
name 分区名字,最长8个字节
address 分区起始地址
load_addr 分区加载地址,如果没有此字段,则默认使用address为加载地址
size 分区大小,单位byte
update 分区升级类型[DIFFFULL],默认值为DIFF;类似boot这种分区是不能升级的,因此不能填写此字段
verify 是否要对分区进行签名
file 指定分区对应的镜像文件名字,不填则表示文件名与分区名相同

分区名字

分区 说明
boot bootloader数据区
dsp dsp数据区
bmtb 分区表
imtb 分区表,包含所有分区位置及安全信息
prim 应用镜像
misc 升级备份区
kv KV数据区
user 用户数据区

FOTA服务集成

具体方法请看 FOTA服务

固件生成

FOTA服务集成完毕之后,可直接进入到解决方案中(如solutions/pangu_demo,执行make命令)编译生成固件。

编译完毕之后会在genarated目录下生成 images.zip 文件,即为固件压缩包。

FOTA升级

制作升级包,并且把升级包上传到服务器。 平头哥芯片开发社区只需要上传新老固件包即可,服务器会自动合成升级包并根据提示发布升级包。

平头哥芯片开发社区

需要把固件上传到平头哥芯片开发社区生成升级包,并选择合适的升级策略。

  1. 注册登陆平头哥芯片开发社区后,进入到控制台

  2. 在平头哥芯片开发社区上创建产品,在控制台->我的产品->添加产品,并填写标签名称以及勾选相关的CID

  3. 我的产品->编辑->FOTA页面选择添加固件

  4. 在固件信息里填写版本名称以及版本号,还需要上传在工程目录下生成的generated/images.zip镜像包

  5. 选择新添加的固件fota,点选发布

  6. 发布完成后下载发布后的镜像

    FlashProgrammer烧录该产品的许可证以及下载的镜像。

  7. 在右侧标签列表添加标签

  8. 下载完成后复位开发板,在串口界面设置kv的model,device_id,ota_url信息,再次复位,可以看到串口打印

     ---> kv set model sc5654
     <--- kv set string success
    
     ----> kv set device_id [device_id]
     <--- kv set string success
    
     ---> kv set otaurl http://occ.t-head.cn/api/image/ota/pull
     <--- kv set string success
    

    从log的版本号中可以看出,已经和occ上的版本号统一了,都是1.10.1-20190820.119-R-sc5654

  9. 继续添加固件版本fota1.0.1,此版本可以与之前的版本相同或者不同,并发布版本

  1. 返回之前的界面后选择升级策略

  2. 点击确定后再次复位,可以看到串口打印升级信息

  3. fota下载成功软件自动复位重启后可以看到信息

    从log中可以看出来,对应的版本号已经变成了最新的版本1.11.1-20190820.1252-R-sc5654 至此,说明fota已经成功升级为对应的固件版本

自主服务器

  • product工具(在yoc_sdk/tools/build目录下)对images.zip进行签名并写入版本号fota_test_v1.0
./product image images.zip -l -v 'fota_test_v1.0' -p
  • product工具生成升级包,表示要升级到fota_test_v1.1版本
./product diff -f images.zip images_new.zip -v "fota_test_v1.1"

会在当前目录生成fota.bin的文件,此文件即为升级包。 如果出现以下提示,说明需要升级的分区镜像完全相同。可以添加-r选项强制生成升级包。

all the images are same !
generate ota img failed !
  • 将升级包上传至自主服务器
  • 设备检测到新版本的升级包下载数据并重启
  • 设备开始升级新固件,升级结束自动重启

操作流程

  1. 下载代码并选择OTA demo程序和开发板
  2. 登录云端账号创建产品,并获取许可证
  3. 编译生成不同版本固件,一个低版本,一个高版本
  4. 将低版本的固件烧录到对应的目标板子,运行demo程序
  5. 待设备上线后将高版本的固件上传到云端
  6. 云端推送固件,设备端接收固件,并做完整性校验
  7. 设备端完成固件接收,重启进入系统升级
  8. 系统升级完毕,设备重启,正常运行

注意事项

升级包的制作一定要做好版本管理,否则基础版本不对应会导致设备升级完成之后变成砖块

results matching ""

    No results matching ""