当前页面为 开发中 版本,查看特定版本的文档,请在页面左下角的下拉菜单中进行选择。

USB DFU固件升级指南

1. 概述

本文描述了一种基于pan262x USB DFU的固件升级方法,主要包括Bootloader和application两部分:Bootloader负责接收固件升级镜像和升级流程控制,而application则负责设备的正常功能实现。通过电脑端工具,用户可以通过USB线将固件镜像传输到MCU进行固件升级。

2. 固件布局

  1. Bootloader:位于MCU的内存地址0x0000至0x0DFF。

  2. Application:位于MCU的内存地址0x0E00至0x7FFF。

3. 固件升级原理介绍

由于pan262x flash大小的限制,不好使用备份方式的固件升级,如需要进行固件升级MCU需跳转至Bootloader进行固件接收、校验等升级动作,这样可以最大限度复用flash空间。

3.1 固件镜像说明

固件镜像主要包含三个部分:Header、Image和Hash code,如下图。

image-20240430171447438

  • 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固件升级方法,通过电脑端工具实现远程升级,提高了固件更新的便捷性和灵活性。在实际应用中,需要根据具体需求进行适当的调整和优化,以确保升级过程的安全性和稳定性。