目录
USB硬件基础
在了解LINUX的USB驱动之前,我们肯定是要了解相关硬件内容的,如下给出了三种常用的USB接口。
特性 | Type A (2.0) | Type A 3.0 | Type C |
---|---|---|---|
接口形状 | 长方形,单向插入 | 与 Type A 2.0 相同 | 椭圆形,可双向插入 |
引脚数量 | 4 | 9 | 24 |
数据传输速率 | 高速模式最高 480 Mbps | 超高速模式最高 5 Gbps 或 10 Gbps (3.1) | 高达 40 Gbps (Thunderbolt 3/4) |
供电能力 | 5V,最大 500 mA(2.5W) | 5V,最大 900 mA(4.5W) | 支持 USB PD,最高 20V,5A(100W) |
兼容性 | 向下兼容 | 向下兼容 2.0 | 向下兼容 USB 2.0 和 3.x |
是否支持 OTG | 支持,但功能有限 | 支持,但功能有限 | 支持完整 OTG 功能 |
使用寿命 | 插拔约 1,500 次 | 插拔约 1,500 次 | 插拔约 10,000 次 |
多功能性 | 仅支持 USB 信号传输 | 仅支持 USB 信号传输 | 支持视频、音频、数据和供电多种协议 |
方向性 | 单向插入 | 单向插入 | 双向插入,方便使用 |
是否支持 Thunderbolt | 不支持 | 不支持 | 支持 Thunderbolt 3 和 4(部分设备) |
典型应用场景 | 鼠标、键盘、打印机、U盘等外设 | 高速存储设备、外接硬盘、摄像头等高速设备 | 智能手机、平板、笔记本充电和数据传输等 |
Type A引脚说明
USB 2.0 Type A 只有 4 个引脚,定义如下:
引脚编号 | 名称 | 描述 | 功能 |
---|---|---|---|
1 | VBUS | 电源正极 (+5V) | 提供设备电源 |
2 | D- | 差分数据负极 | 传输 USB 数据 |
3 | D+ | 差分数据正极 | 传输 USB 数据 |
4 | GND | 地(电源负极) | 提供电源回路 |
但是这个D+跟D-也跟我们常见的差分电压来判断正负不太一样,我们可以看下述内容。
你可以发现D+大于D-时,即为逻辑1,反之则为逻辑0,之前我们在485也说过,主要提高抗干扰能力了,差分电压的作用,至于逻辑电平如何规定,也都是人为遵守的协议了,我们熟知即可。
USB 硬件中,主机端的 D+ 和 D- 线通过 15kΩ 下拉电阻保持默认低电平,用于检测设备是否接入;设备端的 D+ 或 D- 线上接有 1.5kΩ 上拉电阻,用于将线路拉高,通知主机有新设备接入并指示设备的速度类型(D+ 上拉表示全速/高速设备,D- 上拉表示低速设备)。上拉与下拉电阻的配合实现了 USB 接入的自动检测和初步通信初始化。
Type A 3.0引脚说明
USB 3.0 Type A 在 USB 2.0 的基础上增加了 5 个引脚,共 9 个引脚,定义如下:
引脚编号 | 名称 | 描述 | 功能 |
---|---|---|---|
1 | VBUS | 电源正极 (+5V) | 提供设备电源 |
2 | D- | 差分数据负极 | USB 2.0 数据传输 |
3 | D+ | 差分数据正极 | USB 2.0 数据传输 |
4 | GND | 地(电源负极) | 提供电源回路 |
5 | StdA_SSRX- | 超高速接收负极(SuperSpeed RX -) | USB 3.0 数据接收 |
6 | StdA_SSRX+ | 超高速接收正极(SuperSpeed RX +) | USB 3.0 数据接收 |
7 | GND_DRAIN | 屏蔽接地 | 屏蔽和地回路 |
8 | StdA_SSTX- | 超高速发送负极(SuperSpeed TX -) | USB 3.0 数据发送 |
9 | StdA_SSTX+ | 超高速发送正极(SuperSpeed TX +) | USB 3.0 数据发送 |
注:USB 3.0 的引脚使其能够在 SuperSpeed 模式下实现高达 5 Gbps 的数据传输速率。
因此我们可以看到,这个USB3.0其实是一个全双工的协议,因为有TX也有RX而且还是差分,相比之前的USB更强了。
Type C引脚说明
USB Type C 拥有 24 个引脚,支持双向插入,定义如下:
引脚编号 | 名称 | 描述 | 功能 |
---|---|---|---|
A1 | GND | 接地 | 电源回路 |
A2 | SSTXp1 | 超高速发送正极(通道 1) | USB 3.x 数据发送 |
A3 | SSTXn1 | 超高速发送负极(通道 1) | USB 3.x 数据发送 |
A4 | VBUS | 电源正极 | 提供电源 |
A5 | CC1 | 配置通道 1 | 检测连接方向和电源管理 |
A6 | D+ | 差分数据正极 | USB 2.0 数据传输 |
A7 | D- | 差分数据负极 | USB 2.0 数据传输 |
A8 | SBU1 | 辅助信号通道 1 | 支持音频、视频信号 |
A9 | VBUS | 电源正极 | 提供电源 |
A10 | SSRXn1 | 超高速接收负极(通道 1) | USB 3.x 数据接收 |
A11 | SSRXp1 | 超高速接收正极(通道 1) | USB 3.x 数据接收 |
A12 | GND | 接地 | 电源回路 |
B1 | GND | 接地 | 电源回路 |
B2 | SSRXp2 | 超高速接收正极(通道 2) | USB 3.x 数据接收 |
B3 | SSRXn2 | 超高速接收负极(通道 2) | USB 3.x 数据接收 |
B4 | VBUS | 电源正极 | 提供电源 |
B5 | CC2 | 配置通道 2 | 检测连接方向和电源管理 |
B6 | D+ | 差分数据正极 | USB 2.0 数据传输 |
B7 | D- | 差分数据负极 | USB 2.0 数据传输 |
B8 | SBU2 | 辅助信号通道 2 | 支持音频、视频信号 |
B9 | VBUS | 电源正极 | 提供电源 |
B10 | SSTXn2 | 超高速发送负极(通道 2) | USB 3.x 数据发送 |
B11 | SSTXp2 | 超高速发送正极(通道 2) | USB 3.x 数据发送 |
B12 | GND | 接地 | 电源回路 |
注:
- Type C 引脚支持多种协议(如 USB 2.0、3.x、Thunderbolt、DisplayPort 等)。
CC
引脚用于检测插入方向并管理电源(USB PD)。
这里就是TYPE C的引脚了,可以看到,不管是正插,还是反插,你都可以进行通信的,对比之前的USB接口多出那么多引脚,主要是为了正反插以及增加一路传输协议通道,还有兼容USB2.0协议,比如DP之类的显示设备,C口引脚越多,只是功能上面兼容性的提升,并不是传输速率的提升。
USB驱动你一定需要知道的事
-
USB设备接入检测
- 现象:PC 右下角显示"发现 Android Phone",弹出安装驱动程序的提示。
- 原因:
- PC 的 USB 口通过内部硬件机制(D+/D- 线路电平变化)检测到新设备的接入。
- USB 设备内置的上拉电阻(1.5KΩ)将 PC USB 口的 D+/D- 拉高,通知主机有设备接入。
-
接入后的初步识别
- 过程:
- PC 上的 USB 总线驱动程序负责与新接入的设备通信,询问设备类型。
- 设备通过标准协议返回自己的信息(设备描述符)。
- 结果:
- 即使没有安装具体的设备驱动程序,PC 的总线驱动程序也能初步识别设备(如显示“Android Phone”)。
- 过程:
-
设备驱动程序的加载
- 总线驱动程序:负责检测设备、识别设备类型、分配编号并为设备找到合适的驱动程序。
- 设备驱动程序:由用户安装或系统自动加载,用于支持设备的具体功能。
-
USB设备的识别过程
- 标准协议:
- 所有 USB 设备必须遵守 USB 规范。
- 当 PC 发送"你是什么"的请求时,设备需按照固定格式返回自己的描述符信息。
- 描述符内容:包括设备类型、制造商、产品 ID 等,用于分类和识别设备。
- 标准协议:
-
设备编号分配
- 默认编号:新接入的 USB 设备初始编号为 0,PC 通过编号 0 与设备通信。
- 分配新编号:总线驱动程序检测设备后,为其分配唯一的编号,用于后续通信。
-
多设备分辨
- 每个接入的 USB 设备都有唯一的编号(地址)。
- PC 通过发送包含设备编号的命令来与指定设备通信。