USB DEVICE 协议相关宏定义解析

USB DEVICE 协议相关宏定义解析

定义USB协议中各类描述符的标准长度常量,对应USB规范中描述符数据结构的字节数:
高级特性描述符:
USB_DEV_QUALIFIER_DESC_LEN 0x0AU 设备限定描述符10字节,用于高速设备兼容全速模式
USB_BOS_DESC_LEN 0x0CU BOS描述符12字节,描述扩展能力集
USB_OTG_DESC_LEN 0x03U OTG描述符3字节,定义主机/设备切换能力
基础描述符长度:
USB_DEV_DESC_LEN 0x12U 设备描述符固定18字节,包含厂商ID、产品ID等关键信息
USB_CFG_DESC_LEN 0x09U 配置描述符9字节,定义设备工作模式
USB_ITF_DESC_LEN 0x09U 接口描述符9字节,定义设备工作模式
USB_EP_DESC_LEN 0x07U 端点描述符7字节,声明数据传输特性
协议控制字段:
USB_SETUP_PACKET_LEN 0x08U 控制传输的Setup包固定8字节
USB_DEVICE_CAPABITY 0x10U 设备能力描述符16字节,声明USB3.0等高级特性
【以上长度值在USB枚举过程中用于校验描述符完整性,例如主机通过bLength字段验证接收到的描述符数据是否符合规范】

定义USB控制传输请求中bmRequestType字段的数据传输方向控制位:
USB_TRX_MASK 0x80U 掩码值,用于提取bmRequestType第7位(最高位)的方向标志
USB_TRX_OUT 0x00U 表示数据阶段方向为OUT(主机→设备)
USB_TRX_IN 0x80U 表示数据阶段方向为IN(设备→主机)
协议层作用:
该标志位出现在Setup包的bmRequestType字段中,控制后续数据阶段的传输方向
例如标准设备描述符请求中,主机设置IN方向以接收设备返回的描述符数据
典型应用场景:
设备枚举阶段主机通过GET_DESCRIPTOR请求获取描述符时使用IN方向
主机发送配置命令(如SET_ADDRESS)时使用OUT方向
【这些宏定义在USB协议栈中用于解析控制传输的数据流向,是USB设备与主机通信的基础控制标志】

定义USB控制传输请求中bmRequestType字段的请求类型位(bit 6-5),用于区分不同类型的USB请求:
USB_REQTYPE_STRD 0x00U 标准请求,如设备枚举时的GET_DESCRIPTOR/SET_ADDRESS等
USB_REQTYPE_CLASS 0x20U 类特定请求,如HID设备的报告描述符请求
USB_REQTYPE_VENDOR 0x40U 厂商自定义请求,用于设备特定功能扩展
USB_REQTYPE_MASK 0x60U 掩码值,用于提取bmRequestType的类型位
协议层作用:
与方向位(bit7)、接收方位(bit4-0)共同组成bmRequestType字节
主机通过该字段判断如何处理请求,例如标准请求由USB核心处理,类请求由对应驱动处理
典型应用:
设备枚举阶段使用USB_REQTYPE_STRD处理标准描述符请求
打印机类设备通过USB_REQTYPE_CLASS实现打印控制
厂商自定义功能(如固件升级)使用USB_REQTYPE_VENDOR

定义USB设备的电源管理模式和状态标志,主要涉及USB协议中的电源配置和状态控制:
电源模式定义:
USBD_BUS_POWERED 0x00U 表示设备由USB总线供电(VBUS供电)
USBD_SELF_POWERED 0x01U 表示设备使用外部独立电源供电
设备状态标志:
USB_STATUS_REMOTE_WAKEUP 2U 设备当前为自供电状态,对应设备描述符中bmAttributes的D6位
USB_STATUS_SELF_POWERED 1U 设备支持远程唤醒功能,对应配置描述符中bmAttributes的D5位
协议层作用:
电源模式标志用于设备描述符的bmAttributes字段,主机通过该字段判断设备的供电需求
状态标志用于控制传输中的GET_STATUS请求响应,主机通过该状态管理设备电源和唤醒功能
【这些定义在USB设备初始化阶段用于配置描述符,并在设备状态管理中作为状态位掩码使用】

