HID
AI-摘要
AnZhiYu GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
HID
adalucky简介
本篇文章是关于 HID 相关协议的介绍,人机交互 Human Interface Device) 其核心优势在于免驱兼容:操作系统(Windows、Linux、macOS、Android等)内置了标准 HID 驱动,无需安装额外软件即可即插即用
USB HID
注:- 下面关于 USB HID 进行的相关记录学习都是基于 USB2.0 (部分可能会拿 USB3.0 进行对比)
- 默认没有提到的都是基于全速模式 也就是理论带宽=12Mbps
| 接口版本 | 工作模式 | 理论带宽 |
|---|---|---|
| USB2.0 | 低速模式 (Low-Speed) | 1.5Mbps |
| 全速模式 (Full-Speed) | 12Mbps | |
| 高速模式 (High-Speed) | 480Mbps | |
| USB3.0 (USB3.1 Gen1/USB3.2 Gen1) | 超高速模式 (SuperSpeed) | 5000Mbps |
| USB3.1 Gen2 (USB3.2 Gen2) | 超高速增强模式 (SuperSpeed+) | 10000Mbps |
| USB3.2 Gen2x2 | 双通道超高速模式 | 20000Mbps |
| 接口版本 | 功能分类 | 线缆颜色 | 引脚 | 作用 |
|---|---|---|---|---|
| USB2.0 | VBUS(电源+) | 红 | 1 | 5V供电 |
| D-(数据-) | 白 | 2 | 差分数据 | |
| D+(数据+) | 绿 | 3 | 差分数据 | |
| GND(地线) | 黑 | 4 | 接地 | |
| USB3.0 | VBUS(电源+) | 红 | 1 | 5V供电 |
| D-(数据-) | 白 | 2 | 差分数据 | |
| D+(数据+) | 绿 | 3 | 差分数据 | |
| GND(地线) | 黑 | 4 | 接地 | |
| SSTX-(发送-) | 蓝 | 5 | 发送差分对 | |
| SSTX+(发送+) | 黄 | 6 | 发送差分对 | |
| GND(信号地) | 屏蔽层 | 7 | 屏蔽接地 | |
| SSRX-(接收-) | 紫 | 8 | 接收差分对 | |
| SSRX+(接收+) | 橙 | 9 | 接收差分对 |
注:
- USB3.0 有 9 个引脚(USB2.0 有 4 个引脚),并且前面 4 个和 USB2.0 完成想通,所以 USB3.0 是完全兼容 USB2.0 的
- 我们主机就是通过 D- D+ 的差分信号来区分 USB2.0 3.0 的
- D- D+ 是不可以接反的,正常情况下虽然不会烧掉,但是无法工作(D+ D-默认都是低电平)
- OTG中会多一根身份识别(ID)线,也就是会多一个引脚,ID引脚,专门用来实现 OTG 双向角色切换,让手机|电脑|平板 / 开发板既能当主机、也能当从机。
flowchart TD
A[主机检测到设备插入] --> B{检测 D+/D- 电压}
B -->|D+ > 2.8V| C[全速设备 12Mbps]
B -->|D- > 2.8V| D[低速设备 1.5Mbps]
C & D --> E[发送高速检测信号]
E -->|设备响应“Chirp K”| F[切换至高速模式 480Mbps]
E -->|无响应| G[保持全速/低速]
注:
- 这里以 2.0 为例,当设备插入到主设备后,D+ D- 原本默认都是低电平,然后至少有一个引脚电平被拉高,主机就可以知道我们的设备到底支持哪些工作模式了
- 电脑|手机|平板 是如何知道我们的 USB 设备是什么时候连接上的或者什么时候拔掉的?
- 在我们插上后会拉高 D+ | D- 的电平(默认是低电平 0),当被拉高后保持一段时间以后就被认定为是连接了,拔掉了就是没有这个 D+ | D- 的高电平了,也就被认定是断开了
- USB 分为主从设备,必须由主机发起询问,从机才能回应(一般的设计是把我们的电脑|手机|平板这些作为主机,自制的 USB HID 设备作为从机,由电脑|手机|平板 作为主机发起通讯)
sequenceDiagram
participant Host
participant Device
note right of Device: 设备收到 IN Token 后
Host->>Device: 发送 IN Token(请求数据)
Device-->>Host: 返回 DATA Packet(数据包)
Host->>Device: 回复 ACK Token(确认接收)
- 枚举就是一个初始化的行为,是指将一个 USB 设备插入到主机(电脑|手机|平板)后,主机读取 USB 配置信息,并正常使用该 USB 设备的过程
- 具体行为如下:
- 电脑|手机|平板的 USB 接口 D- D+ 默认为低电平,我们插入 USB 设备后,致使 D- 或 D+引脚的电平被拉高,这样电脑就会得到我们插入的 USB 设备支持的工作模式(速率支持多少)
- 电脑|手机|平板 USB 发出 RESET 信号,USB 设备收到后准备开始初始化
- 电脑|手机|平板 USB 发出获取信息信号,USB 设备回应信息(重点学习 )
- 完成枚举过程,正常通讯。
flowchart TD
A[USB设备插入主机] --> B[硬件检测D+/D-电平,协商USB传输速率]
B --> C[主机分配唯一USB设备地址]
C --> D[主机读取**设备描述符**<br>厂商ID/设备ID/设备类型]
D --> E[主机读取**配置描述符**<br>接口数量、端点信息、功耗]
E --> F{是否为HID类设备?}
F -- 否 --> G[执行对应设备类枚举:存储/串口等]
F -- 是 --> H[读取HID**接口描述符**]
H --> I[读取核心:HID**报告描述符**<br>约定按键/位移等数据格式]
I --> J[主机选中配置,激活设备端点]
J --> K[枚举完成,进入中断IN传输<br>设备定时上报HID数据]
sequenceDiagram
participant Host as 主机
participant Device as HID设备(键盘/鼠标/外设)
Note over Host,Device: HID枚举:设备入住登记全过程
Host->>Device: 检测到设备接入,分配唯一设备地址
Host->>Device: 请求读取【设备描述符】
Device-->>Host: 返回厂商、型号、USB版本等基础身份信息
Host->>Device: 请求读取【配置描述符】
Device-->>Host: 返回接口、端点、最大功耗
Host->>Device: 请求读取【HID接口描述符】
Device-->>Host: 声明自身属于HID人机设备
Host->>Device: 请求读取【HID报告描述符】
Device-->>Host: 返回数据格式说明书(上报规则、字节定义)
Host->>Device: 设置设备配置,激活通信端点
Note over Host,Device: 枚举完成,正式开始数据交互
loop 周期性中断IN查询
Host->>Device: 定时发送IN令牌请求数据
Device-->>Host: 上报按键/鼠标位移数据包
end
Comment
匿名评论隐私政策




