[学习资料] USB的HID协议怎么会这么复杂??

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

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


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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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底层协议都很复杂的。
单片小菜 发表于 2025-4-10 11:04 | 显示全部楼层
USB3300芯片内部逻辑需要单片机支持吗?
 楼主| dffzh 发表于 2025-4-10 11:21 | 显示全部楼层
coody 发表于 2025-4-10 10:26
任何一个USB底层协议都很复杂的。

能吃透的绝对是大神
 楼主| dffzh 发表于 2025-4-10 11:24 | 显示全部楼层
单片小菜 发表于 2025-4-10 11:04
USB3300芯片内部逻辑需要单片机支持吗?

USB3300是一款USB 2.0高速物理层收发器芯片,其内部逻辑不需要单片机直接参与核心功能运行,但需要外部主控芯片配合才能实现完整的USB通信功能
Chad1989 发表于 2025-4-10 14:10 | 显示全部楼层
现在芯片越来越成熟,需要去扒底层代码的机会越来越少。
jobszheng 发表于 2025-4-10 14:32 | 显示全部楼层
USB协议非常复杂,另一个非常复杂的是蓝牙协议。
相对而言,TCP/IP协议倒是属于简单的了

评论

@dirtwillfly :底层就不叫TCP/IP了,TCP/IP只是三四层,而且现在五六层都很少用了,TCP直接和应用层对接了  发表于 2025-5-15 08:55
TCP/IP应用比较简单,但底层协议很复杂,不然就不会分七层了  发表于 2025-4-11 08:23
 楼主| dffzh 发表于 2025-4-10 15:09 | 显示全部楼层
Chad1989 发表于 2025-4-10 14:10
现在芯片越来越成熟,需要去扒底层代码的机会越来越少。

是的,芯片集成和封装功能日益强大
 楼主| dffzh 发表于 2025-4-10 15:10 | 显示全部楼层
jobszheng 发表于 2025-4-10 14:32
USB协议非常复杂,另一个非常复杂的是蓝牙协议。
相对而言,TCP/IP协议倒是属于简单的了 ...

wifi协议是不是也比较复杂?
jobszheng 发表于 2025-4-10 15:13 | 显示全部楼层
惭愧了,还没有接触过IEEE 802.11协议
Wxy8030 发表于 2025-4-10 15:25 来自手机 | 显示全部楼层
jobszheng 发表于 2025-4-10 14:32
USB协议非常复杂,另一个非常复杂的是蓝牙协议。
相对而言,TCP/IP协议倒是属于简单的了 ...

TCP协议先不谈,网口底层硬件的驱动可比USB的底层硬件驱动复杂太多了 ,,,几乎就是最复杂的外设没有之一
 楼主| dffzh 发表于 2025-4-10 16:15 | 显示全部楼层
Wxy8030 发表于 2025-4-10 15:25
TCP协议先不谈,网口底层硬件的驱动可比USB的底层硬件驱动复杂太多了 ,,,几乎就是最复杂的外设没有之 ...

阁下,网口底层硬件驱动程序很复杂的主要原因是什么呢?
zjk103 发表于 2025-4-10 17:12 | 显示全部楼层
底层协议不复杂的话没法做到通用啊
 楼主| dffzh 发表于 2025-4-10 17:20 | 显示全部楼层
zjk103 发表于 2025-4-10 17:12
底层协议不复杂的话没法做到通用啊

有道理,底层协议要适配尽量多的产品才能算的上是通用协议
 楼主| dffzh 发表于 2025-4-10 17:22 | 显示全部楼层
jobszheng 发表于 2025-4-10 15:13
惭愧了,还没有接触过IEEE 802.11协议

阁下有空研究研究,再写个帖子给大家分享一下
kepe 发表于 2025-4-24 14:42 | 显示全部楼层
将USB鼠标插入USB接口后,鼠标和电脑之间的一段通信协议包;
 楼主| dffzh 发表于 2025-5-6 16:04 | 显示全部楼层
kepe 发表于 2025-4-24 14:42
将USB鼠标插入USB接口后,鼠标和电脑之间的一段通信协议包;

是的
oxlm 发表于 2025-5-9 09:47 | 显示全部楼层
hid协议还好吧,算比较简单了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

1174

帖子

22

粉丝
快速回复 在线客服 返回列表 返回顶部