一、USB协议概述:从USB 1.0到USB4的演进之路
大家好,我是老张。做嵌入式这些年,USB协议是我打交道最多的接口之一。说实话,刚入行那会儿,我也被USB的各种版本搞得头晕。今天咱们就从头捋一捋,把USB的来龙去脉说清楚。
1.1 USB的发展历史
USB这玩意儿,最早是1994年Intel、微软、IBM等几家公司搞出来的。为啥要搞它?说白了,就是电脑屁股后面的接口太乱了——串口、并口、PS/2、游戏口...插个外设得先看接口对不对得上。
USB 1.0/1.1(1996-1998):这是开山鼻祖。速度只有1.5Mbps(低速)和12Mbps(全速)。我记得第一次用USB鼠标,那感觉确实比PS/2方便多了。不过那时候驱动问题一堆,经常插上去没反应。
USB 2.0(2000年):这是个里程碑。速度飙到480Mbps,也就是高速模式。我当年做MP3播放器,用的就是USB 2.0,传一首歌几秒钟搞定。这个版本生命力极强,到现在很多设备还在用。
USB 3.0/3.1/3.2(2008-2017):速度从5Gbps一路干到20Gbps。这里有个坑——USB 3.0改名叫USB 3.1 Gen1,后来又改叫USB 3.2 Gen1,把很多人都搞懵了。我建议你直接看速度:5Gbps就是原来的3.0,10Gbps是3.1 Gen2,20Gbps是3.2 Gen2×2。
USB4(2019年):基于Intel的Thunderbolt 3协议,速度最高40Gbps。它最大的变化是强制要求USB-C接口,并且支持PCIe和DisplayPort隧道传输。
核心要点:USB版本向下兼容,但速度受限于最慢的那一端。你拿USB 3.0的U盘插USB 2.0的口,只能跑480Mbps。
1.2 USB物理层特性:D+/D-差分信号
USB用两根线传数据,就是D+和D-。为什么用两根?因为它是差分信号。啥意思呢?就是数据不是靠单根线的电压高低来表示,而是靠两根线的电压差。
举个例子:D+比D-高200mV以上,代表逻辑"1";反过来D-比D+高,代表逻辑"0"。这样做的好处很明显——抗干扰能力强。外界噪声对两根线的影响差不多,一减就抵消了。
我在项目中遇到过一个问题:USB线长了点,信号就出错了。后来发现是差分阻抗没控制好。USB要求差分阻抗是90Ω±15%,布线的时候一定要算清楚。
| USB速度模式 | 信号速率 | 驱动电压 | 线长限制 |
|---|---|---|---|
| 低速(1.5Mbps) | 1.5 Mbps | 3.3V | 5m |
| 全速(12Mbps) | 12 Mbps | 3.3V | 5m |
| 高速(480Mbps) | 480 Mbps | 400mV | 5m |
| 超高速(5Gbps+) | 5 Gbps | 1V(摆幅) | 3m |
避坑指南:我曾经因为D+/D-走线不等长,导致信号时序出问题。记住,差分对的两根线长度差不要超过5mm,而且要走同一层,中间不要打过孔。
1.3 USB拓扑结构:Host、Hub、Device
USB的拓扑结构是星型,但又不是简单的星型。它只有一个Host(主机),下面可以挂Hub(集线器),Hub下面再挂Device(设备)。最多支持7层,包括Host在内。
Host(主机):负责管理整个USB总线。它发起所有通信,设备只能被动响应。PC上的USB控制器就是Host。我刚开始做USB设备时,总想着设备能不能主动发数据给主机?不行!设备必须等主机来问。
Hub(集线器):负责扩展端口。它会把Host的请求广播到所有下游端口,然后把设备的响应汇总回去。Hub还负责检测设备插拔、管理电源。嗯,这里要注意:Hub本身也是一个USB设备,它也需要地址。
Device(设备):就是咱们用的U盘、鼠标、键盘这些。每个设备有一个唯一的地址,由Host在枚举时分配。设备不能主动说话,只能回答Host的问题。
重要提醒:USB拓扑中不允许出现环路!也就是说,你不能把两个Hub的端口互相连起来。这会造成总线冲突,Host会直接复位总线。
你想想看,这个拓扑结构其实挺巧妙的。Host不需要知道设备具体在哪,它只管发命令。Hub负责转发,设备只管应答。这样设计,插拔设备时其他设备不受影响。
我个人习惯在画原理图时,先标清楚每个USB端口的角色。是Host还是Device?是上行口还是下行口?搞反了可就麻烦了。我曾经见过有人把两个Host口直接连起来,结果两边都试图枚举对方,总线直接挂掉。
好了,USB协议的基础框架就这些。记住三个关键词:版本向下兼容、差分信号抗干扰、星型拓扑主从通信。这些是理解后面热插拔和LTSSM状态机的基础。
本章小结:USB从1.0到USB4,速度提升了上万倍,但核心思想没变——简单、通用、即插即用。物理层用差分信号保证可靠性,拓扑上用Host-Hub-Device的星型结构管理设备。这些基础知识,做USB开发的人必须烂熟于心。