这是一篇关于USB通用串行总线的规范解答。这份技术文档在2000年就已经发布。本文档:1~5章是一些信息概述;6~11章详细定义USB的技术信息。 简单总结为下面五个部分:
1995年,由英特尔与微软联合其他几家公司组成USB-IF(USB Implement Forum),共同提出,USB(Universal Serial Bus)通用串行总线协议概念,并推出USB1.1; 2004年,正式推出USB 2.0协议; 2007年,正式推出USB 3.0协议。 第三章里面有个USB应用分类: USB架构 USB系统有三个方面: ①USB主机 主机是可以提供USB接口及接口管理能力的硬件、软件及固件的复合体。USB系统中仅有一个USB主机。 USB 主机在USB体系中负责设备连接/移除的检测、HOST 和设备之间控制流和数据流的管理、传输状态的收集、总线电源的供给。 ②USB设备 设备是包含USB功能设备和USB Hub,最多支持 127个设备。要说这127的由来,还得从一张我们常见拓扑结构图: HOST Root Hub为起点,最多支持7层(Tier)。需要说明的是,Root Hub 是一个特殊的 USB Hub,它集成在主机控制器里,不占用地址。 复合设备(Compound Device)可以占用多个地址。所谓复合设备其实就是把多个功能设备通过内置的 USB Hub 组合而成的设备,比如带录音话筒的 USB 摄像头等。 任何一个USB 系统中最多可以允许5个USB Hub级联,一个复合设备(Compound Device)将同时占据两层或更多的层。 一个 USB HOST 最多可以同时支持 128 个地址,地址 0 作为默认地址,只在设备枚举期间临时使用,而不能被分配给任何一个设备,因此一个 USB HOST 最多可以同时支持 127 个地址,如果一个设备只占用一个地址,那么可最多支持 127个 USB 设备(含USB Hub)。 ③USB互连 物理上的互连可以理解为USB的传输线,在USB 2.0系统中,即为使用屏蔽的双绞线。 USB主机与设备的通信方式,包含四个方面:总线拓扑;层间关系;数据流模型;USB 进程。 讲物理互连,常见就是A,B接口类型: 还有就是线缆(Cable): 高速/全速线缆 电源线:红为VBUS、黑为GND,28~20AWG,不要求绞线; 信号线:白为D-、绿为D+,28AWG,双绞线(每圈间隔60mm-80mm); 排扰线( drain wire ):28AWG镀锡铜线; 镀锡铜编织层:有效区>65%; 屏蔽层必须端接到连接器插头以完成组装。屏蔽层和底盘粘合在一起。用户为 USB 设备选择的接地方案,电缆必须符合公认的行业惯例和监管机构的安全和 EMI/ESD/RFI 标准。 线缆除了上面的一些要求,还有一些指标:
针对全速信号线缆,有<26ns的指标,也可以理解为5.2ns/m,这也就是5M线缆长度的经验值。 USB传输是向下兼容模式,当有全速 (USB 1.1)或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它们。 USB总线上传输数据是以包(packet)为基本单位的,必须把不同的包组织成事务(transaction)才能传输数据。 所有的传输都由主机发起,任何时刻整个USB体系内仅允许一个数据包的传输。 包(Packet)是USB系统中信息传输的基本单元,可以理解为USB 总线上数据传输的最小单位,组成部分为: 不同的包有不同的数据格式,但都以 8 位的 PID 开始。PID 指定了数据包的类型(共 16种)。 令牌包:指定数据包去向或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备作出响应。令牌包即指 PID 为 IN/OUT/SETUP的包。 握手包:表示传输的成功与否。 USB 采用“数据包-令牌包-握手包”的传输机制。 端点(Endpoint):USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持 2 组端点(2 个输入,2 个输出),高速和全速设备最多支持 15 组端点。 管道(Pipe):主机和设备端点之间数据传输的模型,USB 设备通过管道和HOST 通信,共有两种类型的管道:流和信息管道。 任何USB设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。这是一个枚举的过程,USB 设备的即插即用特性即依赖于此。 设备连接->设备上电->主机检测到设备,发出复位(主机通过检测设备在总线的上拉电阻检测到有新的设备连接)->设备默认状态(设备接收到复位信号后,就暂时使用默认地址(00H)来响应主机的命令)->地址分配(分配一个空闲的地址,以后设备就只对该地址进行响应)->读取USB设备描述符(确认USB设备的属性)->设备配置。 这里需要注意的是,如果使用总线供电,设备挂起(空闲>3ms)时,USB设备保留了包括其地址和配置信息在内的所有内部状态,设备的消耗电流不超过500uA。 在默认控制管道上接受并处理以下三种类型的请求:
前面讲了管道和端点,还有接口,这些相互之间是有关系的,见下图:
和其他总线通过内存或I/O访问操作其功能不同,USB 功能的客户端软件可以使用 USB 软件编程接口来操作其功能, USB还有个数据流模式,在 HSOT端,应用软件(Client SW)不能直接访问 USB 总线,而必须通过USB系统软件和USB主机控制器来访问 USB 总线,在 USB总线上和USB 设备进行通讯。 从逻辑上可以分为功能层、设备层和USB总线接口层三个层次:
下图黑色箭头代表真实的数据流,灰色箭头代表逻辑上的通讯。 除了上面的一些,还有传输类型的分类:
主要用于在设备连接时对设备进行枚举以及其他因设备而异的特定操作。 控制传输通过控制管道在应用软件和 Device 的控制端点之间进行,控制传输过程中传输的数据是有格式定义的,USB 设备或主机可根据格式定义解析获得的数据含义,其他传输类型都没有格式定义。
用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。 中断传输是一种轮询的传输方式,是一种单向的传输。 中断传输的延迟有保证,但并非实时传输,它是一种延迟有限的可靠传输,支持错误重传。
用于对延迟要求宽松,游戏手柄等大量数据的可靠传输,如U盘等。 批量传输是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的带宽来完成传输,适合数据量比较大的传输。
用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。 同步传输是一种实时的、不可靠的传输,不支持错误重发机制。只有高速和全速端点支持同步传输。
在主机控制器和 USB Hub 之间还有另外一种传输——分离传输(Split Transaction),它仅在主机控制器和 Hub之间执行,通过分离传输,可以允许全速/低速设备连接到高速主机。分离传输对于USB 设备来说是透明的、不可见的。 说到USB Hub,它提供了一种低成本、低复杂度的USB 接口扩展方法。Hub的上行PORT 面向 HOST,下行 PORT 面向设备(Hub 或功能设备)。在下行 PORT 上,Hub 提供了设备连接检测和设备移除检测的能力,并给各下行PORT供电。 Hub可以单独使能各下行PORT,不同PORT 可以工作不同的速度等级(高速/全速/低速)。 USB Hub由Hub重发器(Hub Repeater)、转发器(Transaction Translator)以及Hub 控制器(Hub Controller)三部分组成。
速率分类:低速(low-speed)1.5Mb/s,全速(full-speed)12Mb/s,高速(high-speed) 480Mb/s。 VBUS支持的+5V电源,为了提供有保证的输入电压电平和适当的终端阻抗,偏置终端用于电缆的每一端。端接也允许检测每个端口的连接和分离并区分高速/全速和低速设备。 识别过程: 全速/低速设备识别很简单,USB采用在D+或D-线上增加上拉电阻的方法来识别低速和全速设备。当USB主机探测到D+/D-线的电压已经接近高电平,而其它的线保持接地时,它就知道全速/低速设备已经连了。 高速设备识别比较复杂,USB一开始将其当作全速设备,设备复位,内部电流源向 D-持续灌 17.78mA 大小的电流,这时D+端的 1.5K上拉电阻还没撤销,两电阻并联约形成45Ω的阻抗,Hub端会有17.78*45≈800mV电压,这便是Chirp K信号。 设备检测到大约6个Chirp K信号,会做出一系列三个动作:①断开 1.5K 的上拉电阻;②连接 D+/D-上的高速终端电阻(high-speed termination),其实就是全速/ 低速差分驱动器;③进入高速状态。 其实在断开1.5K上拉电阻的时候,Chirp 信号幅度降到原来的一半400mv,因为设备端挂载新的终端电阻后,并联原来的终端电阻,结果为 22.5 欧姆,17.78*22.5 ≈ 400mV。 这里需要注意的是,高速设备操作的信号幅值就是 400mv,而不是全速/低速的 3.3V。 一般来说,FS &LS输出的低电平电压0~0.3V;输出高电平电压2.8V~3.6V;HS输出的差分低电平电压-10~+10mV;输出差分高电平电压400mV±10%。 USB数据传输是用高速电流驱动器,一种来自正电源的电流源切换到 D+ 或 D 线以分别发出 J或K信号。有资料会给出,J的标称差分高速电压 (D+/D-) 为 400 mV,K为-400 mV。 低速下:D+为“0”,D-为“1”是为“J”状态,“K”状态相反;全速下:D+为“1”,D-为“0”是为“J”状态,“K”状态相反;高速同全速。当然还有SE0状态和IDLE状态,这里不过多展开。 一般来说,Hub下行端口,必须支持高速、全速和低速;Hub上行端口,必须支持高速、全速,不支持低速;所以上行端口的D-线不允许上拉1.5K。 当然,高速/全速/低速驱动器的特性也是不同的。 低速驱动器:无阻抗要求,连线与device组合电容(200pF<D+/D-<450pF),Cable传播延迟小于18nS。 全速驱动器: 屏蔽的双绞线,差分阻抗90ohm±15%,共模阻抗30±30%,单线最大延迟26ns; 不支持High-speed的,每条线驱动器的阻抗要求28~44ohm; 支持High-speed的,每条线驱动器的阻抗要求40.5~49.5ohm; 高速驱动器和全速驱动器大体相同: 输出驱动器单端阻抗45Ω±10%,差分阻抗90Ω±10%; 下行端口D+或D-下拉15KΩ ±5%电阻到GND; PCB板内走线控制差分阻抗90ohm,延迟可达4ns(长度约20inch以上)。 这个值和实际的设计要求还是有很大差别的。设计规则部分,USB2.0走线长度,直接接终端设备的拓扑情况,最大长度为304.8mm,也就是12inches经验值,这个标准在Type-C也是一样的。 后期在USB4的规范中,会给出相关的损耗标准,以此来管控相关风险。 这里面需要注意的是,USB的时钟与差分数据一起传输、编码。时钟编码方案是带有位填充的 NRZ-I,以确保足够的转换。每个数据包之前都有一个 SYNC 字段,以允许接收器同步它们的恢复时钟。 时钟部分,USB时钟为异步,规范没有给出具体的时钟频率值,只是给出500 ppm指标,这个指标和很多串行信号一样。还有一个DLL技术,这个和PLL差不多。网上资料给出的是48MHz。 编码部分: NRZ-I(No Return Zero-Inverse) 非归零反相编码 在传输中,同步头SYNC为00 01H,15个翻转信号。但是当传输连续的逻辑1位时,NRZ-I编码后,将保持上一次翻转后的状态。这使得接收端无法从中得到同步信号。为此,USB协议规定:如果要发送的数据中出现有连续的6个1,则在进行NRZI编码前,在这6个连续的1后面会插入1个0,然后再进行NRZI编码。接收端收到连续6个1,将自动去掉后面的1个0。从而恢复原数据。包数据传送多个1的处理。这样就使得USB通信的接收同步更加可靠。 高速模式下,信号要满足相关的时序和幅值要求。 下图为4个测试点。TP1 和 TP4 是其中的点,收发器 IC 引脚分别焊接到集线器和设备电路板上。TP2在配对引脚A连接器的TP3位于B连接器的配对引脚上(或者,在有电缆的情况下,其中电缆连接到电路板)。 眼图模式有6种模板,对应不同的标准: 图片来源于网络,侵删 IR Drop电压跌落测试 电压降标准: · 大功率集线器端口提供的电压为 4.75 V 至 5.25 V。 · 低功率集线器端口提供的电压为 4.4 V 至 5.25 V。 · 上游和下游之间所有电缆在GND上的最大电压降为 125 mV 。 · 所有集线器和功能必须能够以低至 4.40 V 的电压提供配置信息。 · 需要一个以上单位负载的功能必须在最低输入电压为 4.75 V 的情况下运行。 记得之前设计的难点,就是在子卡上实现USB3.0功能,而连接就是FPC线缆,这个压降要求的实现比较难。 但这里给出一个新的思考点:就是上下游电缆GND上的最大电压降为 125 mV。对这点管控,还是蛮感兴趣的。 在做Drop 测试,还有一个知识点需要注意: USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下,USB2.0设备最多可以获得500mA的电流;后期USB3.0给出的是1A电流。 还有一个是Droop测试,测试下行接口插拔瞬间的供电能力,通常外设插拔瞬间可能会有很大的冲击电流,可能理解为交流的测试。Drop测试可以理解为直流测试。 参考文档: Universal Serial Bus Specification https://blog.csdn.net/batoom/article/details/7353336 https://blog.csdn.net/luoguoxian12/article/details/85261222 https://www.jianshu.com/p/331d51b2c9dd |
|