1、OTA升级概述
EC600UCNLB设备OTA升级包含2部分,分别是固件升级(fota)和用户文件升级(app_fota)。
- 固件升级(fota):使用官方固件制作的差分包就行底层SDK的升级。
固件相当于电脑系统,固件升级就相当于你要将windows7系统升级为windows10系统。
比如当前的固件是“QPY_V0006_EC600U_CNLB_FW”,不久后官方新出了一个固件“QPY_V0007_EC600U_CNLB_FW”,使用这2个新老固件就可以制作差分包。制作好的差分包上传到云平台,设备获取到云平台差分包的下载链接再进行差分包的下载,下载后进行升级。需要注意的是,仅支持使用官方固件制作的差分包能够升级,如果是自己合成的固件制作的差分包是无法进行升级的,合成的脚本无法更新。通常来说,在设备后期的维护中,一般也是更新用户文件,很少更新固件。 - 用户文件升级(app_fota):下载新的文件到存储中,进而更新应用程序。
用户文件相当于你电脑上的QQ、微信等软件,用户文件升级就相当于要对当前的这些程序更新升级。
比如当前“usr”目录下有一个“100.py”文件,不久后设备程序更新,希望将新的“100.py”文件更新到设备中,那么需要将新的“100.py”文件上传到云平台,设备获取到云平台文件的下载链接再进行下载,下载后放在指定目录下。如果已存在该文件则覆盖。同样的,也可以下载多个文件、不同类型的文件,比如加密后的“.mpy”文件、文本“.txt”文件、“.bin”文件等等。
总之,只能固件升级固件,文件升级文件,合并也不行!
2、固件升级(fota)流程测试
下面以“QPY_V0006_EC600U_CNLB_FW”版本固件更新到“QPY_V0007_EC600U_CNLB_FW”版本固件为例。
第1步:在官网下载新的固件。
第2步:使用“QPYcom”软件制作固件差分包。
QPYcom尽量选择最新版本,旧版本可能不支持。
点击“向上箭头”按键,再点击“Unisoc fota”选项。
分别选择旧固件包“QPY_V0006_EC600U_CNLB_FW”的路径、新固件包“QPY_V0007_EC600U_CNLB_FW”的路径、生成固件差分包的文件保存路径。再点击“OK”。
稍等一会儿,文件保存路径就会出现一个新的“output.pack”文件。
第3步:将制作好的固件差分包文件上传到云平台。
我这里以移远OTA平台为例。
上传固件差分包文件。
复制固件差分包的下载链接。
第4步:将有固件升级(fota)功能的程序上传到设备中。
比如,新建一个“fota.py”文件,将下面的代码复制到文件中,注意修改链接。再将这个“fota.py”文件上传到设备中。
import fota
import utime
# 这里需要修改成你的固件差分包链接
DEF_URL1 = 'https://quec-cloud-ota.oss-cn-shanghai.aliyuncs.com/368/1034883347735654400/OTA/output.pack'
def result(args):
print('download status:', args[0], 'download process:', args[1])
def run():
fota_obj = fota() # 创建Fota对象
print("进入升级状态......")
res = fota_obj.httpDownload(url1=DEF_URL1, callback=result)
if res != 0:
return
utime.sleep(2)
run()
第5步:运行“fota.py”文件。
先获取一下当前固件信息,可以看到固件版本是“V006”。
选中“fota.py”文件后点击“运行”按键。
运行后将会自动断开串口,稍等几分钟,等待固件升级完成自动重启,串口出现后打开串口再获取固件信息。
可以看到,固件版本已经由“V006”更新到“V007”了,说明固件升级(fota)成功!
3、用户文件升级(app_fota)流程测试
比如说,现在设备中已经有“100.py”代码文件:
print('我是“100.py”文件')
print('我的版本是:0.0.0')
现在我需要将“100.py”文件进行更新,同时需要下载一个新的“101.py”文件到设备中。
更新后的“100.py”代码:
print('我是“100.py”文件')
print('我的版本是:0.0.1')
新增的“101.py”代码:
print('我是“101.py”文件')
print('我的版本是:0.0.0')
第1步:上传需要更新的用户文件到云平台。
将更新后的“100.py”和新增的“101.py”文件上传到云平台。
获取这2个文件的下载链接。
第2步:将有用户文件升级(app_fota)功能的程序上传到设备中。
将“app_fota.py”代码中的下载链接改成你的。
“app_fota.py”代码:
import app_fota
from misc import Power
# 下面是2个文件的文件名和下载链接,需要修改成你的
FILE_NAME = r'100.py'
DEF_URL = r'https://quec-cloud-ota.oss-cn-shanghai.aliyuncs.com/368/1035124482131374080/OTA/{}'.format(FILE_NAME)
FILE_NAME2 = r'101.py'
DEF_URL2 = r'https://quec-cloud-ota.oss-cn-shanghai.aliyuncs.com/368/1035124482131374080/OTA/{}'.format(FILE_NAME2)
FILE_DIR_NAME = r'/usr/{}'.format(FILE_NAME) # “100.py”文件存放路径
FILE_DIR_NAME2 = r'/usr/{}'.format(FILE_NAME2) # “101.py”文件存放路径
if __name__ == '__main__':
fota = app_fota.new()
print('准备下载...')
fota.download(DEF_URL, FILE_DIR_NAME) # 下载“100.py”文件
fota.download(DEF_URL2, FILE_DIR_NAME2) # 下载“101.py”文件
print('下载完成')
fota.set_update_flag()
print('重启升级')
Power.powerRestart() # 重启模块
第3步:运行设备中的“app_fota.py”文件。
首先先查看设备中当前的文件,可以看到只有“100.py”和“app_fota.py”文件。
运行“100.py”文件,可以看到它打印的版本信息是“0.0.0”。
再运行“app_fota.py”文件,运行后设备将会下载新的文件,并且自动重启。
重启后打开串口就可以看到多了一个“101.py”文件。
现在再次运行“100.py”文件,可以看到它打印的版本信息是“0.0.1”,说明文件更新成功。再运行“101.py”文件,可以看到它的运行结果。
4、总结
通过了解上面的测试流程,主要是熟悉OTA升级的相关函数代码和实现逻辑。
前面的OTA流程测试都是将文件的下载链接直接写死在代码中,如果是真正的产品开发,这样肯定是不行的。
产品开发通常是云平台主动下发或者设备主动获取OTA信息,设备收到OTA信息后,解析其中的内容,包括文件名、下载链接、其他信息等等,结合OTA升级的相关函数代码再根据实际要求进行升级。