USB3.2 摘录(三)(上)

简介: USB3.2 摘录(三)

8 协议层(Protocol Layer)

    协议层管理 Host 和 Device 间 end-to-end 数据流,是建立在链路层正确传输基础上的。本章详细描述:

  • 包类型;(LMP,DP,TP,ITP)
  • 包格式;
  • 包期待的响应;
  • 四种 transaction 类型

8.1 超速事务处理

   随着向设备端点请求或者发送数据,主机开始超速事务处理。随着端点发送数据或者对接收数据应答完成事务处理。在超速总线上的一次传输是一次从设备到主机的数据请求,然后将其分解为一次或者几次突发事务处理。当超速主机在等待当前总线事务完成的时候,它可能会开始一次或多次 OUT 总线事务输出到一个或几个端点。然而,超速主机不应该开始另外一次对端点的 IN 总线事务,直到主机:(同时能进行多个 OUT 事务,只能进行一个 IN 事务)


   对于非同步终端点:

  1. 接收所有请求的数据包 (DP) 或
  2. 收到一个短数据包或
  3. 接收设置了 EOB 标志的 DP。或
  4. 接收 NRDYSTALL 事务数据包 (TP) 或
  5. 当前 ACK TP 的事务超时

    对于同步端点:

  1. 接收所有请求的 DP 或
  1. 收到一个短数据包或
  2. 接收设置了最后一个数据包标志字段的 DP 或。
  3. 当前 ACK TP 的事务超时

    对于非同步传输,端点可以通过下面应答有效的事务处理:

  • 返回一个 NRDYTP


  • OUT 事务中通过返回一个 ACKTP(正确应答)包接收数据
  • IN 事务中返回一个或更多数据包
  • 如果发生了内部端点错误,则返回一个 STALLTP

   一个 NRDYTP 包应指示端点还没有准备好接收或发送数据。因此,设备端点和主机之间不应该有更多进一步操作,除非端点通知主机它准备好了。允许在设备和主机之间实现一个链路降低功耗状态,直到端点准备好接受或发送数据。当准备好时,端点异步发送一个通知(ERDYTP)给主机,告知它现在准备好移动数据,主机通过重新安排请求事务进行应答(返回 ACKTP ?)。注意当它们被主机进行周期性轮询服务时,同步传输不使用 ERDY 和 NRDYTP 包。此外,发送到或者接收自同步端点的数据包不被应答(同步传输不检测错误,不应答错误)。也就是 ACKTP 包不被主机发送给同步端点来应答对数据包的接收。(如果同步端点不能发送给主机要求的数据则发送一个长度为 0 的数据包)


   端点只对主机的要求做应答。主机是负责在总线上安排事务处理,保证数据传输的正确与公平,这通过 IN 和 OUT 请求的命令和时序来实现。事务处理不是广播的(USB2.0 是广播),在主机和设备间的包传输是有一条直接路径。任何没有使用的链路都会进入降低功耗状态,使得总线遵从强制的电源管理。

8.2 包类型:

    LMP(Link Management Packet),TP(Transaction Packet),DP(Data Packet),ITP(lsochronous Timestamp Packet) 四种。


   去掉链路层 4 字节的头包帧(Header Packet Framing),剩下 16 字节。


   所有的包有一个14 字节的头,结尾跟着一个 2 字节的链路控制字组成(16 byte)。所有的包头都有两个需要被接收方使用的公共域(版本与类型),用来决定怎样处理包,所有的包头包含一个 2 字节 CRC-16 。包头有一个不可改变的错误率,它为 1012 个位中不能出现一个错误。


   所有的设备(包括集线器)和主机使用他们收到的 LMP 包。集线器额外负责将 DP,ITP,TP 传递到连接设备的下游端口和连接主机的上游端口。注意 ITP 只能被主机发送和被设备接收(广播)。LMP 所有的包都被集线器传递出去,除非包是路由选择集线器它自己。传递 ITP 包额外的规则在 8.7 被描述。注意 TP ,ITP 或者 DPH 中的链路控制字(比如 DF 域)在被传递出去之前可以被集线器更改。链路控制字的域在 8.3.1.2 被描述。


   如果 Type 域的值是 TP 或者 DPH ,路由信息(字符)和设备地址域就跟在 Type 域后。路由信息是被集线器用来路由选择上游端口的包传递到正确的下游端口。从设备到主机的包组成的流总是从集线器的下游端口通过路由选择传到上游端口。设备地址域被提供给主机用来验证一个包的源头。所有的其他域在这章会被描述。

    数据包的头部包含了用来描述数据块的额外信息。数据块(DPP)总是被跟着一个 4 字节 CRC-32 用来判定数据的正确性。数据块和 CRC-32 一同组成了数据负载包 DPP

