2. AW30N 设备升级
AW30N SDK 提供了 设备升级功能。
设备升级功能 指的是 SD卡升级 和 U盘升级。
两个升级功能 分别由 app_modules_h.c 里的 SD_UPDATE_EN 和 UDISK_UPDATE_EN 宏控制开关。
2.1. 设备升级简要流程
设备升级 分为 SD卡升级 和 U盘升级;
下面简要介绍一下设备升级流程:
打开设备,检查文件 –> 2. 校验ufw文件 –> 3. 进入loader升级
1:根据使用的是哪一种设备升级,在app_config.h里 打开对应设备使能;2:根据使用的是哪一种设备升级,在app_modules_h.c里 打开对应的设备升级使能;3:调用 dev_update_check(char* logo) 进行升级:::1)该函数会先检测对应设备是否在线;2)判断在线后挂载fat文件系统,搜索文件里第一个后缀名为 “ufw” 的升级文件;3)搜索到对应 “ufw” 文件后 , 就会真正开始进行升级动作;4)升级过程中会校验ufw文件数据各项是否合法,不合法则会执行复位操作;5)校验成功后即可跳到loader完成剩余升级,该过程不受断电、拔卡影响,重新上电或者插卡即可继续步骤5)升级;
备注
升级注意
1:在识别到ufw文件前的任意流程出错时,均会返回错误值退出(即步骤3的第二点前);(例如对应设备不在线,挂载不成功,均会 有返回值返回退出 )
2:在识别到ufw文件后进入升级后,但在进入loader前,任意出错会执行系统复位操作;(检验文件过程中出错会执行 复位操作 )
3:在识别到ufw文件后进入升级,升级库里面需要使用缓存来处理升级数据,该缓存是位于overlay区域(具体可看下载目录里的app_ld.c文件里的update_tmp_buf区域); (对应”升级资源复用问题”部分)
4:针对于升级注意的第三点缓存位于overlay区域,在识别到ufw文件后 进入升级前,提供了一个升级回调,用户可根据自身应用,在进入升级前注册回调来关掉相关与升级模块overlay的模块; (对应”升级资源复用问题”部分)
5:升级需要需要占据一定的 VM空间(注意不是VM存储记忆使用的EEPROM区域),在使用对应升级前,可在下载时观察OTA UPDATE INFO 剩余VM空间是否支持升级;
!["各项升级所需空间细看"](../../_images/update_need_space.png)
各项升级所需空间细看
6:U盘升级前除了要打开 设备宏 和 升级宏 外,还需注意是否调用过usb_host_mount(),默认在识别到U盘上线时即会挂载,用户在后续操作即可;
2.2. SDK中的设备升级处理
下面介绍设备升级 中的 U盘升级 在SDK里的运转流程:
(SD卡升级 与 U盘升级流程一样,只是不需要usb_host_mount挂载步骤)
2.2.1. 打开对应需要升级的设备宏(app_config.h)
![]()
app_config.h
2.2.2. 打开对应设备升级宏(app_modules_h.c)
![]()
升级宏
2.2.3. 公共消息里,接收到U盘上线消息后,会挂载usb
![]()
usb挂载
备注
挂载usb不能重复挂载
2.2.4. 挂载完usb后,会推送U盘消息上线消息,调用升级函数
![]()
设备升级
设备升级函数: dec_update_check()该函数里可分为3个步骤,每个步骤对应的错误处理均不同:1:打开设备,检查文件存在:失败直接关闭设备退出该函数返回错误值;2:进入升级回调,关闭与升级相关复用功能模块;(具体可参考最后常见问题章节)2:进行升级,校验ufw升级文件:失败会执行系统复位操作;(具体可参考最后常见问题章节)3:校验成功跳入loader执行程序:此时重新上电或者拔卡亦可重新升级;
2.3. 设备升级常见问题
2.3.1. U盘升级时打开设备失败
检查调用升级函数的地方是否在调用了usb_host_mount();
默认U盘上线时会自动挂载。
2.3.2. 设备升级时升级对应的ufw文件
v1.0.0 ~ v1.2.0版本(不包含v1.2.0)是设备中的第一个后缀名为 ufw 的文件进行升级。
v1.2.0(包括v1.2.0版本)后,只有对应的update.ufw文件名才能进行升级。
用户可自行选择升级文件可更改 update.c 里的 update_file_name 来指定升级对应ufw文件。
![]()
升级路径指定
2.3.3. 设备升级过程中,在校验ufw文件过程前需要关闭与升级复用功能模块
在校验数据前,用户需要关闭与 升级复用的功能模块。
用户可注册升级回调来关闭 与 升级复用的功能模块。
默认该回调会关闭audio 和 adc。
![]()
升级回调注册
2.3.4. 设备升级过程中,在校验ufw文件过程中进行复位原因
1:升级空间不够,需要足够的VM区域。
2:ufw文件数据不合法,检查ufw文件是否损坏。
3:升级文件与芯片key不对应。
2.3.5. 设备升级中,只支持FAT32文件系统进行升级
设备升级只支持FAT32的设备进行升级,否则会在dev_update_check()里判断到文件系统错误直接退出。
2.3.6. 升级过程中保持住IO状态实现
请看 “升级时如何保持住某个IO状态” 章节
2.3.7. 带快速启动进行升级
请看 “带快速启动进行升级” 章节