笔者来聊聊USB协议的理解.
是一个外部总线标准,用于规范主机和外部设备的连接和通讯。
| USB版本 | 理论带宽(理论速度) | 编码方式 | 速率称号 | 最大输出电流 | 推出时间 |
|---|---|---|---|---|---|
| USB1.0 | 1.5Mbps(153LB/s) | 8b/10b | 低速 (Low-Speed) | 5V/500mA | 1996年 |
| USB1.1 | 12Mbps(1.2MB/s) | 8b/10b | 全速 (Full-Speed) | 5V/500mA | 1998年 |
| USB2.0 | 480Mbps(48M/s) | 8b/10b | 高速(High-Speed) | 5V/500mA | 2000年 |
| USB3.0 | 5Gbps(512M/s) | 8b/10b | 超速(Super-Speed) | 5V/900mA | 2008年 |
| USB3.1 | 10Gbps(1.21GB/s) | 128b/132b | 超速+(Super-Speed) | 5V/3000mA | 2013年 |
| USB3.2 | 20Gbps(2.42GB/s) | 128b/132b | 超速+(Super-Speed | 5V/3000mA | 2017年 |
说明:
USB 3.2是USB协议的一个版本,它引入了多通道技术,可以通过同时使用两个5 Gbps或10 Gbps通道来实现传输速度的增加。具体而言,USB 3.2规范定义了以下三种速度级别:
下图依次为Mini-USB、Micro-USB、USB TypeA、USB TypeB、USBTypeC





2.0之前是只有4根线,差分信号,抗干扰信号,但是不支持全双工。

| 引脚 | 颜色 | 描述 |
|---|---|---|
| VBus | 红色 | 电源 |
| D- | 白色 | 数据线 |
| D+ | 绿色 | 数据线 |
| GND | 黑色 | 电源地 |
3.0之后变成了9根线,D+、D-,支持2.0之前的协议数据,增加的TX+、TX-、RX+、RX-,可以支持全双工通信,且是差分信号。有点像422和485。

| 引脚 | 颜色 | 描述 |
|---|---|---|
| VBus | 红色 | 电源 |
| D- | 白色 | 数据线 |
| D+ | 绿色 | 数据线 |
| SSTX+ | 蓝色 | 高速数据 |
| SSTX- | 黄色 | 高速数据 |
| GND_DRAIN | 信号地 | |
| SSRX+ | 紫色 | 高速数据 |
| SSRX- | 橙色 | 高速数据 |
| GND | 黑色 | 电源地 |
A链接器和B链接器 TX+与RX+链接。
8b/10b编码,不做具体说明。
链路层:进行链路连接,保证双端链路稳定,可以正常通信。
传输方式:小端模式

链路层包格式:20个Byte组成,由包头帧、包头和链路控制字组成。

链路控制字:头部序列数字,hub 深度,Delayed bit(延迟位),Deferred bit(推迟位)
Delayed bit通常用于同步数据包的传输。它在数据包的头部中,用于指示接收方是否应该等待一段时间再开始接收数据包的DF(Data Field)字段。当发送方发送一个数据包时,如果接收方无法立即准备好接收数据,则可以将Delayed bit置为1,这将告诉发送方需要延迟一段时间再发送数据。在接收方准备好接收数据后,可以向发送方发出ACK信号,以指示可以开始传输数据。
Deferred bit通常用于控制数据包的优先级。在USB总线上,多个设备可能同时请求访问主机,因此必须使用一些机制来确定哪个设备具有更高的优先级并可以获得访问权。在这种情况下,可以使用Deferred bit来指示数据包的优先级。当设备发送一个数据包时,如果其Deferred bit被置为1,则表示它暂时放弃了对总线的访问权,并将让其他设备先进行数据传输。
hub index 总共有3位,最大为7,则不超过7级深度,直连深度则为0。集线器深度对于USB系统的性能和可靠性非常重要。每个集线器级别都会引入延迟和信号损失,因此过多的集线器深度可能会导致性能下降和通信问题。USB规范对集线器的级数有限制,通常建议不超过5级。

数据包结构:最大1024Byte,4位CRC校验。

例如下图,Host读取8K数据,Device端每次返回1024Byte,多次拆分数据并返回数据。序列号一直递增(增长到255然后归0)。同时有ACK响应。

链路训练和状态机(LTSSM):链路链接和链接电源管理的状态机。包括四个状态链接:U0,U1,U2和U3。
U0:链路空闲或者数据正在传输状态,属于正常状态,超速链接使能。
U1:低功耗链接状态,空闲状态,没有数据包传输,超速链接禁止来节约电能
U2:也是低功耗状态,空闲状态,没有数据包传输,相对U1,U2更深层次的节约电能,但是延迟退出,U1快速退出
U3:链路挂起状态,有可能会节约电能。

其次,有四种链路状态,Rx检测、轮询、恢复和热重置,这些都是为链路初始化和训练而引入的。
RxDetect表示初始通电链路状态,其目的是确定超高速链路伙伴是否存在。在检测到增强型超高速链路伙伴的存在后,将启动链路训练过程。
轮询是一种链路状态,它是为两个链路伙伴定义的,以使其增强型超高速发射机和接收机经过训练、同步,并为数据包传输做好准备。
恢复是为重新培训定义的链接状态当两个链路伙伴退出低功率链路状态时或者当链路伙伴已经检测到链路没有正确地在U0中操作并且链路需要重新训练时,或者当链路伙伴决定改变链路操作的模式时。
热重置是一种定义为允许下游端口重置其上游端口的状态
环回和顺应模式,用于误码测试和发送测试。
定义了另外两个链接状态。eSS Inactive的是一种链路错误状态,其中链路处于不可操作状态并且需要软件干预。
eSS Disabled是一种链路状态,其中Enhanced SuperSpeed连接被禁用,并且链路可以在USB 2.0模式下运行

协议层管理设备与其主机之间的端到端数据流。该层建立在这样的假设之上,即链路层保证报头分组的传递,然后该层根据传输类型增加了其余分组的端到端可靠性。
USB3.0协议之后才有的如下各自包:
主要的包格式有:LMP(链路层管理包)、TP(事务包)、时间戳同步包(ITP)和数据包(DP)
LMP(链路层管理包):一段链路之间传输,用来管理链路,单个链路之间,不带地址,不能路由。
TP(事务包):遍历主机所有直接设备的所有链接。它们用于控制数据流、配置和集线器等。事务数据包没有数据内容。
数据包(DP):遍历主机所有直接设备的所有链接。数据包有两个部分,数据包Header和数据包内容。
时间戳同步包(ITP):同步时间。

LMP(链路层管理包):通过LMP在两个连接设备之间交换端口特性信息。该信息包括但不限于可接受的电压范围、电流需求、传输速率等,以确保连接的稳定性和可靠性。


TP(事务包):遍历主机和设备之间的直接路径,控制数据流和管理端到端连接
| 类型 | 描述 |
|---|---|
| ACK | 对于 IN 端点,主机发送此TP以向设备请求数据以及确认先前接收到的数据包。对于 OUT 端点,该TP由设备发送以确认接收到主机发送的前一个数据包,并通知主机在收到此包后它可用的数据包缓冲区的数量。 |
| NRDY | 此 TP 只能由非同步端点的设备发送。 如果 OUT 端点 没有可用的数据包缓冲区空间来接受主机发送的 DP,则该端点会将此 TP 发送到 主机。 如果IN 端点无法返回 DP 以响应主机发送的 ACK TP,则 IN 端点会将此 TP 发送给主机 |
| ERDY | 此 TP 只能由非同步端点的设备发送。 它用于通知主机端点已准备好发送或接收数据包。 |
| STATUS | 此 TP 只能由主机发送。 它用于通知控制端点主机已启动控制传输的状态阶段 |
| ping | 此TP只能由主机发送,它被主机用来在传输之前将到设备的路径中的所有链路转换回U0。 |
例如ACK包。

TT:四种传输类型。

Seq Number:序列号,最大32。

Device Address:设备地址,7bit,最大128个设备。

数据包(DP):数据头包和内容包。头部当中的Length指明了内容Byte的个数。


可以看到subType,Port Capability、Port Config。

| 图一 |

| 图二 |


| 图三 |


| 图四 |

| 图五 |
待续