本地升级
概述
本地升级是一个用于升级负载设备固件的功能,开发者使用本地升级功能,能够方便用户安装本地固件升级包文件升级负载设备的固件。
固件传输协议
开发者在开发本地升级功能时,可调用接口 UAV_Upgrade_Init
指定传输协议并配置传输设置信息。
使用UAVFTP 协议
UAVFTP,即 UAV Common File Transfer Protocol,是 Autel Robotics 独有的文件传输协议,开发者通过调用指定的接口,即可获得所需的文件。
UAVFTP 协议升级负载设备的固件时,请参考 UAV_Upgrade_FirmwareDownload
,了解获取固件的方法,并在调用 UAV_vUpgrade_Init()` 接口时初始化该结构体。
说明:
- 使用 Linux 或没有网口的负载设备可使用该方式传输固件。
- 由于该方式使用命令信号传输通道传输固件,传输速度一般。
实现本地升级功能
1. 本地升级模块初始化
在使用本地升级功能前,请先初始化升级模块,并指定升级固件时所使用的传输协议。
returnCode = UAV_Upgrade_Init(&g_uavUpgradeHandler);
if (returnCode != 0) {
LOG_INFO("UAV_Upgrade_Init error, return code = %d", returnCode);
return returnCode;
}
2. 升级流程
开发者根据结构体 T_UAVUpgradeHandler
实现负载设备本地升级的函数,并通过 T_UAVUpgradeHandler()
接口注册负载设备本地升级的回调函数;通过函数 UAV_Upgrade_Query()
查询负载设备升级状态。
使用本地升级功能
运行具有升级功能的程序
请在使用本地升级功能时,参考运行示例程序,编译出当前支持本地升级功能的程序。
Linux 平台运行环境调整
为使用升级功能,需要将程序设置为默认启动,请参考如下步骤:
将编译生成的应用程序拷贝到
/usr/local/example/
目录下。在命令行中的输入如下指令:
chmod 666 /dev/ttyUSB0
chmod 755 /usr/local/example/upgrade
/usr/local/example/upgrade&
说明:
- ttyUSB0 为连接负载设备的串口设备,开发者可根据实际的情况修改该名称。
重启负载设备,通过终端命令
ps aux | grep upgrade
检查程序是否正常运行
HC32F4 平台运行环境调整
如需在 HC32F4 平台上使用本地升级功能,开发者需先将 Bootloader 烧录到开发平台中,再烧录负载设备的固件。
使用脚本构建Bootloader后烧录,构建脚本及产物目录为:
samples\sample_c\platform\rtos_freertos\hc32f460\04_tools\all_make.bat
samples\sample_c\platform\rtos_freertos\hc32f460\04_tools\release
构建并烧录基于SDK lib开发的固件
- 参考
samples\sample_c\platform\rtos_freertos\hc32f460\02_app\projects\app.uvprojx
工程
- 参考
说明:
- Bootloader 是 MCU 上电运行的程序,用于更新应用固件并执行应用固件。
- 应用固件:实现负载设备的软件功能,编译 Payload SDK Lib。
Sample 升级原理介绍
Linux 程序文件升级原理
利用升级功能可以获取到需要更新的固件文件(通过 UAVFTP 协议),将固件文件替换掉原先运行的程序文件,系统重启后完成固件升级。
相关参考:
- 负载设备升级流程:
example/upgrade
。- 使用本地升级功能:
exsample/upgrade.cxx
。
HC32F4单片机程序升级原理
使用 HC32F4 开发的负载设备从 Flash 中直接读取固件文件并运行负载设备程序,因此开发者需先烧录 Bootloader,再烧录应用固件。
HC32F4 固件升级流程
- HC32F4 平台上电后,将启动 MCU。
- 无人机触发升级流程后,通过升级接口将升级文件发送至负载设备,并进行升级。实现参考运行示例程序。
相关参考:
samples\module_sample\test_upgrade.c
。