1. USB协议基础:USB总线架构、USB物理层信号、USB电气特性、USB线缆与连接器
大家好,欢迎来到《USB主机与设备栈移植实战》的第一课。
说实话,USB协议看起来挺庞大,但别怕。咱们从最底层开始,把地基打牢。今天聊的这些东西,说白了就是USB的“物理世界”——线怎么接,电怎么跑,信号怎么传。
1.1 USB总线架构:主从分明的世界
USB总线架构,我习惯叫它“星型拓扑”。一个主机(Host),下面挂一堆设备(Device)。主机说了算,设备只能听话。
为什么这么设计?因为USB从一开始就没打算搞对等网络。它要的就是简单、稳定。主机负责调度,设备负责响应。你想想看,要是设备能随便抢总线,那不乱套了?
总线架构里有个关键角色——Hub(集线器)。Hub就是个信号中继器,负责把主机的端口扩展成多个。我早期做项目时,遇到过Hub芯片选型不当导致信号质量差的问题。嗯,这里要注意:Hub不是简单的分线器,它要重新驱动信号,还要处理设备插拔。
整个USB系统,最多支持127个设备(包括Hub在内)。这个数字怎么来的?因为地址字段只有7位,0地址留给未配置的设备,剩下1-127可用。
核心要点:USB是主从架构,主机控制一切。设备不能主动发起传输,只能等主机来问。
1.2 USB物理层信号:D+和D-的故事
USB物理层,说白了就是两根数据线:D+和D-。它们采用差分信号传输。为什么用差分?抗干扰能力强啊。我在一个工业现场项目里,环境噪声特别大,单端信号根本没法用,换成差分就好多了。
差分信号怎么工作的?简单说:D+和D-的电压差代表逻辑电平。
- J状态:D+高,D-低(对于全速/高速设备)
- K状态:D+低,D-高
- SE0:D+和D-都是低电平(复位信号)
这里有个细节:低速设备和全速/高速设备的J/K状态定义是相反的。为什么?因为低速设备用D-上拉,全速/高速设备用D+上拉。我刚开始学的时候也搞混过,后来画了个表格贴在工位上。
| 设备类型 | 空闲状态 | 上拉电阻位置 |
|---|---|---|
| 低速 (1.5 Mbps) | K状态 (D+低, D-高) | D- |
| 全速 (12 Mbps) | J状态 (D+高, D-低) | D+ |
| 高速 (480 Mbps) | J状态 (D+高, D-低) | D+ (握手后切换) |
个人经验:调试USB设备时,先看D+和D-的上拉电阻。设备没上拉,主机根本认不出来。我曾经花了一整天查一个USB鼠标不识别的问题,最后发现是上拉电阻虚焊了。
1.3 USB电气特性:电压、电流与终端
USB的电气特性,咱们得聊聊电压和电流。
电压:VBUS是5V,允许波动范围4.75V到5.25V。别小看这个范围,线缆长了压降大,设备端可能只有4.5V。我做过一个长线缆项目,设备老是掉线,最后发现是VBUS电压掉到4.3V以下了。
电流:USB 2.0规范里,一个端口最大提供500mA。USB 3.0提升到900mA。但要注意,设备在枚举完成前,只能从VBUS抽取100mA(低功耗设备)或500mA(高功耗设备)。这是协议规定的,硬件上也要配合。
终端电阻:D+和D-线上,主机端有15kΩ下拉电阻,设备端有1.5kΩ上拉电阻。这个电阻网络决定了总线空闲状态,也用来检测设备插拔。
避坑指南:我曾经设计一个USB设备,上拉电阻用了4.7kΩ,结果主机死活不认。查了三天规范才发现,1.5kΩ是硬性要求,不能随便改。电阻值变了,差分阻抗就不匹配,信号反射严重。
1.4 USB线缆与连接器:物理接口的讲究
USB线缆,看起来简单,其实门道不少。
线缆结构:USB 2.0线缆有4根线:VBUS(红)、D-(白)、D+(绿)、GND(黑)。外加屏蔽层。屏蔽层很重要,我见过不少廉价线缆屏蔽层没接好,导致EMI超标。
连接器类型:
- Type-A:主机端标准接口,长方形,防插反设计
- Type-B:设备端标准接口,正方形,常用于打印机
- Mini-B:早期小型设备用,5引脚
- Micro-B:智能手机时代主流,5引脚,比Mini-B更薄
- Type-C:新一代接口,24引脚,正反可插,支持大电流
Type-C接口我得多说两句。它支持正反插,靠的是CC(Configuration Channel)引脚。CC引脚还负责检测插拔方向、协商供电能力。我最近一个项目用Type-C,发现CC逻辑比想象中复杂,特别是要支持PD(Power Delivery)协议时。
| 连接器类型 | 引脚数 | 最大电流 | 常见用途 |
|---|---|---|---|
| Type-A | 4 | 500mA (USB 2.0) | 主机端口、充电器 |
| Type-B | 4 | 500mA | 打印机、扫描仪 |
| Micro-B | 5 | 1.8A (OTG) | 手机、移动硬盘 |
| Type-C | 24 | 5A (PD) | 笔记本、手机、显示器 |
我的建议:新项目尽量用Type-C接口。虽然引脚多、逻辑复杂,但兼容性好,未来趋势。不过要注意,Type-C线缆的CC逻辑芯片要选对,不然设备可能无法正常握手。
1.5 小结:物理层是基础,别忽视
好了,第一课的内容就这些。USB总线架构、物理层信号、电气特性、线缆连接器,这些看似基础的东西,其实最容易出问题。
我记得刚入行时,总觉得协议栈才是重点,硬件细节差不多就行。结果被现实狠狠教育了——信号反射、电压不足、上拉电阻不对,这些问题排查起来比写代码痛苦多了。
所以,我建议你花点时间把物理层搞透。后面咱们聊协议栈、枚举过程、传输类型,都会基于今天的内容。地基打牢了,楼才能盖得高。
下一课,咱们聊聊USB的包结构和传输事务。到时候见。