USB 升级
- BROM 阶段:完成系统运行环境的初始化, 包括初始化 DDR,下载并运行下一级升级程序。
- U-Boot 阶段:实现固件下载和烧录等功能。
USB 升级功能通过实现基于 USB Bulk 传输的自定义设备来完成的,设备端与主机端通过自定义的 USB 升级协议进行通信。
自定义传输设备
-
EP0
EP0 属于控制端点,数据传输为双向传输,用于对设备进行枚举和基本的控制。在设备完成配置之前, 只有 EP0 端点可用,主机通过 EP0 来发送命令,获取设备的信息,并通过它来配置设备。 EP0 端点没有专门的描述符,只需要在设备描述符中定义它的最大包长度。
-
EP Bulk-in
EP Bulk-in 端点,用来从设备端传输数据和状态给主机端,对设备端而言,是一个数据发送端点。该端点采用 Bulk 传输模式。
-
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》。