定义USB控制传输请求中bmRequestType字段的接收方类型(bit 4-0),用于指定USB请求的目标对象:
接收方类型枚举:
enum _usb_recp_type
{
USB_RECPTYPE_DEV = 0x0U, 请求目标为整个USB设备(如设备描述符请求)
USB_RECPTYPE_ITF = 0x1U, 请求目标为特定接口(如HID类设备的Set_Protocol请求)
USB_RECPTYPE_EP = 0x2U, 请求目标为特定端点(如Clear_Feature端点暂停请求)
USB_RECPTYPE_MASK = 0x3U 掩码值,用于提取接收方类型位
};
协议层作用:
与方向位(bit7)、请求类型位(bit6-5)共同构成完整的bmRequestType字节
主机根据该字段将请求路由到设备、接口或端点的对应处理程序
典型应用场景:
设备复位/地址设置等全局操作使用USB_RECPTYPE_DEV
音频设备选择备用接口时使用USB_RECPTYPE_ITF
清除端点STALL状态时使用USB_RECPTYPE_EP
【该枚举是USB协议栈实现请求分发的基础,常与之前的方向宏、类型宏配合使用】

定义USB控制传输请求中的标准请求类型(bRequest字段),是USB协议栈实现设备枚举和功能控制的核心枚举类型:
enum _usb_request
{
设备管理类请求:
USB_GET_STATUS = 0x0U, 获取设备/接口/端点的状态(如远程唤醒使能状态)
USB_CLEAR_FEATURE = 0x1U, 清除特性(如端点暂停特性)
USB_SET_FEATURE = 0x3U, 设置特性(如端点暂停特性)
USB_SET_ADDRESS = 0x5U, 设备枚举阶段设置设备地址
描述符操作请求:
USB_GET_DESCRIPTOR = 0x6U, 获取设备/配置/字符串等描述符(枚举必用)
USB_SET_DESCRIPTOR = 0x7U, 可选请求,用于更新描述符(较少使用)
USB_GET_INTERFACE = 0xAU, 管理接口的备用设置
USB_SET_INTERFACE = 0xBU, 管理接口的备用设置
配置控制类请求:
USB_GET_CONFIGURATION = 0x8U, 查询设备配置
USB_SET_CONFIGURATION = 0x9U, 激活设备配置
特殊功能请求:
USB_SYNCH_FRAME = 0xCU 同步传输中用于帧号同步
USB_RESERVED2 = 0x2U, 协议扩展预留
USB_RESERVED4 = 0x4U, 协议扩展预留
};
【该枚举类型需与bmRequestType(方向+类型+接收方)组合使用】

定义USB协议中各种描述符类型的枚举值,用于标识不同类型的USB描述符:
enum _usb_desctype
{
基本描述符类型:
USB_DESCTYPE_DEV = 0x1U, 设备描述符,包含设备的基本信息如厂商ID、产品ID等
USB_DESCTYPE_CONFIG = 0x2U, 配置描述符,描述设备的特定配置
USB_DESCTYPE_STR = 0x3U, 字符串描述符,提供可读的文本信息
USB_DESCTYPE_ITF = 0x4U, 接口描述符,定义设备提供的接口
USB_DESCTYPE_EP = 0x5U, 端点描述符,描述通信端点特性
高级描述符类型:
USB_DESCTYPE_DEV_QUALIFIER = 0x6U, 设备限定描述符,用于高速设备在非高速环境下的信息
USB_DESCTYPE_OTHER_SPD_CONFIG = 0x7U, 其他速度配置描述符
USB_DESCTYPE_ITF_POWER = 0x8U, 接口电源描述符(已弃用)
USB_DESCTYPE_BOS = 0xFU 二进制设备对象存储描述符,用于USB 3.0及以上版本
};
【开发USB设备驱动时需要根据这些类型值正确实现描述符的生成和返回。】

