打印
[学习资料]

USB的HID协议怎么会这么复杂??

[复制链接]
578|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-4-9 16:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
不学不知道,一看吓一跳!
前段时间因为工作需要,需要熟悉USB的HID协议,就使用wireshark抓包工具抓取了我们日常工作中用的比较多的一个设备,即USB鼠标与电脑之间的通信协议包,其中电脑为USB Host主机,USB鼠标为Slave从机;抓取协议包后,咋一看,没看明白,怎么会这么复杂?太复杂了!!
通过查资料对数据,逐个字段进行解析,才慢慢找到感觉。
下面就以将USB鼠标插入USB接口后,鼠标和电脑之间的一段通信协议包;
USB鼠标插上后,电脑会识别有USB设备插入,然后会向USB设备请求该设备的一些通用信息,即通过请求设备描述符的报文实现操作;
设备描述符介绍:
设备描述符说明了USB设备的通用信息,提供了关于设备、设备的配置以及任何设备所归属的类的信息;
USB设备只有一个设备描述符,并且是在设备连接时主机读取到的第一个描述符;
设备描述符所含的信息,被主机用来取得设备的额外内容。
该报文如下:

主机请求设备的设备描述符的报文解析如下:


这只是所有通信中的一条报文,其实HID协议还有很多报文,涉及类型,请求和设置等操作,下面是截取的一部分报文:

总之,要深入理解和掌握USB的HID协议,肯定得消耗不少脑细胞!!!

6499867f62897e3f27.png (122.82 KB )

6499867f62897e3f27.png

使用特权

评论回复
沙发
weifeng90| | 2025-4-9 22:16 | 只看该作者
涉及到底层通信协议的都很难

使用特权

评论回复
板凳
dffzh|  楼主 | 2025-4-10 08:49 | 只看该作者
weifeng90 发表于 2025-4-9 22:16
涉及到底层通信协议的都很难

确实

使用特权

评论回复
地板
coody| | 2025-4-10 10:26 | 只看该作者
任何一个USB底层协议都很复杂的。

使用特权

评论回复
5
单片小菜| | 2025-4-10 11:04 | 只看该作者
USB3300芯片内部逻辑需要单片机支持吗?

使用特权

评论回复
6
dffzh|  楼主 | 2025-4-10 11:21 | 只看该作者
coody 发表于 2025-4-10 10:26
任何一个USB底层协议都很复杂的。

能吃透的绝对是大神

使用特权

评论回复
7
dffzh|  楼主 | 2025-4-10 11:24 | 只看该作者
单片小菜 发表于 2025-4-10 11:04
USB3300芯片内部逻辑需要单片机支持吗?

[size=16.002px]USB3300是一款USB 2.0高速物理层收发器芯片,其内部逻辑[size=16.002px]不需要单片机直接参与核心功能运行[size=16.002px],但需要外部主控芯片配合才能实现完整的USB通信功能

使用特权

评论回复
8
Chad1989| | 2025-4-10 14:10 | 只看该作者
现在芯片越来越成熟,需要去扒底层代码的机会越来越少。

使用特权

评论回复
9
jobszheng| | 2025-4-10 14:32 | 只看该作者
USB协议非常复杂,另一个非常复杂的是蓝牙协议。
相对而言,TCP/IP协议倒是属于简单的了

使用特权

评论回复
评论
dirtwillfly 2025-4-11 08:23 回复TA
TCP/IP应用比较简单,但底层协议很复杂,不然就不会分七层了 
10
dffzh|  楼主 | 2025-4-10 15:09 | 只看该作者
Chad1989 发表于 2025-4-10 14:10
现在芯片越来越成熟,需要去扒底层代码的机会越来越少。

是的,芯片集成和封装功能日益强大

使用特权

评论回复
11
dffzh|  楼主 | 2025-4-10 15:10 | 只看该作者
jobszheng 发表于 2025-4-10 14:32
USB协议非常复杂,另一个非常复杂的是蓝牙协议。
相对而言,TCP/IP协议倒是属于简单的了 ...

wifi协议是不是也比较复杂?

使用特权

评论回复
12
jobszheng| | 2025-4-10 15:13 | 只看该作者
惭愧了,还没有接触过IEEE 802.11协议

使用特权

评论回复
13
Wxy8030| | 2025-4-10 15:25 | 只看该作者
jobszheng 发表于 2025-4-10 14:32
USB协议非常复杂,另一个非常复杂的是蓝牙协议。
相对而言,TCP/IP协议倒是属于简单的了 ...

TCP协议先不谈,网口底层硬件的驱动可比USB的底层硬件驱动复杂太多了 ,,,几乎就是最复杂的外设没有之一

使用特权

评论回复
14
dffzh|  楼主 | 2025-4-10 16:15 | 只看该作者
Wxy8030 发表于 2025-4-10 15:25
TCP协议先不谈,网口底层硬件的驱动可比USB的底层硬件驱动复杂太多了 ,,,几乎就是最复杂的外设没有之 ...

阁下,网口底层硬件驱动程序很复杂的主要原因是什么呢?

使用特权

评论回复
15
zjk103| | 2025-4-10 17:12 | 只看该作者
底层协议不复杂的话没法做到通用啊

使用特权

评论回复
16
dffzh|  楼主 | 2025-4-10 17:20 | 只看该作者
zjk103 发表于 2025-4-10 17:12
底层协议不复杂的话没法做到通用啊

有道理,底层协议要适配尽量多的产品才能算的上是通用协议

使用特权

评论回复
17
dffzh|  楼主 | 2025-4-10 17:22 | 只看该作者
jobszheng 发表于 2025-4-10 15:13
惭愧了,还没有接触过IEEE 802.11协议

阁下有空研究研究,再写个帖子给大家分享一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

90

帖子

2

粉丝