1、USB基础概念:USB的起源与发展、USB总线拓扑结构、USB主机与设备角色、USB物理连接与电气特性
1.1 USB的起源与发展
USB这玩意儿,说白了就是为了解决电脑外设接口混乱的问题。90年代初,你想想看,键盘用PS/2、鼠标用串口、打印机用并口、游戏杆用MIDI口……每次插拔都得关机,还得认准接口形状。我记得第一次给客户装一套多媒体设备,光找对接口就花了半小时。
1994年,Intel、微软、IBM等七家公司联合推出了USB规范。目标很明确:一个接口,通吃所有外设。热插拔、即插即用、最高127个设备共享一条总线——这在当时简直是黑科技。
我做过一个项目,需要把老式并口打印机改成USB接口。那时候USB 1.1刚普及,12Mbps的速率对于打印任务绰绰有余,但你要是传个文件,那速度……嗯,你懂的。
| 版本 | 发布时间 | 最高速率 | 关键特性 |
|---|---|---|---|
| USB 1.0 | 1996 | 1.5 Mbps | 低速设备支持 |
| USB 1.1 | 1998 | 12 Mbps | 全速设备,真正商用 |
| USB 2.0 | 2000 | 480 Mbps | 高速模式,微帧调度 |
| USB 3.0 | 2008 | 5 Gbps | 双总线架构,超高速 |
| USB 3.1 | 2013 | 10 Gbps | Type-C接口,正反插 |
| USB 3.2 | 2017 | 20 Gbps | 双通道传输 |
| USB4 | 2019 | 40 Gbps | 基于Thunderbolt 3 |
核心要点:USB版本向下兼容。USB 3.0的U盘插到USB 1.1的接口上也能用,但速度会降到12Mbps。我在调试一个USB 3.0摄像头时,就因为线缆质量差,实际速率只有USB 2.0的水平,折腾了两天才找到原因。
1.2 USB总线拓扑结构
USB的拓扑结构是星型+层级的。主机在最顶端,下面挂接根集线器(Root Hub),然后一层层扩展出去。最多支持7层,包括主机在内。
为什么会限制7层?因为USB的信号传输有延迟要求。每经过一个集线器,信号都要重新整形,层数太多,时序就乱了。我曾经在一个工控项目里,为了把传感器拉到20米外,不得不加了一级有源延长线——结果发现设备枚举失败,查了半天,就是层数超了。
个人经验:设计USB设备时,尽量让设备直接连到根集线器或第一级集线器。层数越少,信号质量越好,枚举成功率越高。我见过一个USB转串口模块,插在第三级集线器后面,经常掉线——换到第一级就稳了。
1.3 USB主机与设备角色
USB总线是主从架构。主机(Host)说了算,设备(Device)只能听话。主机负责调度所有数据传输,设备只能被动响应。
你想想看,为什么USB不能像以太网那样对等通信?因为USB设计之初就是为了简化外设连接,让主机统一管理,避免冲突。主机每隔1ms(全速/低速)或125μs(高速)发送一个帧起始包(SOF),所有设备同步到这个时间基准上。
我做过一个USB音频设备,需要实时传输音频流。调试时发现,如果主机负载过高,音频数据包就会延迟,导致声音卡顿。后来通过调整端点描述符的bInterval参数,才把实时性提上来。
| 角色 | 职责 | 典型硬件 |
|---|---|---|
| USB主机 | 管理总线、发起事务、分配地址、供电 | PC、手机(OTG模式)、嵌入式主控 |
| USB设备 | 响应主机请求、报告状态、传输数据 | U盘、鼠标、键盘、摄像头 |
| USB集线器 | 扩展端口、转发信号、检测设备插拔 | USB HUB芯片(如GL850G) |
| OTG设备 | 可切换主机/设备角色 | 手机、平板、嵌入式双角色设备 |
避坑指南:我曾经在一个嵌入式项目中,用STM32做USB主机去读取U盘。结果发现,有些U盘在枚举阶段会请求超过500mA的电流,而我的主机端供电能力只有100mA。设备直接挂死。所以,设计USB主机时,一定要考虑供电能力,尤其是总线供电的设备。
1.4 USB物理连接与电气特性
USB的物理连接,说白了就是四根线:VBUS(电源)、D+(数据正)、D-(数据负)、GND(地)。USB 3.0以上版本多了SSTX/SSRX差分对,但基础还是这四根。
电气特性上,USB使用差分信号传输。D+和D-是一对差分线,电压摆幅约400mV(高速模式)。为什么用差分?抗干扰能力强。我在一个电磁环境恶劣的工厂里测试USB设备,差分信号愣是没丢一个包,换成单端信号早废了。
USB的电源管理也很讲究。VBUS电压标准是5V±5%,设备在上电时不能从VBUS抽取超过100mA的电流,直到被主机配置(Configured)后,才能申请更多电流。最大可申请500mA(USB 2.0)或900mA(USB 3.0)。
| 引脚 | 信号 | 颜色(标准) | 说明 |
|---|---|---|---|
| 1 | VBUS | 红色 | +5V电源,最大500mA(USB 2.0) |
| 2 | D- | 白色 | 数据负端 |
| 3 | D+ | 绿色 | 数据正端 |
| 4 | GND | 黑色 | 地线 |
设备插入时,主机通过检测D+和D-的电平来判断设备速度:
- 低速设备(1.5 Mbps):D-线上拉1.5kΩ电阻到3.3V
- 全速设备(12 Mbps):D+线上拉1.5kΩ电阻到3.3V
- 高速设备(480 Mbps):先以全速模式握手,再切换到高速模式
关键点:上拉电阻是设备告诉主机“我是什么速度”的方式。我调试一个USB键盘时,发现D-的上拉电阻虚焊了,主机一直检测不到设备。用示波器一看,D-电平不对,补焊后立马识别。这种问题,硬件工程师最容易忽略。
线缆长度也有讲究。USB 2.0规定,全速/低速线缆最长5米,高速线缆最长3米。超过这个长度,信号衰减严重,容易丢包。如果需要更长距离,可以用有源延长线或USB转以太网方案。
小技巧:画USB PCB时,D+和D-要等长走线,差分阻抗控制在90Ω±15%。我见过一个工程师把D+和D-走了不同的层,结果信号质量一塌糊涂。记住:差分对要平行走,少打过孔,远离时钟线。