8.3 包格式(Packet Formats)

   这个区域定义了超速包。它定义了组成各种包类型和子类型的区域。


   这个区域的包类型和位定义以未编码数据格式呈现。添加到串流上的符号有影响(即帧包,控制或修改链路),像位编码,链路层帧,为了精简讲述,已经被移除了它们对协议层是不可见的)。详细参考 6,7 章信息。在总线操作,效率或者时序讨论到的地方,会描述那些底层操作对提供额外内容的影响。

8.3.1 所有头的公共区域(Fields Common to all Headers)

    所有超速头以 Type 开始用来决定怎样处理包。在高层次上,这告诉数据包的接收者如何处理它:要么使用它来管理链路(LMP),要么移动和控制设备和主机之间的数据流(TP)。

8.3.1.1 保留值和保留区域处理

   保留区域和保留值不应该用在一个商家指定操作中。


   发送器应该设置所有保留域为 0 ,接收器应该忽略任何保留值。发送器不应该设置已定义域为保留值,接收器应该忽略任何在定义域上设置保留值的注意,接收器应该应答包,返回 credit 作为每一个在 7.2.4.1 章指定的要求

8.3.1.2 类型域

    类型域是一个 5 位区域,用来确认包格式。类型用来决定怎样使用包或被中间链路

传送。

8.3.1.4 链接控制字

    链接控制字的使用在第 7.2.1.1.3 节中定义。

8.4 链路管理包(LMP,Link Management Packet)

    LMP 是指类型域被设置为链路管理包的包。这些包用来管理单个链路,它们没有带有寻址信息和路由信息。可以是由集线器端口命令产生。例如,集线器端口命令用来设置 U2 非活动超时。除此之外,它们用来交换端口属性信息和测试目的。

    格式如图 8-4 所示:

    可以看到,结构上就是第七章中的头包结构(从协议层角度看包格式,屏蔽了 HPSTART 序列以及 8b/10b 转换码等物理层的特性)。

8.4.1 子类型域(Subtype Field)

    SubType4 bit,表示了是何种类型的 LMP

    SubType Specific 则是根据不同的 SubType 有不同的含义。规范对每种 LMP 意义和格式做了详细解释。

8.4.2 Set Link Function 设置链路功能

   设置链路功能 LMP 应该用来配置没有停留在活动(U0)状态中能被改变的功能。


   在接收到带 Force_LinkPM_Accept 位声称的 LMP 时,端口应该接受所有的 LGO_U1 和 LGO_U2 链路命令,除非端口收到一个带有 Force_LinkPM_Accept 位撤销声称的 LMP 。


   注意:Force_LinkPM_Accept 功能不正确的使用会严重影响链路的使用性能。这个性能应该只用来进行符合性测试目的。软件必须确保发送 SetPortFeature 命令产生 LGO_U1 or LGO_U2 链路命令之前,链路层没有等待的包。


   当集线器收到一条 SetPortFeature(FORCE_LINKPM_ACCEPT)命令时,这个 LMP 被 10.4.2.2 和 10.4.2.9 详细描述了。

8.4.3 U2 非活动超时(U2 Inactivity Timeout )

    如果 U1 lnactivity Timeout 已经不使能了,U2 Inactivity Timeout LMP 应被用来定义从 U1 转到 U2 时的超时时间,或者从 U0 转到 U2 的超时时间。具体细节见 Section 10.4.2.1.

8.4.4 商家设备测试(Vendor Device Test)

    使用这种LMP是为了商家指定的设备测试,不应该在正常操作链路下使用:

