
USB 协议详解
文章平均质量分 81
订阅专栏可以永久看本专栏里的全部文章。专栏包含 USB 协议介绍,枚举过程,速度识别,字节序,编码格式,位填充,连接检测,断开检测,描述符,以及鼠标实例分析,鼠标实现,键盘实现,鼠标+键盘,带LED灯的键盘,复合设备,MSC 大容量设备,UAC2.0 麦克风, UAC2.0扬声器,UAC2.0麦克风
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
tyustli
不抛弃,不放弃
展开
-
USB 网卡——RNDIS 控制消息解析
远程 NDIS 设备将通过发回 REMOTE_NDIS_KEEPALIVE_CMPLT 响应消息来响应主机发送的 REMOTE_NDIS_KEEPALIVE_MSG 消息。远程 NDIS 设备将以 REMOTE_NDIS_QUERY_CMPLT 消息响应 REMOTE_NDIS_QUERY_MSG 消息。远程 NDIS 设备将通过重置设备来响应主机发出的 REMOTE_NDIS_RESET_MSG 消息,并在 REMOTE_NDIS_RESET_CMPLT 消息中返回请求的状态。原创 2025-04-30 02:15:00 · 33 阅读 · 0 评论 -
USB 网卡——RNDIS 控制消息流程
在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。原创 2025-04-29 21:55:07 · 72 阅读 · 0 评论 -
USB 网卡——RNDIS 介绍
RNDIS 全称为:Remote Network Driver Interface Specification,即远程网络驱动接口规范Remote NDIS (RNDIS)是以太网(802.3)网络设备上的以太网(802.3)网络设备(例如 USB、1394、蓝牙和 InfiniBand)即插即用 上的总线独立类规范。远程 NDIS 通过抽象控制和数据通道在主计算机与远程 NDIS 设备之间定义与总线无关的消息协议。在总线级初始化之后,设备处于 RNDIS 未初始化状态。原创 2025-04-29 21:46:47 · 213 阅读 · 0 评论 -
cherry USB 键盘分析
cherry USB 键盘有两个接口,每个接口都是 HID keyboard,第一个接口有一个输入端点,第二个接口有一个输入端点和一个输出端点。接口 1 用作普通键盘数据的上报,使用输入端点 1。调节亮度没起作用不知道是操作不对还是键盘的 bug。接口 2 用作控制信息的上报,使用输入端点 2。调节电脑屏幕亮度的报告如下。打开默认浏览器的报告如下。调节电脑声音的报告如下。,的索引设置为 2。打开计算器的报告如下。原创 2025-01-24 19:53:05 · 670 阅读 · 0 评论 -
UVC1.5 —— USB 摄像头
需要注意的是,如果使用接口关联描述符,这里的类,子类和协议需要固定为。所以接口关联描述符将接口1 和接口 2 关联到一起。原创 2024-12-11 22:11:57 · 166 阅读 · 0 评论 -
UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)
反馈端点介绍,这里写的还是比较详细的。对于 UAC2.0 反馈的数据格式就是 16.16,返回四个字节的数据。原创 2024-12-09 20:07:00 · 429 阅读 · 0 评论 -
UAC2.0 speaker——双声道 USB speaker(16bit)
UAC2.0 麦克风系列文章。原创 2024-11-03 21:22:28 · 234 阅读 · 0 评论 -
UAC2.0 speaker——同时支持 16bit,24bit 和 32bit
在一个 USB speaker 设备中同时支持 16bit, 24bit 和 32bit。原创 2024-11-14 21:55:30 · 192 阅读 · 0 评论 -
UAC2.0 speaker——speaker 数据传输
UAC2.0 speaker 系列文章。原创 2024-11-15 02:00:00 · 211 阅读 · 0 评论 -
UAC2.0 speaker——24/32bit 支持
要实现 24/32bit 的麦克风设备,描述符结构和设备描述符等一致。支持 24/32bit 之前先回顾一下 16bit 的枚举效果。和 16bit 不同的是。和 16bit 不同的是。原创 2024-11-14 12:24:25 · 136 阅读 · 0 评论 -
UAC2.0 speaker——多采样率支持
Clock Source Descriptor 需要修改为频率可调。UAC2.0 多采样率支持需要在。这里请求的就是采样率的范围。命令中返回采样率集合。这里有三个采样率可选。可编程的 Clock。原创 2024-11-13 21:05:00 · 335 阅读 · 0 评论 -
UAC2.0 speaker——音量控制
UAC2.0 speaker 系列文章。原创 2024-11-13 21:01:02 · 179 阅读 · 0 评论 -
UAC2.0 speaker——类特殊请求
UAC2.0 麦克风系列文章。原创 2024-11-13 20:59:57 · 299 阅读 · 0 评论 -
UAC2.0 speaker——单声道 USB speaker(16bit)
UAC2.0 speaker系列文章。原创 2024-11-02 15:13:46 · 208 阅读 · 0 评论 -
UAC2.0 麦克风——双声道 USB 麦克风(16bit)
所以增加一个通道,该描述符的长度增加 4,那么配置描述符的总长度也增加 4。Feature Unit 的 bLength 字段有两个通道,所以需要加 4。Class-Specific AS Interface 描述符的。feature Unit 新增加了一个通道,需要新增。所以这里的 wTotalLength 也要加 4。字段表明有几个通道,所以这里也设置为 2。字段表明有几个通道,所以这里设置为 2。第二个通道的属性这里设置和通道1一致。可以知道增加一个通道,需要增加。原创 2024-09-18 00:15:00 · 401 阅读 · 0 评论 -
UAC2.0 麦克风——同时支持 16bit,24bit 和 32bit
在一个 USB 麦克风设备中同时支持 16bit, 24bit 和 32bit。原创 2024-09-20 01:30:00 · 291 阅读 · 0 评论 -
UAC2.0 麦克风——麦克风数据传输
实现 RAM -> USB -> PC 这个数据通路之后,可以用 USB 麦克风来测试 codec ADC 的性能。MCU 端发送 48KHZ, 16bit 单声道的正弦波数据,正弦波数据的生成参考。需要注意的是音频数据的数据包 PID 是不翻转的,所以 PID 一直是 DATA0。本节主要介绍 MCU 麦克风的数据如何传输给上位机。上一节中实现了 USB 麦克风设备。使用音频录制软件查看波形如下。原创 2024-09-17 00:15:00 · 259 阅读 · 0 评论 -
UAC2.0 麦克风——24/32bit 支持
描述符结构和设备描述符等一致。和 16bit 不同的是。和 16bit 不同的是。原创 2024-09-17 00:30:00 · 205 阅读 · 0 评论 -
UAC2.0 麦克风——多采样率支持
Clock Source Descriptor 需要修改为频率可调。UAC2.0 多采样率支持需要在。这里请求的就是采样率的范围。命令中返回采样率集合。这里有三个采样率可选。可编程的 Clock。原创 2024-09-19 19:13:52 · 347 阅读 · 0 评论 -
UAC2.0 麦克风——音量控制
发送到 Feature Uint 的 CS 码如下所以这个命令就是设置音量的命令,后面紧跟着的两个数据就是音量F6 FF。原创 2024-09-19 09:08:34 · 369 阅读 · 0 评论 -
UAC2.0 麦克风——类特殊请求
UAC2.0 麦克风类特殊请求原创 2024-09-18 19:03:13 · 205 阅读 · 0 评论 -
UAC2.0 麦克风——单声道 USB 麦克风(16bit)
的总长度 = Class-Specific AC Interface Header + Clock SRC + INPUT Terminal + OUTPUT Terminal + Unit。这里只有一个 channel ,所以长度是 6 + 2 * 4 = 14。需要注意的是,如何使用接口关联描述符,这里的类,子类和协议需要固定为。非 0 端点的数是 0,所以 audio 控制接口是没有端点的。所以接口关联描述符将接口1 和接口 2 关联到一起。原创 2024-09-16 11:06:21 · 1129 阅读 · 0 评论 -
USB组合设备——串口+鼠标+键盘
主机在获取字符串描述符时,需要根据索引返回相应的字符串。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。所以接口关联描述符将接口1 和接口 2 关联到一起。这里的 windex 都是 0 表示发送到接口 0。后面的接口描述符,类特殊描述符和端点描述符等和。发送到接口 2 的 set idle 命令。发送到接口 3 的 set idle 命令。发送到接口 2 的获取描述符命令。发送到接口 2 的获取描述符命令。原创 2024-09-16 00:15:00 · 563 阅读 · 0 评论 -
USB 虚拟串口改名——更新驱动程序篇
为例,其他操作系统版本类似。原创 2025-03-31 19:33:36 · 105 阅读 · 0 评论 -
USB 虚拟串口改名——禁用 Windows 驱动签名篇
USB 虚拟串口 Windows 枚举之后使用的是默认的名称,例如USB 串行设备(COM52),如下图所示但是我们使用其他厂商的虚拟串口的时候,会显示厂商信息,例如CH340USB 转串口工具显示的就是那我们自己做的虚拟串口如何显示自定义名称呢?这里就涉及到 Windows 驱动签名,本文只讨论如何修改设备名称,至于 Windows 如何过驱动签名,不在本文讨论范围。原创 2025-03-31 12:47:03 · 200 阅读 · 0 评论 -
USB虚拟串口——CDC ACM 两路虚拟串口
CDC 两路虚拟串口实现原创 2024-09-15 11:12:24 · 441 阅读 · 0 评论 -
USB虚拟串口——CDC ACM 虚拟串口(使用 IAD)
主机通过发送Get Descriptor请求,取得配置描述符,接口关联描述符,接口描述符,端点描述符及其附属描述符。本文主要介绍使用 IAD 接口关联描述符,不使用 IAD 参考。一个 CDC 设备有两个接口,所以就有两种实现方式。所以接口关联描述符将接口1 和接口 2 关联到一起。后面的接口描述符,类特殊描述符和端点描述符等和。需要注意的是,这里的类,子类和协议。一致,这里不再赘述。原创 2024-09-15 01:45:00 · 575 阅读 · 0 评论 -
USB虚拟串口——CDC ACM 虚拟串口(不使用 IAD)
主机在获取字符串描述符时,需要根据索引返回相应的字符串,0 表示没有字符串。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。一个 CDC 设备有两个接口,所以就有两种实现方式。本文主要介绍不使用 IAD 接口关联描述符。第一个接口描述符指定了。第二个接口描述符指定了。原创 2024-09-14 20:05:53 · 470 阅读 · 0 评论 -
U盘实现——双盘符实现
上一篇文章中介绍了 U 盘的枚举过程。原创 2025-04-18 22:15:00 · 104 阅读 · 0 评论 -
U盘实现——U 盘枚举过程
U 盘需要两个端点,一个输入端点和一个输出端点,且端点类型为。设备描述符,字符串描述符及设备限定描述符与。,所以此时的配置描述符集合结构为。一致,这里仅介绍不同点。原创 2023-03-28 22:55:36 · 787 阅读 · 0 评论 -
U盘实现——BOT 常用命令
中介绍了 BOT 三种状态的转换过程,本节主要介绍下常用的几个 BOT 命令及数据抓包。原创 2025-04-03 21:33:53 · 288 阅读 · 0 评论 -
U盘实现——MSC 介绍
BOT 即 bulk only transport ,在仅批量传输的结构和过程中,共分成三个阶段:命令阶段,数据阶段和状态阶段。原创 2023-03-28 22:53:40 · 1659 阅读 · 0 评论 -
USB组合设备——鼠标+键盘(两个接口实现)
中可以知道,多个接口实现时,一个接口实现鼠标,一个接口实现键盘,所以此时的配置描述符集合为。第一次主机不知道字符串描述符的长度,先获取 4 个,设备返回四个;第一次主机不知道字符串描述符的长度,先获取 4 个,设备返回四个;上一章中介绍了使用一个接口两个集合来实现,这一章使用两个接口实现。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。,主机在获取字符串描述符时,需要根据索引返回相应的字符串。第二次主机知道长度之后获取完整的字符串描述符。接口描述符中只指定了类,子类和协议都没有指定。原创 2024-09-14 17:04:47 · 685 阅读 · 0 评论 -
USB组合设备——鼠标+键盘(一个接口实现)
报告返回时,报告的最低位指定报告 ID 即可,所以往同一个端点写不同的数据表示不同的 function。) 和端点描述符等保持不变,唯一不同的是报告描述符和报告描述符的长度。设备描述符,配置描述符,HID 描述符 (注意。端点 0 最大包长为 64,分包传输如下。例如键盘报告的返回, 最低位为 1。要实现带鼠标功能的键盘有两种方式。本章介绍一个接口实现鼠标+键盘。上述报告描述符设置了四个报告。鼠标报告的返回最低位为 2。这里还是只有一个端点。其他报告的返回类似。原创 2023-03-27 22:50:46 · 1663 阅读 · 0 评论 -
USB键盘实现——带指示灯的键盘(九)
上面设置输出端点的最大包长为 8 ,这里输出端点收到的数据有 8 个字节,最低为即为有效位。根据第一个字节的各个 bit 判断类型,设置相应的 LED 即可。除控制端点和输入端点外,额外增加一个输出端点实现,那么端点描述符需要增加一个输出端点的描述符,相应的配置描述符集合需要修改。此类特殊请求表示主机有一次 OUT 事务,主机输出一个字节的数据。根据控制端点的数据,解析相应的位,控制 LED 灯的亮灭即可。,为 0x09,对应的 wValue 有不同的含义。要实现带指示灯的键盘,有两种方式。原创 2023-03-27 21:29:26 · 1314 阅读 · 0 评论 -
USB键盘实现——报告的返回(八)
bit7 位表示数据方向,输入端点 D7 为 1。所以输入端点 1 的地址为 0x81。中设置的报告,返回 8 字节数据。将上述报告通过端点返回即可。USB 端点数据分析。原创 2023-03-27 12:50:45 · 396 阅读 · 0 评论 -
USB键盘实现——类特殊请求(七)
在请求 HID 报告描述符之前,主机会有一些类特殊请求,例如。请求返回:设备返回一个 0 长度的数据状态包即可。不同的是,键盘的报告描述符和鼠标是不同的。至此,HID 键盘的所有描述符全部返回。键盘报告描述符的返回,参考。HID 键盘枚举日志。原创 2023-03-27 12:34:26 · 974 阅读 · 0 评论 -
USB键盘实现——设置配置和获取配置(六)
只有在收到非 0 的配置值之后才可以使能非 0 端点,否则要禁用非 0 端点。后,又单独获取了几次设备描述符和配置描述符等,描述符的返回这里不再赘述。在数据阶段返回 1 字节的。USB 控制端点收到的数据。USB 控制端点收到的数据。字符串描述符内容解析和。HID 键盘枚举日志。原创 2023-03-27 12:25:38 · 811 阅读 · 0 评论 -
USB键盘实现——设备限定描述符(五)
设备限定描述符(Device Qualifier Descriptor)说明了能进行高速操作的设备在其他速度时产生的变化信息。例如,如果设备当前在全速下操作,设备限定描述符返回它如何在高速运行的信息。如果设备既支持全速状态又支持高速状态,那么就必须含有设备限定描述符(Device Qualifier Descriptor)。设备限定描述符(Device Qualifier Descriptor)中含有当前没有使用的速度下这些字段的取值。原创 2023-03-27 12:24:15 · 518 阅读 · 0 评论 -
USB键盘实现——字符串描述符(四)
USB字符串描述符原创 2023-03-26 22:47:18 · 832 阅读 · 0 评论