QuecPython EC600UCNLB设备OTA升级

1、OTA升级概述

图片[1]-QuecPython EC600UCNLB设备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步:在官网下载新的固件。

file


第2步:使用“QPYcom”软件制作固件差分包。

QPYcom尽量选择最新版本,旧版本可能不支持。
点击“向上箭头”按键,再点击“Unisoc fota”选项。
file


分别选择旧固件包“QPY_V0006_EC600U_CNLB_FW”的路径、新固件包“QPY_V0007_EC600U_CNLB_FW”的路径、生成固件差分包的文件保存路径。再点击“OK”。
file


稍等一会儿,文件保存路径就会出现一个新的“output.pack”文件。
file

第3步:将制作好的固件差分包文件上传到云平台。

我这里以移远OTA平台为例。
上传固件差分包文件。
file


复制固件差分包的下载链接。
file


第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()

file


第5步:运行“fota.py”文件。

先获取一下当前固件信息,可以看到固件版本是“V006”。
file


选中“fota.py”文件后点击“运行”按键。
file


运行后将会自动断开串口,稍等几分钟,等待固件升级完成自动重启,串口出现后打开串口再获取固件信息。
可以看到,固件版本已经由“V006”更新到“V007”了,说明固件升级(fota)成功!
file


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”文件上传到云平台。
file


获取这2个文件的下载链接。
file


第2步:将有用户文件升级(app_fota)功能的程序上传到设备中。

将“app_fota.py”代码中的下载链接改成你的。
file


“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”文件。
file


运行“100.py”文件,可以看到它打印的版本信息是“0.0.0”。
file


再运行“app_fota.py”文件,运行后设备将会下载新的文件,并且自动重启。
file


重启后打开串口就可以看到多了一个“101.py”文件。
file


现在再次运行“100.py”文件,可以看到它打印的版本信息是“0.0.1”,说明文件更新成功。再运行“101.py”文件,可以看到它的运行结果。
file


4、总结

通过了解上面的测试流程,主要是熟悉OTA升级的相关函数代码和实现逻辑。
前面的OTA流程测试都是将文件的下载链接直接写死在代码中,如果是真正的产品开发,这样肯定是不行的。
产品开发通常是云平台主动下发或者设备主动获取OTA信息,设备收到OTA信息后,解析其中的内容,包括文件名、下载链接、其他信息等等,结合OTA升级的相关函数代码再根据实际要求进行升级。

© 版权声明
THE END
喜欢就支持一下吧
分享