7 链路层(Link Layer)
增强型 SuperSpeed USB 包括基于 Gen 1x1 操作的 SuperSpeed USB 和基于 Gen 2 操作(Gen 2x1 或 Gen 2x2)或 Gen 1x2 操作的 SuperSpeedPlus USB。增强型 SuperSpeed USB 的链路层负责维护链路连接,以确保两个链路伙伴之间的数据传输成功。根据数据包和链路命令定义了鲁棒的链路流控制。数据包在链路层中准备,用于在主机和设备之间传输数据和不同的信息。链路命令是为两个链路伙伴之间的通信定义的。此外,还构造了数据包帧有序集和链路命令有序集,使它们能够容忍一个符号错误。此外,错误检测功能还集成到数据包和链接命令中,以验证数据包和链接命令的完整性。
7.1 字节顺序
包或者链路命令中的多字节域以小端顺序通过总线传输。即先传输最低有效字节(LSB)最后传输最高有效字节(MSB)。Figure7-2 展示了字节顺序的例子:
7.2 链路管理和流量控制
7.2.1 包和包帧(Packets and Packet Framing)
超速使用包来传输信息。链路电源管理包、事务包、同步时间戳包和数据包的详细包格式在第 8.2 章定义。在协议层,头包是不可见的。
7.2.1.1 头包结构(Header Packet Structure)
所有头包有 20 符号长度,格式在 Figure7-3 中。包括有 LMPs(Link Management Packet),TPs(Transaction Packet),ITPs(lsochronous Timestamp Packet),和 DPHs(Data Packet Header)。头包由三个部分组成,一个头包帧,一个包头,一个链路控制字。
Gen2 非延迟 DPH 包不一样。
7.2.1.1.1 头包帧(Header Packet Framing)
头包帧,HPSTART(header)顺序集,是一个 4 个基于 K 标志的有序集合头包起始帧。被定义为 3 个连续的 SHP 标志后面跟着一个 K-symbol 的 EPF。一个头包应该总是以 HPSTART 序列集开始。头包帧的结构是能容忍 1 个符号错误的。
7.2.1.1.2 数据包包头(Packet Header)
一个包头由 14 个字节组成,格式如 Figure 7-4 所示。它包括 12 字节的头信息和一个 2 字节的 CRC-16 。CRC-16 用来保护 12 字节的头信息的数据完整性。
7.2.1.1.3 链接控制字
2 字节链接控制字的格式如图 7-7 所示。它既用于链路级控制,也用于端到端流量控制。
在 SuperSpeed 操作中,链路控制字应包含一个 3 位头序列号、3 位保留、一个 3 位集线器深度索引、一个延迟位 (DL,Delayed)、一个延迟位 (DF,Deferred) 和一个 5 位 CRC-5。在 SuperSpeedPlus 操作中,链路控制字应包含一个 4 位头序列号、2 位保留值、一个 3 位集线器深度索引、一个延迟位 (DL)、一个延迟位 (DF) 和一个 5 位 CRC-5。
7.2.1.2 数据包结构(Data Packet Payload Structure)
数据包是一种由数据包头(DPH,Data Packet Header)和一个数据负载包(DPP,Data Packet Payload)组成的特别包。DPH 定义在 7.2.1.1.章。另外一方面,DPP 由数据包帧和可变长度的数据构成,可变长度数据后面跟着 CRC-32 。Figure 7-8 描述了 DPP 格式。
7.2.1.2.1 数据包帧(Data Packet Payload Framing)
DPP(Data Packet Payload) 帧由 8 个 K-symbols,一个作为 DPP 起始帧的 four-symbol 有序集和作为 DPP 结束帧的 four-symbol 有序集构成。正如 Figure7-8 所表示的,作为 DPP 起始帧的 DPPSTART 序列集,由三个连续的 SDP 的 K-symbols 和后面跟着的一个 EPF 的 K-symbol 组成。一个 DPP 结束帧序列集有两种不同类型。第一种类型,DPPEND 序列集,它是个由三个连续的 K-symbol Of END 和后面跟着的单个 K-symbol of EPF 组成的结束帧有序集。第二种类型,DPPABORT 序列集,是一个 DPP(未完成)终止帧序列集,它由 3 个连续的 K-symbol of EDB 和后面跟着的单个 K-symbol Of EPF 组成。DPPEND 序列集是用来指示完成了的 DPP 的正常结束,而 DPPABORT 序列集用来指示一个 DPP 的半途终止结束。
7.2.1.2.2 数据包(Data Packet Payload)
DPP 区域有 0-1024 字节的数据,后面跟着 4 字节的 CRC-32。任何一个 DPP 包提前结束应该包含一个 DPPABORT 有序集。DPP 应该快速无缝的跟着它相对应的 DPH 。
7.2.1.2.3 在数据包头(DPH)域数据负载包(DPP)之间的空间间隙
Data Payload Structure and Spacing between DPH and DPP。
在数据包头(DPH)域数据负载包(DPP)之间不应该有空间间隙,如 Figure 7-10 所示:
头包由共 20 个字节,四个字节的 HPSTART 序列集,14 个字节的包头(Packet Header),2 个字节的链路控制字构成。HPSTART 似乎是用于链路双方数据时钟恢复同步用途,类似于 USB2.0 时的 SYNC(同步序列);PacketHeader 则包含 12 个字节的包信息和 2 个字节的 16 位 CRC;Link Control Word 为 2 个 byte , 包括 3 bit Header Sequence Number, 3 bit reserved,3 bit Hub Depth Index,1 bit Delayed bit,1bit Deferred bit,和 5bit CRC。在第八章将会看到,LMP,TP,ITP,DPH 其实都是头包结构,只不过 12byte 的包信息定义了不同的格式意义
数据包构造:
数据包其实是由一个数据包头(DataPacket Header,DPH)后面无缝跟着一个数据负载包(Data Packet Payload,DPP)构成的。DPH 的结构同上面的头包结构,DPP 的结构如图 7-8 所示:
DPP 由四个字节的 DPPSTART(类似头包中的 HPSTART),0~1024 字节的数据,四个字节的 32 位 CRC,以及四个字节的 DPPEND(作用类似于 USB2.0 的 EOP? 在数据有异常的时候这个将是 DPPABORT)构成。
7.2.2 电源管理
Ux 代表了 USB3.0 的四种电力管理状态。
- U0 – 正常运作状态
- U1 – 待机与快速恢复
- U2 – 待机与缓慢恢复
- U3 – 休眠模式(Suspend)