定义USB端点描述符中bmAttributes字段的传输类型位(bit 1-0),用于指定USB端点的数据传输方式:
传输类型枚举:
enum _usbx_type
{
USB_EP_ATTR_CTL = 0x0U, 控制传输,用于设备枚举和配置(如端点0的默认控制管道)
USB_EP_ATTR_ISO = 0x1U, 同步传输,适用于实时性要求高的场景(如音频/视频设备)
USB_EP_ATTR_BULK = 0x2U, 批量传输,用于大数据量非实时传输(如U盘、打印机)
USB_EP_ATTR_INT = 0x3U 中断传输,用于周期性小数据量传输(如HID设备)
};
协议层作用:
与端点地址(bEndpointAddress)、最大包长度(wMaxPacketSize)共同构成完整的端点描述符
主机根据该字段决定数据传输的调度策略和带宽分配
典型应用场景:
设备枚举阶段必须使用控制传输(USB_EP_ATTR_CTL)
鼠标/键盘等HID设备采用中断传输(USB_EP_ATTR_INT)
大容量存储设备使用批量传输(USB_EP_ATTR_BULK)

定义USB同步端点(Isochronous Endpoint)描述符中bmAttributes字段的同步类型位(bit 3-2),专门用于控制同步传输的数据同步机制:
同步类型定义(仅当端点为USB_EP_ATTR_ISO时有效):
USB_EP_ATTR_NOSYNC 0x00U 无同步,数据流不含同步信号(如普通音频流)
USB_EP_ATTR_ASYNC 0x04U 异步同步,使用独立时钟同步(如USB音频设备的反馈端点)
#define USB_EP_ATTR_ADAPTIVE 0x08U 自适应同步,根据数据流动态调整(如自适应音频设备)
#define USB_EP_ATTR_SYNC 0x0CU 显式同步,数据包携带同步标记(如视频同步帧)
#define USB_EP_ATTR_SYNCTYPE 0x0CU 处理同步端点(Synchronous Endpoint)同步类型的位掩码
协议层作用:
与传输类型(bit 1-0)、使用类型(bit 5-4)共同构成bmAttributes字节
影响主机对同步端点的时钟恢复和缓冲区管理策略
典型应用场景:
视频会议摄像头多采用USB_EP_ATTR_SYNC保证音画同步
USB麦克风常用USB_EP_ATTR_ASYNC或USB_EP_ATTR_ADAPTIVE
USB_EP_ATTR_SYNCTYPE宏用于同步类型的位掩码操作

定义USB同步端点(Isochronous Endpoint)描述符中bmAttributes字段的使用类型位(bit 5-4),专门用于指定同步端点的数据流用途:
使用类型定义(仅当端点为USB_EP_ATTR_ISO时有效):
#define USB_EP_ATTR_DATA 0x00U 普通数据端点,传输常规数据流(如音频采样数据)
#define USB_EP_ATTR_FEEDBACK 0x10U 显式反馈端点,用于时钟同步(如USB音频设备的速率控制)
#define USB_EP_ATTR_IMPLICIT_FEEDBACK_DATA 0x20U 隐式反馈数据端点,通过数据包携带时钟信息
#define USB_EP_ATTR_USAGETYPE 0x30U 使用类型位掩码,用于提取bit5-4的值
协议层作用:
与同步类型(bit3-2)、传输类型(bit1-0)共同构成完整的端点属性字节
影响主机对同步数据流的时钟恢复和缓冲区管理策略
典型应用场景:
USB音频设备中,麦克风端点使用DATA类型,而扬声器可能使用IMPLICIT_FEEDBACK_DATA
高精度音频设备会单独配置FEEDBACK端点用于时钟校准
协议栈开发时常用USB_EP_ATTR_USAGETYPE进行位操作
【这些定义是USB音频类(UAC)设备开发的核心参数,需与端点描述符的其他字段协同配置】

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容