1 概述
FOTA方案使用了平头哥芯片开发社区(OCC)作为服务端,用户需要在 OCC 上注册账号、创建产品、并上传升级包。设备端通过连接 OCC 服务器,下载升级包,进行升级。
2 流程说明
本小节主要通过示意图解释各个步骤之间的关系,帮助使用者更深一层理解FOTA服务流程。
补充:图中的model对应下文的产品名称,cid(device_id)对应下文的许可证文件名。
3 上传固件
本小节主要描述如何上传各版本固件至服务端。
工程编译完成后会生成固件,位于工程目录
solutions/offline_audio_w800_rgb/generated/images.zip,该
images.zip压缩文件将用于上传至OCC服务器生成升级包。
3.1 进入控制台
3.2 添加产品
1 在平头哥芯片开发社区上创建产品:控制台->产品服务->添加产品
2 填写产品信息并提交,注意:【产品名称】需要设置到设备中,后续操作会说明。
3 提交完成后页面中生成产品列表,在新建产品的右侧点击编辑按钮,可进入产品的详细配置界面。
3.3 初始固件的添加及发布
1 进入产品详细配置界面中选择FOTA选项卡,点击添加固件 进入添加新版本设置。
2 添加新版本页面中填写名称以及版本号、上传工程目录下生成的generated/images.zip镜像包并提交。
3 点击上一步骤提交的待发布固件名称,随后点击发布,等待服务器处理几秒,刷新页面:
4 确认版本状态为
已发布后,下载发布后的镜像至本地。
![](https://file.elecfans.com/web2/M00/34/99/pYYBAGImN0mAQAZoAACrVaWO6Io192.png)
注意:后续会需要将这里下载并解压镜像包得到的文件按实际情况烧录至设备。
3.4 升级固件的添加及发布
1 将设备升级后的版本固件再次通过
添加固件上传至服务器。
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN0uALAM7AABpq7_RRbw178.png)
2 填写版本信息:
注:新版本的【固件版本号】不要与前版本一致,建议递增。
3 选中新版本固件并发布:
等待版本状态变为已发布则表示升级固件上传成功。
4 升级设备管理
本小节主要描述如何设置已上传的固件版本之间的升级策略。
4.1 生成许可证
OCC平台会对每一个设备颁发一个许可证,用于设备升级,需把许可证信息配置到设备中。
1 申请许可证:进入产品详细配置界面中选择
许可证选项卡,并点击
申请许可证进行申请
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN1KAJuq6AACCSrh1fgg627.png)
2 填写申请信息:如下图所示,如实填写相关信息
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN1SAPlHqAABFaS-E3ts785.png)
3 下载许可证:申请完成后,生成与下载许可证文件至本地,步骤示意如下图
点击下载开始下载许可证数据。解压后,pieces目录中的文件名代表了设备ID(CID)。设备ID需要设置到设备中,后续操作会说明。
4.2 添加标签
1 添加标签:标签是用来区分升级的设备组,一个标签可以包含多个设备,版本升级通过选择不同的标签来确定需要升级的设备。点击【添加标签】,为设备添加标签。
![](https://file.elecfans.com/web2/M00/34/99/pYYBAGImN1eASXleAACVwJmT1J8590.png)
2 设置标签:选择设备对应的CID 来创建标签并提交。
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN1mAeh9OAACc-ZZ1rXM800.png)
4.3 设置升级策略
1 通过点击升级版本对应操作栏下的
升级策略去设置版本之间的升级策略。
![](https://file.elecfans.com/web2/M00/34/99/pYYBAGImN1uASeLnAACf-VCktYs440.png)
2 勾选对应标签并确认提交即可。
5 烧录固件
由于OCC固件升级须有签名认证,因此FOTA的初始固件必须从OCC平台下载。本小节主要介绍下载镜像的烧录方式(初始固件的来源参考3.3节的第4步)。
5.1 通过串口升级完成烧录
可将来自OCC的镜像文件再重新打包为*.fls文件格式,然后通过串口升级的方式完成烧录,方法如下:
1 新建文件夹(如 temp)
2 将来自镜像包中的boot、config.yaml、imtb和prim这4个文件拷贝至新建的文件夹下
3 拷贝wm_tool这一工程编译后得到的工具文件至新建的文件夹下,
工具存放路径:solutions/offline_audio_w800_rgb/out/offline_audio_w800_rgb/wm_tool
4 顺序执行以下shell命令完成.fls格式文件的制作:
cd ./temp
chmod 777 wm_tool
cp boot boot.bin
cp prim prim.bin
cp imtb imtb.bin
./wm_tool -b boot.bin -fc 0 -it 512 -ih 8002000 -ra 8002400 -ua 8132000 -nh 81FA000 -un 0
./wm_tool -b prim.bin -fc 0 -it 1 -ih 81FA000 -ra 8012000 -ua 8132000 -nh 0 -un 0
./wm_tool -b imtb.bin -fc 0 -it 1 -ih 20047400 -ra 8010000 -ua 0 -nh 0 -un 0
cat boot.img prim.img imtb.img > yoc_fota.fls
rm -f boot.bin prim.bin imtb.bin boot.img prim.img imtb.img
可输入命令:./wm_tool,查看工具的更多帮助信息
5 串口烧录请参考文档
《离线语音控制
开发板串口烧录说明
》
5.2 通过FlashProgrammer完成烧录
Flash Programmer是平头哥推出的一款PC端高效的烧写工具,按如下步骤完成固件的烧录:
1 打开
Flash Programmer工具:打开工具后的初始界面如下
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN16AJJctAABayPBE2_o215.png)
2 确认Program Algorithm File,建议Erase Type为Chip Erase,细节如下:
3 确认待烧录文件:通过
Browse按钮,浏览并选择镜像包中的
total_image.hex文件,勾选Program复选框,细节如下图所示
![](https://file.elecfans.com/web2/M00/34/99/pYYBAGImN2OAUR8tAABrluZrzcI996.png)
4 直到烧录工具提示
Success则表示固件烧录成功
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN2SALnHPAABjUn3u2Iw850.png)
至此,可关闭烧录工具,烧完录成后,按下RESET键复位设备使其运行。
6 设置设备端参数
串口通过 cli 命令写入升级参数,命令交互如下:
> kv set model {产品名称}
kv set string success
> kv set device_id {设备ID}
kv set string success
其中“{产品名称}”为3.2小节中填写的 产品名称,而“{设备ID}”为4.1小节通过文件名获取的设备ID。
这里实际输入了kv set model W800_test和kv set device_id 4d481103044020005cdb63f3c23a7250
再次重启开发板,检查FOTA串口打印升级信息,设备默认是 1分钟检测一次是否有新版本,需确认"cid"后面跟的字符串是否和设备ID一致,如果一致,表示设置生效,如下图:
注意:由于方案板LED管脚与spi flash管脚复用,FOTA升级前需要关闭LED功能,串口输入命令:
kv setint pwmled_en 0,然后重启设备使功能改动生效。
7 固件升级
设备的固件升级过程和对应日志打印信息:
1 自动检查升级信息:fotacop check: {"cid":"……","model":"……","version":"……"}
2 开始下载升级固件:fota FOTA:0%
3 升级固件下载完成:app_fota FOTA FINISH :4
4 更新固件:Welcome boot2.0!
5 应用固件:Welcome boot2.0!
整个升级过程系统自动完成,通过检查串口打印,可以知道当前软件版本是否升级成功,如下:
升级前的fota相关日志输出信息:
![](https://file.elecfans.com/web2/M00/34/99/pYYBAGImN2aACzLzAAAJikMYDW0345.png)
升级后的fota相关日志输出信息:
![](https://file.elecfans.com/web2/M00/34/92/poYBAGImN2mAV14_AAAJbC7UwZQ758.png)
可见,如同上传固件时设置的设备版本号一样,由1.0.0升级到了1.1.0,故认为升级成功。
文章转载自:平头哥芯片开放社区 作者:江海