如何理解USB 配置描述符wTotalLength位运算深度

cpp 复制代码
__USB_ALIGN_BEGIN static uint8_t usb_dev_cdc_cfgdesc[USB_CDC_CONFIG_DESC_SIZ]  = {
    0x09,
    USB_CFG_DESCRIPTOR_TYPE,///* wTotalLength 低字节 */
    USB_CDC_CONFIG_DESC_SIZ,//* wTotalLength 高字节 */
    0x00,
    0x02,
    0x01,
    0x00,
    0xC0,
    0x32,

将wTotalLength 16位总长度拆分为USB小端格式(Little-Endian)

一、USB协议层:小端序强制要求

USB协议规定所有多字节字段必须采用小端序(Little-Endian)传输:

低字节在前,高字节在后。

wTotalLength 是配置描述符中最重要的字段之一,它告知主机整个配置描述符集合的总长度,是USB枚举的"导航地图"。

二、核心作用:主机内存分配的"标尺"

场景:主机获取完整描述符

USB枚举过程中,主机分两步获取配置描述符:

第一步:获取配置描述符头部(仅9字节)

主机 → 设备: GET_DESCRIPTOR(CONFIGURATION, 0, 9)

设备 → 主机: 9字节配置头,含wTotalLength

第二步:根据wTotalLength获取完整数据

主机读取wTotalLength = 273 (0x0111)

主机 → 设备: GET_DESCRIPTOR(CONFIGURATION, 0, 273) // 请求全部字节

设备 → 主机: 273字节完整配置包

作用:主机动态分配足够内存,一次性读取所有接口、端点、功能描述符,避免多次小数据包传输。

三、完整配置包结构示例

wTotalLength = 273字节的实际内容:

┌────────────────────────────────────┐

│ 配置描述符 (9字节) │

├────────────────────────────────────┤

│ IAD描述符 (8字节) │

├────────────────────────────────────┤

│ 接口0描述符 (9字节) │

├────────────────────────────────────┤

│ 功能描述符 (Header/ACM/Union) │

├────────────────────────────────────┤

│ 端点描述符2 (7字节) │

├────────────────────────────────────┤

│ 接口1描述符 (9字节) │

├────────────────────────────────────┤

│ 端点描述符1 OUT (7字节) │

├────────────────────────────────────┤

│ 端点描述符1 IN (7字节) │

├────────────────────────────────────┤

│ ...CDC#2/3/4重复结构... │

└────────────────────────────────────┘

关键: wTotalLength 包含了所有下级描述符的长度之和。

相关推荐
pt104313 分钟前
Cisco设备网络安全系列-17:AI驱动安全应用与量子计算安全影响
网络·人工智能·安全
mennekes19 分钟前
暗装插座箱 VS 明装插座箱,工地和车间怎么取舍
运维·网络·科技·安全·制造
叼烟扛炮20 分钟前
Linux 学习笔记(三十六):并发进阶——读写锁 vs 自旋锁,到底怎么选?
linux·运维·服务器·笔记·学习
bu_shuo42 分钟前
删除Windows资源管理器左侧【此电脑】的Linux企鹅图标
linux·windows
步行cgn43 分钟前
Spring MVC 删除功能:用隐藏表单模拟 DELETE 请求的完整解析
linux·运维·服务器
HackTwoHub44 分钟前
红队低成本 IP 轮换方案 ProxyCat升级版,自动扩容代理池、负载分摊转发,一键部署,告别高价隧道代理
网络·人工智能·网络协议·tcp/ip·安全·web安全·网络安全
andxe1 小时前
算力网络融合下的 5G 承载升级:高速光模块,构筑稳定光承载底座
网络·5g·光模块·光通信
宁波阿成1 小时前
CentOS 7 环境下 Tomcat 8.5 升级至 9.0.123 操作总结
linux·centos·tomcat
lazy H1 小时前
【计算机网络】第 12 篇:IPv6 详解——地址格式、地址类型与双栈网络
网络·经验分享·后端·学习·计算机网络·408
2401_868534781 小时前
论纯IPv6(IPv6-Only)演进与地址规划设计与实施
服务器·网络