8.4.5 端口属性(Port Capabilities )

    端口属性 LMP 描述了每个端口链路属性,它在成功完成了链路训练和初始化之后被两个链路伙伴互相发送。所有端口应该在完成了链路初始化之后,在 tPortConfiguration 时间内发送这个 LMP

    如果一个链路伙伴在 tPortConfguration 时间内没接收到这种 LMP,那么:

  • 如果链路伙伴有下游属性,它应该发送一个在 Section10.14.2.6 中描述的错误
  • 如果链路伙伴只支持上游属性,那么上游端口应该转变成 Ss.Disabled,它应该尝试用这个设备支持的其他速度连接。

    Tiebreaker:只有当 Direction 域的 bit0bit1 都置位时,此域值才有效。此域值用来决定都可配置为上游和下游端口的两个设备哪个作为上游,哪个作为下游端口。在其他情况,此域值为 0 。

    在交换端口属性 LMPs 以后,链路伙伴应该决定哪个链路伙伴应该被配置成在 Table8-8 中指定的下游端点;


   注意:如果 TieBreaker 域内容相等,那么两个链路伙伴应该再次以新的不同 TieBreaker 域值交换端口属性 LMPs 。TieBreaker 域值序列被端口随机产生。当 TieBreake 值不相同时,较高值(1)的端口为下游端口;较低值(0)的端口为上端口。

8.4.6 端口配置(Port Configuration)

    由下游端口发送给上游端口。

    本部分仅介绍与 Port Capability LMP 不同的字段。

    所有支持下游端口属性的超速端口应该能发送这种 LMP

    如果要在上游模式中被配置的端口在链路初始化后 tPortConfiguration 时间内没接收到这种 LMP ,那么上游端口应该转变成 ss.Disabled,并且外围设备应尝试以此设备支持的其他速度进行连接。

    在下游模式下被配置的端口应该发送端口配置 LMP 给上游端口。发送这种 LMP 的端口应该为 Link Speed 域只选择一位。

    如果一个下游属性端口不能和它的链路伙伴工作,那么下游属性端口应该发送一个在 Section

10.14.2.6 描述的错误信号。

8.4.7 端口配置应答(Port Configuration Response)

    由上游端口发送给下游端口作为端口配置的应答。

    这种 LMP 被上游端口发送作为一个端口配置的应答。它被用来指示端口配置 LMP 的接收与拒绝。只有与端口属性 LMP 不同的域被描述:

    所有支持上游端口属性的超速端口应该能发送这种 LMP 。如果下游端口在端口配置时间内没接收到 LMP,它应该发送在 Section 10.14.2.6 中描述的一个错误。

    如果应答码指示链路速度被上游端口拒绝,那么下游端口应该发送一个在 Section10.14.2.6 中描述的错误信号。

8.4.8 精密时间测量(Precision Time Measurement)

   PTM 提供了一种精确表征链路延迟和通过集线器的传播延迟的方法,使 USB 设备能够具有更精确的时间概念。PTM 功能是由软件通过第 9.6.2.6 节中描述的 PTM 功能描述符发现的。


   精确时间测量由两个独立的机制组成:链路延迟测量 (LDM,Link Delay Measurement) 和集线器延迟测量 (HDM,Hub Delay Measurement)。这些机制相辅相成,为设备提供高精度的总线间隔边界定时;但是,即使 LDM 时序信息不可用,HDM 也可用于提高器件总线间隔边界时序精度。


   SuperSpeedPlus 主机和集线器应支持 PTM。PTM 支持是可选的,适用于所有外围设备,并且仅适用于 SuperSpeed 主机和集线器。理想情况下,USB 拓扑的所有组件都支持 PTM ;但是,支持 PTM 的集线器仍将提高设备总线间隔边界定时概念的整体精度。

USB3.2 摘录(三)(下): https://developer.aliyun.com/article/1598608

目录
相关文章
|
7月前
|
Linux API SoC
设备树知识小全(十一):OF是什么?
设备树知识小全(十一):OF是什么?
156 0
|
4月前
|
存储 缓存 算法
USB3.2 摘录(一)(下)
USB3.2 摘录(一)
58 12
|
4月前
USB3.2 摘录(五)(下)
USB3.2 摘录(五)
52 1
|
4月前
|
机器学习/深度学习 流计算
USB3.2 摘录(五)(上)
USB3.2 摘录(五)
76 1
|
4月前
|
缓存
USB3.2 摘录(一)(上)
USB3.2 摘录(一)
68 0
USB3.2 摘录(一)(上)
|
4月前
|
安全 索引
USB3.2 摘录(11)
USB3.2 摘录(11)
58 1
|
4月前
USB3.2 摘录(八)
USB3.2 摘录(八)
54 2
|
4月前
|
存储 算法
USB3.2 摘录(10)
USB3.2 摘录(10)
64 1
|
4月前
|
存储 运维
USB3.2 摘录(七)
USB3.2 摘录(七)
55 1
|
4月前
|
存储 算法
USB3.2 摘录(九)
USB3.2 摘录(九)
50 1