Edit online

USB 升级

9 Jan 2025
Read time: 1 minute(s)
完整的固件升级流程分为两个阶段:
  1. BROM 阶段:完成系统运行环境的初始化, 包括初始化 DDR,下载并运行下一级升级程序。
  2. U-Boot 阶段:实现固件下载和烧录等功能。

USB 升级功能通过实现基于 USB Bulk 传输的自定义设备来完成的,设备端与主机端通过自定义的 USB 升级协议进行通信。

自定义传输设备

端点 (End Point) 是设备与主机之间进行数据传输的逻辑接口。自定义的 USB Bulk 传输设备包含下面几个端点:
  1. EP0

    EP0 属于控制端点,数据传输为双向传输,用于对设备进行枚举和基本的控制。在设备完成配置之前, 只有 EP0 端点可用,主机通过 EP0 来发送命令,获取设备的信息,并通过它来配置设备。 EP0 端点没有专门的描述符,只需要在设备描述符中定义它的最大包长度。

  2. EP Bulk-in

    EP Bulk-in 端点,用来从设备端传输数据和状态给主机端,对设备端而言,是一个数据发送端点。该端点采用 Bulk 传输模式。

  3. EP Bulk-out

    EP Bulk-out 端点,用来从主机端传输命令和数据给设备端,对设备端而言,是一个数据接收端点。该端点使用 Bulk 传输模式。

初始化过程中,传输设备需要提供下列描述符。

  • 设备描述符 (Device Descriptor)
    • 必须提供 idVendor 和 idProduct 信息。

    • Vendor ID 需要向 USB-IF 购买,Product ID 由厂商自定义。

      AIC 购买的 Vendor ID 为 0x33C3,USB 升级所用的 Product ID 为 0x6677 (”fw” 的 ASCII 码值,表示用于 firmware upgrade) 。



  • 配置描述符 (Configuration Descriptor)

    bNumInterfaces 设置为 1,仅支持一个 Bulk-Only 接口。bmAttributes 设置为 0x80。



  • 接口描述符 (Interface Descriptor)

    bNumEndpoints 设置为 0,包含 Bulk-in, Bulk-out 两个端点。 bInterfaceClass,bInterfaceSubClass 和 bInterfaceProtocol 设置为 0xff ,表示自定义类型。



  • Bulk-in 端点描述符 (Bulk-in Endpoint Descriptor)



  • Bulk-out 端点描述符 (Bulk-out Endpoint Descriptor)



具体的细节可以参考《Universal Serial Bus Mass Storage Class Bulk-Only Transfer》。