USB 3.0 协议层 包定义
今天来学习一下USB 3.0 协议层的各种包定义
其中burst 和 stream的概念比较多,单独一篇文章介绍了
先过一遍比较基础的内容。
包类型 Packet Types
包类型(Packet Types) 增强型 SuperSpeed USB 使用四种基本包类型,每种类型还包含一个或多个子类型。 这四种包类型分别是:
链路管理包(Link Management Packet,LMP) 仅在一对链路之间传输(例如一对直接相连的端口),主要用于管理该链路。
事务包(Transaction Packet,TP) 跨越从主机到设备的所有直接连接链路,用于控制数据包的传输流、配置设备和集线器等。事务包不携带数据负载。
数据包(Data Packet,DP) 跨越从主机到设备的所有直接连接链路。数据包由两部分组成:数据包头(Data Packet Header,DPH)和数据包负载(Data Packet Payload,DPP)。
等时时间戳包(Isochronous Timestamp Packet,ITP) 以多播形式在所有活动链路上发送。
包格式 Packet Formats
类型字段定义如下:
链路控制字段定义如下
链路管理包 Link Management Packet (LMP)
当包的 Type 字段被设置为“链路管理包(Link Management Packet)”时,该包被称为 LMP。 这些包用于管理单一链路,不携带地址信息,因此不可路由。它们可能是由集线器端口命令产生的。例如,可以通过集线器端口命令设置 U2 空闲超时时间。 此外,LMP 还用于交换端口能力信息,并且可用于测试目的。
LMP包含以下子类:
7种子类包格式如下:
配置链路功能,例如启用/禁用特定链路能力
设置链路进入 U2 低功耗状态前的空闲超时时间
提供厂商特定的测试功能,用于验证或调试设备
交换端口能力信息,如支持速率、功耗等级等
指示对端口的配置操作,例如启用端口或修改参数
对 Port Configuration 的响应,确认配置是否成功
精确时间测量功能,用于链路同步和延迟评估
事务包 Transaction Packet (TP)
TP的八大类如下:
确认收到数据或事务,表示成功完成
表示端点暂时不可用,需要等待 ERDY 再继续传输
指示端点已准备好接收或发送数据,可继续事务
用于控制传输的状态阶段,返回设备处理结果
指示端点出错或挂起,不可继续传输
设备向主机发送异步事件通知,例如插拔或错误事件
主机用于检查端点是否准备好接收下一数据包的控制包
设备对 PING 的响应,确认是否可接收数据包
数据包 Data Packet (DP)
该数据包可以由主机或设备发送。主机使用该数据包向设备发送数据;设备在收到 ACK TP 后使用该数据包向主机返回数据。 所有数据包都由 数据包头(Data Packet Header)和数据包负载(Data Packet Payload)组成。本节仅描述与 ACK TP 不同的字段。
数据包沿主机与设备之间的直接路径传输。需要注意的是,可以发送数据块长度为零的数据包;然而,该数据包仍必须包含 CRC-32 校验。
等时时间戳包 Isochronous Timestamp Packet (ITP)
等时时间戳包(Isochronous Timestamp Packet,ITP) 应在所有处于 U0 状态并已完成端口配置的链路上以多播形式发送。
对于 ITP,Type 字段的取值为 Isochronous Timestamp Packet。ITP 用于将时间戳从主机传送到所有活动设备。ITP 不携带地址或路由信息,由集线器多播到所有处于 U0 状态并已完成端口配置的下行端口。设备不得对 ITP 作出响应。
ITP 用于向设备提供主机的时间信息,以实现同步。需要注意的是,任何设备或集线器都可以接收 ITP。主机只有在根端口链路已处于 U0 状态时,才会在该链路上发送 ITP,且仅主机可以发起 ITP 发送。主机不会为了发送 ITP 而主动将根端口链路切换到 U0 状态。
当根端口链路处于 U0 状态时,主机应在每个总线周期内,于 tTimestampWindow 所规定的总线周期边界时间窗口内发送一个 ITP。主机应在根端口链路从轮询状态进入 U0 状态后的 tIsochronousTimestampStart 时间内开始发送 ITP。
ITP 可以插入在突发传输的包之间发送。如果设备接收到一个在链路控制字中延迟标志(DL)置位的 ITP,则其时间戳值可能存在显著误差,设备可忽略该时间戳。
字段定义如下:
地址三元组 Addressing Triple
数据包和大多数事务包通过三个字段的组合来访问特定的数据流,这三个字段分别是:设备地址(Device Address)、端点号(Endpoint Number) 和 方向(Direction)。
在复位和上电后,设备地址默认值为 0,主机应在枚举过程中将其设置为 1 到 127 范围内的某个值。设备地址 0 被保留为默认地址,不可用于其他用途。
除必需的默认控制端点(端点号为 0)外,设备最多可以支持 15 个 IN 端点 和 15 个 OUT 端点(由 Direction 字段指示)。
路由字符串 Route String Field
路由字符串(Route String) 是下行方向数据包中的一个 20 位字段,集线器利用它将每个数据包路由到指定的下行端口。 它由为到达目标设备所经过的每个集线器的下行端口号(每个端口号占 4 位)按顺序拼接而成。
集线器会使用 Hub Depth 值乘以 4 作为路由字符串的偏移量,从中定位并读取用于确定下行端口号的比特。 Hub Depth 值在枚举过程中被确定,并分配给每一个集线器。注意2.0是广播,不搞这个。七层usb hub,最多5层hub,顶层roothub不算,底层留个device
事务数据包回复 TP or DP Responses
TP/DP 的使用受限于传输类型和方向,不同传输类型(控制、批量、中断、等时)允许的 TP 不一样
事务包序列 TP Sequences
Control Transfers
Bulk Transfers
Interrupt Transactions
Isochronous Transactions
服务周期