设备描述符,字符串描述符及设备限定描述符与 USB 鼠标实现 一致,这里仅介绍不同点。
代码地址
USB - 描述符之间的关系 中可以知道,U 盘需要两个端点,一个输入端点和一个输出端点,且端点类型为 批量端点
,所以此时的配置描述符集合结构为
{
配置描述符,
接口描述符,
输出端点描述符,
输入端点描述符
}
获取配置描述符
0x80 0x6 0x0 0x2 0x0 0x0 0xff 0x0
配置描述符返回
0x9 0x2 0x20 0x0 0x1 0x1 0x0 0x80 0x32 0x9 0x4 0x0 0x0 0x2 0x8 0x6 0x50 0x0 0x7 0x5 0x1 0x2 0x40 0x0 0x0 0x7 0x5 0x81 0x2 0x40 0x0 0x0
接口类代码表集
typedef enum
{
USB_CLASS_UNSPECIFIED = 0 ,
USB_CLASS_AUDIO = 1 ,
USB_CLASS_CDC = 2 ,
USB_CLASS_HID = 3 ,
USB_CLASS_RESERVED_4 = 4 ,
USB_CLASS_PHYSICAL = 5 ,
USB_CLASS_IMAGE = 6 ,
USB_CLASS_PRINTER = 7 ,
USB_CLASS_MSC = 8 ,
USB_CLASS_HUB = 9 ,
USB_CLASS_CDC_DATA = 10 ,
USB_CLASS_SMART_CARD = 11 ,
USB_CLASS_RESERVED_12 = 12 ,
USB_CLASS_CONTENT_SECURITY = 13 ,
USB_CLASS_VIDEO = 14 ,
USB_CLASS_PERSONAL_HEALTHCARE = 15 ,
USB_CLASS_AUDIO_VIDEO = 16 ,
USB_CLASS_DIAGNOSTIC = 0xDC ,
USB_CLASS_WIRELESS_CONTROLLER = 0xE0 ,
USB_CLASS_MISC = 0xEF ,
USB_CLASS_APPLICATION_SPECIFIC = 0xFE ,
USB_CLASS_VENDOR_SPECIFIC = 0xFF
}usb_class_code_t;
MSC 子类代码集
typedef enum
{
MSC_SUBCLASS_RBC = 1 , ///
MSC_SUBCLASS_SFF_MMC , ///
MSC_SUBCLASS_QIC , ///< QIC-157. Typically used by a tape device
MSC_SUBCLASS_UFI , ///
MSC_SUBCLASS_SFF , ///
MSC_SUBCLASS_SCSI ///< SCSI transparent command set
}msc_subclass_type_t;
MSC 传输协议集
typedef enum
{
MSC_PROTOCOL_CBI = 0 , ///
MSC_PROTOCOL_CBI_NO_INTERRUPT = 1 , ///
MSC_PROTOCOL_BOT = 0x50 ///< Bulk-Only Transport
}msc_protocol_type_t;
U 盘需要一个批量输入端点和一个批量输出端点,所以为 2
U 盘使用的子类代码为 0x08
U 盘使用 SCSI 子类代码集,即 0x06
接口使用仅批量传输协议,为 0x50
0x7 0x5 0x1 0x2 0x40 0x0 0x0
该端点为批量端点
。批量端点的编号为 2。其它位保留为 00x7 0x5 0x81 0x2 0x40 0x0 0x0
该端点为批量端点
。批量端点的编号为 2。其它位保留为 0