文章目录
- 1 简介
- 2 原子消息序列图(AMS)
- 2.1 介绍
- 2.1.1 Basic Message Exchange(基本信息交换)
- 2.1.2 Errors in Basic Message flow(基本消息流中的错误)
- 2.1.3 原子消息序列
- 2.1.3.1 AMS: Power Negotiation (SPR)
- 2.1.3.2 AMS: Power Negotiation (EPR)
- 2.1.3.3 AMS: Unsupported Message
- 2.1.3.4 AMS: Soft Reset
- 2.1.3.5 AMS: Data Reset
- 2.1.3.6 AMS: Power Role Swap
- 2.1.3.7 AMS: Fast Role Swap
- 2.1.3.8 AMS: Data Role Swap
- 2.1.3.9 AMS: VCONN Swap
- 2.1.3.10 AMS: Alert
- 2.1.3.11 AMS: Status
- 2.1.3.12 AMS: Source/Sink Capabilities (SPR)
- 2.1.3.13 AMS: Source/Sink Capabilities (EPR)
- 2.1.3.14 AMS: Extended Capabilities
- 2.2 电源协商(Power Negotiation)
- 其他状态图可以参考USB官网文档
1 简介
每个端口有一个策略引擎实例与设备策略管理器交互,以便为该特定端口实现当前本地策略。本节包括:
- 各种操作的消息序列。
- 包括Source、Sink和电缆插头操作的状态图。
2 原子消息序列图(AMS)
2.1 介绍
设备策略引擎基于预期的消息序列和当前本地策略来驱动消息序列和响应。
AMS应定义为以PE_SRC_Ready、PE_SNK_Ready或PE_CBL_Ready状态开始和/或结束的消息序列(见第8.3.3.2节“策略引擎源端口状态图”、第8.3.3.3节“策略发动机接收端口状态图“和第8.3.3.26节“电缆插头特定状态图”)。
此外,第8.3.3.24.3节中规定的电缆插头发现顺序应定义为AMS。
当AMS进入/退出PE_SRC_Ready或PE_SNK_Ready时,Source和Sink向协议层指示AMS何时开始和结束(参见第8.3.3.2节“策略引擎Source Port State Diagram”和第8.3.3.3节“策略发动机Sink Port State Diaram”)。
当协议引擎向策略引擎发出传输成功的信号时,AMS应被视为已由启动器启动(已收到GoodCRC消息以响应初始消息)。对于接收端口,当初始消息到达时,AMS应被视为已启动。
AMS应视为已结束:
- 当协议引擎向策略引擎发出信号,表示AMS中的最终消息传输成功时,以及当接收到最终消息时,发送给对方端口。
- 已发送或接收软复位消息、SOP’ or SOP’'的硬复位信号或电缆复位信号。
第8.3.2.1.3节“原子消息序列”给出了这些AMS的详细信息。
本节包含一些突出显示一些更有趣的事务的序列图。这绝不是所有可能组合的完整总结,而是说明性的。
2.1.1 Basic Message Exchange(基本信息交换)
下面的图“基本消息交换(成功)”说明了如何发送消息。下表“基本消息流”详细说明了流程中的步骤。请注意,发送方可能是Source或Sink,而接收方可能是Sink或Source。基本消息序列相同。当消息发送方的协议层在其策略引擎的要求下形成一条消息并将其传递到物理层时,它就会启动。
步骤 | 消息发送者 | 消息接收者 |
---|---|---|
1 | 策略引擎指示协议层发送消息 | |
2 | 协议层创建消息并传递到物理层。 | |
3 | 物理层附加一个CRC并发送消息。启动CRCRCRReceiveTimer。 | 物理层接收消息并检查CRC验证消息。 |
4 | 物理层删除CRC并将消息转发到协议层。 | |
5 | 协议层检查传入消息中的MessageID是否与以前存储的值不同,然后存储新值的副本。 协议层将接收到的信息转发给使用它的策略引擎。 | |
6 | 协议层生成GoodCRC消息并将其传递给物理层。 | |
7 | 物理层接收消息并检查CRC以验证消息。 | 物理层附加CRC并发送GoodCRC消息。 |
8 | 物理层删除CRC并将GoodCRC消息转发到协议层。 协议层检查并递增MessageIDCounter,并停止CRCRReceiveTimer。 | |
9 | 协议层通知策略引擎消息已成功发送。 |
2.1.2 Errors in Basic Message flow(基本消息流中的错误)
在消息流中,可能会出现通信故障或其他问题。下图8-3“指示可能错误的基本消息流”是图8-2“基本消息交换(成功)”的注释版本,指示可能发生问题的时间点。下表8.2“基本消息流中的潜在问题”详细说明了流程中的步骤。
Point | 可能的问题 |
---|---|
A | 1) 信道上有一条传入消息,意味着PHY层无法发送。在这种情况下,将从队列中删除传出消息,并处理传入消息。 2) 由于线路上有某种噪音,无法传输。在这种情况下,传出消息被PHY层丢弃。重传是通过协议层的正常机制进行的。 |
B | 1) 由于信道上存在噪声,消息未到达物理层。 2) 消息到达,但已损坏,并且CRC不正确。 接收器上没有要传递到协议层的消息,这意味着没有发送GoodCRC消息。 这会导致消息发送器中出现CRCRReceiveTimer超时。 |
C | 收到的消息的MessageID与存储的MessageID匹配,因此这是一次重试。消息不会传递到策略引擎。 |
D | 1) 策略引擎收到一条它没有预料到的已知消息。 2) 策略引擎接收到无法识别的消息。 这些情况是协议中的错误,可能导致软重置消息的生成。 |
E | 与点A相同,但位于消息接收方一侧。 |
F | 1) 由于信道上的噪声,GoodCRC消息响应没有到达消息发送方。 2) GoodCRC消息响应到达,但CRC错误。 GoodCRC消息未被消息发送者的协议层接收。这会导致消息发送器中出现CRCRReceiveTimer超时。 |
G | 1) 接收到GoodCRC消息,但它包含与发送的消息相同的MessageID。 2) 接收到消息,但它不是GoodCRC消息(类似于意外或未知消息的情况,但这次在协议层中检测到)。 这两个问题都表示在接收预期GoodCRC消息时出错,这将导致协议层中的CRCRReceiveTimer超时和随后的重试(与电缆插头的通信除外) |
下图8-4“CRC错误后重试的基本消息流”说明了其中一种情况;基本消息流由于消息接收器处的坏CRC而具有重试。当消息发送方的协议层在其策略引擎的要求下形成一条消息并将其传递到物理层时,它就会启动。协议层负责在“n次罢工且您退出”的基础上重试(重试计数)。下表8.3“CRC失败的基本消息流”详细说明了流程中的步骤。
步骤 | 消息发送者 | 消息接收者 |
---|---|---|
1 | 策略引擎指示协议层发送消息。 | |
2 | 协议层创建消息并传递给物理层。 | |
3 | 物理层附加一个CRC并发送消息。 启动CRCRCRReceiveTimer。 | 物理层未接收到消息或具有CRC错误。没有任何内容传递到协议层。 |
4 | 由于没有收到响应,CRCRReceiveTimer将过期并触发协议层的第一次重试。RetryCounter递增。协议层将消息传递到物理层。 | |
5 | 物理层附加一个CRC并发送消息。 启动CRCRCRReceiveTimer。 | 物理层接收消息并检查CRC验证消息。 |
6 | 物理层删除CRC并将消息转发到协议层。 | |
7 | 协议层检查传入消息中的MessageID是否与以前存储的值不同,然后存储新值的副本。 协议层将接收到的消息信息转发给使用它的策略引擎。 | |
8 | 协议层生成GoodCRC消息并将其传递给物理层。 | |
9 | 物理层接收消息并检查CRC以验证消息。 | 物理层附加CRC并发送GoodCRC消息。 |
10 | 物理层删除CRC并转发GoodCRC消息到协议层。 | |
11 | 协议层验证MessageID,停止CRCRReceiveTimer并重置RetryCounter。 协议层通知策略引擎消息已成功发送。 |
2.1.3 原子消息序列
原子消息序列(AMS)的类型列在表8.4“原子消息序列”中。下表列出了消息或消息组合以及一个或多个不可中断嵌入式AMS的序列。如果存在嵌入式AMS,则整个消息序列被视为AMS,用于避免碰撞的Rp值(见第5.7节“避免碰撞”)只能在整个消息序列开始或结束时离开或进入就绪状态时进行更改,而不能在嵌入式AMS开始或结束处进行更改。注意,直到序列中的第一个消息被成功发送(即,接收到确认该消息的GoodCRC消息),AMS才开始。
表8.32“AMS:硬重置”详细说明了硬重置(这是信号而非AMS),然后是SPR合同谈判AMS,应被视为不可中断。
2.1.3.1 AMS: Power Negotiation (SPR)
2.1.3.2 AMS: Power Negotiation (EPR)
2.1.3.3 AMS: Unsupported Message
2.1.3.4 AMS: Soft Reset
2.1.3.5 AMS: Data Reset
2.1.3.6 AMS: Power Role Swap
2.1.3.7 AMS: Fast Role Swap
2.1.3.8 AMS: Data Role Swap
2.1.3.9 AMS: VCONN Swap
2.1.3.10 AMS: Alert
2.1.3.11 AMS: Status
2.1.3.12 AMS: Source/Sink Capabilities (SPR)
2.1.3.13 AMS: Source/Sink Capabilities (EPR)
2.1.3.14 AMS: Extended Capabilities
2.2 电源协商(Power Negotiation)
下图展示了在SPR模式下协商显式合同时成功的消息流示例。谈判经历了5个不同的阶段:
- Source在Source_Cabilities消息中发送其电源功能。
- Sink评估这些能力,并在请求中通过发送请求消息来选择一个功率级别。
- Source评估请求,并通过Accept Message接受请求。
- Source转换到新的功率电平,然后通过发送PS_RDY消息通知信宿。
- Sink开始使用新的功率级别。
- 对于SPR PPS操作:
- Source启动其保活计时器。
- Sink启动其请求定时器以发送周期性的请求消息。
具体步骤:
Step | Source | Sink |
---|---|---|
1 | 如果尚不清楚电缆功能或插头类型,则检测电缆功能或插座类型(见第4.4节“电缆类型检测”)。策略引擎指示协议层发送表示电源当前功能的Source_Capabilities消息。 | |
2 | 协议层创建消息并传递到物理层。 | |
3 | 物理层附加CRC并发送Source_Capabilities消息。启动CRCRReceiveTimer。 | 物理层接收Source_Capabilities消息并检查CRC以验证该消息。 |
4 | 物理层移除CRC并将Source_Capability消息转发到协议层。 | |
5 | 协议层检查传入消息中的MessageID是否与先前存储的值不同,然后存储新值的副本。协议层将接收到的Source_Capabilities消息信息转发给使用它的策略引擎。 | |
6 | 协议层生成GoodCRC消息并将其传递给物理层。 | |
7 | 物理层接收GoodCRC消息并检查CRC以验证消息。 | 物理层接收GoodCRC消息并检查CRC以验证消息。物理层附加CRC并发送GoodCRC消息。 |
8 | 物理层移除CRC并将GoodCRC消息转发到协议层。 | |
9 | 协议层验证并递增MessageIDCounter,并停止CRCRReceiveTimer。协议层通知策略引擎Source_Capabilities消息已成功发送。策略引擎启动SenderResponseTimer。 | |
10 | 策略引擎评估源发送的Source_CapabilitiesMessage,在必要时检测插头类型(请参阅第4.4节“电缆类型检测”),并选择它想要的电源。它告诉协议层形成将其请求表示为消息的数据(例如,电力数据对象)。 | |
11 | 协议层创建请求消息并传递到物理层。 | |
12 | 物理层接收请求消息,并将其计算的CRC与发送来验证消息的CRC进行比较。 | 物理层附加CRC并发送请求消息。启动CRCRCRReceiveTimer。 |
13 | 物理层去除CRC并将请求消息转发到协议层。 | |
14 | 协议层检查传入消息中的MessageID是否与先前存储的值不同,然后存储新值的副本。协议层将请求信息传递给策略引擎。策略引擎停止SenderResponseTimer。 | |
15 | 协议层生成GoodCRC消息并将其传递到其物理层。 | |
16 | 物理层附加CRC并发送消息。 | 物理层接收消息,并将其计算的CRC与为验证消息而发送的CRC进行比较。 |
17 | 物理层将GoodCRC消息转发到协议层。 | |
18 | 协议层验证并递增MessageIDCounter。它通知策略引擎请求消息已成功发送。协议层停止CRCRReceiveTimer。策略引擎启动SenderResponseTimer。 | |
19 | 策略引擎评估由接收器发送的请求消息,并决定它是否能够满足请求。它告诉协议层形成一个接受消息。 | |
20 | 协议层形成被传递到物理层的接受消息。 | |
21 | 物理层附加CRC并发送AcceptMessage。启动CRCRCRReceiveTimer。 | 物理层接收消息,并将其计算的CRC与为验证消息而发送的CRC进行比较。 |
22 | 物理层将接受消息转发到协议层。 | |
23 | 协议层检查传入消息中的MessageID是否与先前存储的值不同,然后存储新值的副本。协议层通知策略引擎已经接收到接受消息。策略引擎停止SenderResponseTimer,启动PSTransitionTimer并减少其当前消耗。 | |
24 | 协议层生成GoodCRC消息并将其传递到其物理层。 | |
25 | 物理层接收消息,并将其计算的CRC与发送来验证消息的CRC进行比较。 | 物理层附加CRC并发送消息。 |
26 | 物理层将GoodCRC消息转发到协议层。协议层验证并递增MessageIDCounter,并停止CRCRReceiveTimer。 | |
27 | 协议层通知策略引擎接受消息已成功发送。 | |
28 | 设备策略管理器通知策略引擎电源已经稳定在新的操作条件下,并且告诉协议层发送PS_RDY消息。 | |
29 | 协议层形成PS_RDY消息。 | |
30 | 物理层附加CRC并发送PS_RDYMessage。启动CRCRReceiveTimer。 | 物理层接收PS_RDY消息,并将其计算的CRC与发送来验证消息的CRC进行比较。 |
31 | 物理层将PS_ RDY消息转发到协议层。 | |
32 | 协议层检查传入消息中的MessageID是否与先前存储的值不同,然后存储新值的副本。协议层通知策略引擎已经接收到RS_RDY。策略引擎停止PSTransitionTimer。在SPR PPS操作中,策略引擎启动SinkPPSPeriodicTimer。 | |
33 | 协议层生成GoodCRC消息并将其传递到其物理层。 | |
34 | 物理层接收消息,并将其计算的CRC与发送来验证消息的CRC进行比较。 | 物理层附加CRC并发送消息。 |
35 | 物理层将GoodCRC消息转发到协议层。协议层验证并递增MessageIDCounter。停止CRCRReceiveTimer。 | |
36 | 协议层通知策略引擎PS_RDY消息已成功发送。 | |
37 | 在SPR PPS操作中,策略引擎启动SourcePPSommTimer。 |