您尚未登录。

楼主 # 2024-09-13 23:12:48

30tobebroad
会员
注册时间: 2020-06-09
已发帖子: 4
积分: 114

匠芯创D12x平台 OTA快速升级方案分享

最近研究到匠芯创这个超高性价比的平台,作为HMI的优秀解决方案,尤其是D12X系列,10块钱的价格,400M主频,720P/60帧的jpg解码能力,来取代F1C100简直是不二首选!而且官方提供的Luban-Lite SDK给出了一整套rtthread RTOS解决方案(配置、编译、打包、文件系统),也是我目前看到的比较完整的rtthread实践,用这个平台来学习rtthread或者开发项目还是非常不错的。

但美中不足的是官方提供的系统升级方案实在太慢了,即使是一个几百K的固件,也动辄一两分钟,而且经常失败,大大影响了调试效率。因此自己花了几天时间,摸索了一套高效的OTA升级方案,并做了专用下载工具,分享给大家,希望能够对热爱技术的人有所帮助。

首先说一下整体的设计思路:
该方案核心是利用A/B系统和Ymodem文件传输(具体参考: https://aicdoc.artinchip.com/topics/sdk/application-ota-luban-lite.html ),即采用两个os分区,通过环境变量来选择当前要加载的分区,每进行一次OTA升级,所加载的分区就切换一次。

接下来是具体操作方法:
1、修改bootloader配置,使支持env(否则不会进行A/B系统的失败和切换),并且使能A/B系统:
ota1.png
ota2.png
2、修改应用程序配置,使支持env
ota3.png
3、修改应用程序配置,使支持ota功能
ota4.png
4、修改应用程序配置,使支持ota_downloader功能,并支持Ymodem ota:
ota5.png
ota6.png
5、最最重要的,是修改ymodem_ota.c文件,使满足上位机的协议机制。
源码参考:https://gitee.com/keqian/Aic_d12x.git
6、最后修改分区配置文件image_cfg.json,增加os_r分区,如下图(为了节省空间,考虑到使用性,rodata仍采用单分区):
ota7.png
ota8.png

所有都修改完成后,开始编译固件,首先编译bootloader代码(会将编好的固件自动拷贝到target对应的pack文件夹下),然后再编译app程序,注意编译前先加载对应配置。

编译完成没有问题后,第一次先用官方工具完整升级一遍(可以不升级rodata和data):
ota9.png
升级完成后,就可以用我分享的工具来继续升级啦 (路径:https://gitee.com/keqian/Aic_d12x/tree/master/tools/ymodem_iap):
ota10.png
可以看到,选择1.5M波特率,升级340K的固件,全部只需要6s左右 ,是不是可以大大的节省生命了?
今天的分享就到这里了!

离线

#1 2024-09-14 11:32:39

大林
会员
注册时间: 2022-07-08
已发帖子: 16
积分: 26

Re: 匠芯创D12x平台 OTA快速升级方案分享

串口3M我开不起来啊,1M都开不起来

离线

#2 2024-09-14 12:40:04

asd7893361
会员
注册时间: 2018-05-01
已发帖子: 34
积分: 32

Re: 匠芯创D12x平台 OTA快速升级方案分享

用ota升级115200波特率也比原来的3M快

离线

#3 2024-09-14 16:05:51

grantho
会员
注册时间: 2020-03-21
已发帖子: 68
积分: 4.5

Re: 匠芯创D12x平台 OTA快速升级方案分享

测试了,效果不错,官方下载差不多一分钟,真是要命的设计

离线

#4 2024-09-18 09:08:57

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 228
积分: 185

Re: 匠芯创D12x平台 OTA快速升级方案分享

大林 说:

串口3M我开不起来啊,1M都开不起来

要用CH340、343这类才支持3M波特率。

如果用FLASH的话,差不多的大小升级要20多秒。但也比哪个烧录工具快很多。

离线

#5 今天 00:49:27

hxtuo
会员
注册时间: 2021-11-08
已发帖子: 1
积分: 1

Re: 匠芯创D12x平台 OTA快速升级方案分享

你好,我根据你的贴纸修改了配置。
1、打开bootload 配置的aic-env,使能A/B
2、打开应用配置的aic-env,使能A/B,使能aic-OTA,使能ota-downloader,使能ymodem OTA
3、修改ymodem_ota.c
4、修改json配置

编译会出现升级超时,发送ymoden os命令后只会回复两个C就出现升级超时。

[E] rtt_spinor_load_env_simple()318 Not found dev_current:1
[E] fw_env_open()1067 Warning: Bad CRC, using default environment
[E] rtt_spinor_load_env_simple()318 Not found dev_current:0
[E] rtt_spinor_load_env_simple()318 Not found dev_current:1
[E] fw_env_open()1067 Warning: Bad CRC, using default environment
Mount APP in blk blk_rodata
Failed to mount elm
[E] rtt_spinor_load_env_simple()318 Not found dev_current:0
[E] rtt_spinor_load_env_simple()318 Not found dev_current:1
[E] fw_env_open()1067 Warning: Bad CRC, using default environment
Mount APP in blk blk_data
Failed to mount elm
这是输出的log。

请教一下是不是因为我使能了SPI_ENC加密功能,和编译的img包都是经过加密的影响,导致fw_env_open无法正确读取flash的数据?


加密后的文件如下
d12x_os.itb.enc
rodata.fatfs.enc

ota-subimgs.cfg打包出来的cpio文件升级工具也不认。


请问该如何解决呢?官方升级的工具太慢了

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn