USB DFU固件升级指南¶
1. 概述¶
本文描述了一种基于pan262x USB DFU的固件升级方法,主要包括Bootloader和application两部分:Bootloader负责接收固件升级镜像和升级流程控制,而application则负责设备的正常功能实现。通过电脑端工具,用户可以通过USB线将固件镜像传输到MCU进行固件升级。
2. 固件布局¶
Bootloader:位于MCU的内存地址0x0000至0x0DFF。
Application:位于MCU的内存地址0x0E00至0x7FFF。
3. 固件升级原理介绍¶
由于pan262x flash大小的限制,不好使用备份方式的固件升级,如需要进行固件升级MCU需跳转至Bootloader进行固件接收、校验等升级动作,这样可以最大限度复用flash空间。
3.1 固件镜像说明¶
固件镜像主要包含三个部分:Header、Image和Hash code,如下图。
Header部分
struct image_version {
uint8_t iv_major;
uint8_t iv_minor;
uint16_t iv_revision;
uint32_t iv_build_num;
};
/** Image header, 40bytes */
typedef struct {
uint32_t ih_magic;
uint32_t ih_load_addr;
uint16_t ih_hdr_size; /* Size of image header (bytes). */
uint16_t ih_protect_tlv_size;
uint32_t ih_img_size;
uint32_t ih_flags;
struct image_version ih_ver;
uint32_t image_crc32; /* crc code, little endian */
uint32_t image_size; /* image size, little endian */
}image_header;
Image部分
实际的固件传输部分,也就是application的运行代码。
Hash code
此部分主要用于升级工具对升级镜像的是否合法的检测,hash code一定要符合才可以通过工具端检查,否则无法进行固件升级。
3.2 固件升级流程¶
启动与识别
电脑端工具通过USB HID接口识别连接到MCU。
工具发送识别命令,MCU响应并确认身份。
从Application跳转到Bootloader
如果MCU当前运行在Application中,工具发送特定命令使MCU跳转到Bootloader。
MCU响应命令并跳转到Bootloader。
Application和Bootloader通过RAM中的一个32位数据进行握手,确保跳转成功。
固件头信息传输
工具发送固件头信息给MCU。
MCU接收头信息,并根据头信息执行Flash擦除动作及长度校验等准备工作。
固件镜像传输
工具开始传输固件镜像数据到MCU。
MCU接收数据并存储到Flash的相应位置。
固件校验
传输完成后,工具发送命令触发MCU进行固件校验。
MCU根据预设的校验算法(如CRC)对固件进行校验。
跳转回Application
如果固件校验无误,工具发送跳转命令。
MCU接收到跳转命令后,重置并从新的Application开始执行。
4. 安全考虑¶
为确保固件升级过程的安全性,可以采取以下措施:
校验机制:使用CRC或其他校验算法确保固件传输的完整性。
握手机制:确保MCU在升级过程中的状态可控,防止非法跳转。
权限验证:可考虑在升级过程中加入密码验证或其他权限机制,防止未经授权的升级操作。
5. 总结¶
本方案提供了一种基于USB HID接口的MCU固件升级方法,通过电脑端工具实现远程升级,提高了固件更新的便捷性和灵活性。在实际应用中,需要根据具体需求进行适当的调整和优化,以确保升级过程的安全性和稳定性。