如何理解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 包含了所有下级描述符的长度之和。

相关推荐
空堂与归2 小时前
Linux 命令实战:AI 开发者必备的终端操作手册
linux
牢姐与蒯4 小时前
Linux基本指令及知识点(二)
linux·运维·服务器
小玮看世界4 小时前
[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录
linux·前端·python
2601_949499944 小时前
芯瑞科技 DT-1414 光模块工程实测:完美兼容博通(安华高) HFBR-1414PTZ,VCSEL 替代方案
大数据·网络·人工智能·科技·光模块
云边云科技_云网融合4 小时前
连锁门店 POS、监控、IoT 设备网络不稳定怎么解决?
网络·物联网
RisunJan5 小时前
Linux命令-spell(Unix 拼写检查工具 —— 文本校对的基础利器)
linux·运维·unix
BLi4ee5 小时前
WSL 文件资源管理器左侧 Linux / Ubuntu 入口恢复
linux·ubuntu
XR1234567885 小时前
学校宿舍区网络方案对比:多终端高并发下的认证、管理与体验
网络
March.s6 小时前
IP 存储核心 iSCSI:原理拆解 + 无报错实战指南
网络·网络协议·tcp/ip
BLUcoding6 小时前
Ubuntu 开机自启 Kiosk 模式浏览器全屏展示网页配置指南
linux·运维·ubuntu