Type-C PD spec 由五部分组成,翻译自《USB Power Delivery Specification v3.1》
1、PD Overview
2、物理层
3、协议层
4、设备策略层
5、场景讲解
3、协议层
3.1、消息类型
控制消息:长度固定,16 位
数据消息 :
供应商可自定义
长度在 48 ~ 240 位
用于公开能力和协商功率
扩展消息
3.2、消息头
3.3、控制消息
3.4、数据消息
Capabilities Message
-
- 包含端口信息 + 最多 6 个 PDO
- SRC 发送 Source_Capabilities 来通告其供电能力
- SNK 发送 Sink_Capabilities 来通告其吸电需求
- 分类:
PDO:固定电源(稳定恒压);可变电源 (稳压较差);电池 (可直接连接 VBUS)
APDO:可编程电源(PPS,在电压可输出范围内以编程方式调节)
-
- 消息中 PDO 的顺序:
-
-
-
- vSafe5V 固定电源对象应始终是第一个对象
- 其余固定电源对象 (如果存在) 应按电压顺序发送:最低到最高
- 电池供电对象(如果存在) 应按最低电压顺序发送:最低到最高
- 可变电源 (非电池) 对象 (如果存在) 应按最低电压顺序发送:最低到最高
- 可编程电源对象(如果存在)应按最大电压顺序发送:最低到最高
-
-
使用场景:Source_Capabilities
用于通告 SRC 的供电能力;在 HardReset、上电事件或插入事件后,SourceCapabilityTimer 超时后发送,至少发送 nCapsCount 个,直到收到 GoodCRC;在 PE_SRC_Ready 状态下供电能力变化时发送;在收到 Get_Source_Cap 后发送;多端口系统中,可用功率变化时可发送
Sink_Capabilities:用于通告 SNK 的吸电需求;在收到 Get_Sink_Cap 时发送
Source_Capabilities Message
SPR 模式:
SNK 接收到 SRC_CAP,评估并以 Request 响应;
SNK 请求了 PPS APDO 后,应每隔 tPPSRequest 定期重新请求 APDO,除非(SNK 请求的不是 ADPO;发生了 PR_Swap/HardReset)
EPR 模式:
SRC_CAP 只能是对 Get_Source_Cap 的回应,且 SNK 不能发送 Request 响应;
在 EPR 模式下收到 SRC_CAP 消息,如果不是对 Get_Source_Cap 消息的响应,则 SNK 应启动硬复位
固定电源 PDO (Bit31...30 = 00b)
vSafe5V PDO bit29...25 用于传递附加信息;其余 PDO bit29...25 置为 0
可变电源 PDO (Bit31...30 = 10b):电压不稳定,但固定在一定范围内;最低电压不得低于最高电压的 80%
电池 PDO (Bit31...30 = 01b):电压字段表示电池的电压范围;电池应能够在整个电压范围提供指定的功率;仅电池 PDO 提供功率而非电流
APDO (Bit31...30 = 11b):SPR PPS APDO;EPR AVS APDO
Sink Capabilities Message
固定电源 PDO (Bit31...30 = 00b):vSafe5V PDO bit29...25 用于传递附加信息;其余 PDO bit29...25 置为 0
可变电源 PDO (Bit31...30 = 10b):电压字段表示 SNK 运行所需的电压范围;电流字段表示 SNK 运行所需的工作电流(最大电流)
电池 PDO (Bit31...30 = 01b):电压字段表示 SNK 运行所需的电压范围;功率字段表示 SNK 运行所需的工作功率(最大功率)
APDO (Bit31...30 = 11b):SPR PPS APDO;EPR AVS APDO
Request Message:由 SNK 发送以请求功率,发生在 SPR 模式下;固定电源 RDO;可变电源 RDO
- 电池 RDO
- 可编程 RDO
3.5、扩展消息
扩展消息头 (Extended = 1b)
chunked:是否分块,默认应支持分块
从 Source_Capabilities 和 Request 消息确认 SRC 和 SNK 是否支持不分块
当存在一个端口仅支持分块时,则端口间只能分块发送 Data Size > 26 byte 的扩展消息
向电缆插头发送扩展消息仅支持分块处理
Chunked Number:块编号
-
-
- Chunk
- ed = 1 时,有效
- Chunked = 0 时,设置为 0
- 在回复请求类消息中,表示回复请求的块编号
-
- 在请求类消息中,
- 表示所要请求的块编号
-
Request Chunk:是否为请求块:Chunked = 1 时,有效;Chunked = 0时,设置为 0
Data size:数据块中的字节数
扩展消息实例(不分块处理)
请求: Security_Request(Data Size = 7)
响应: Security_Response(Data Size = 30)
扩展消息实例(分块处理)
请求: Security_Request(Data Size = 7)
响应: Security_Response(Data Size = 30)
3.6、定时器
- 用于规定通讯时的时序
- 分类:策略引擎的定时器;协议层的定时器
3.7、计数器
MessagelDCount:
滚动计数器,0~7,用于检测重复消息(接收方收到重复的消息,仍需回应 GoodCRC,但 MessagelD 不变)
发送方和接收方各自维护
RetryCounter:在重试过程中收到合适的响应,计数器应重置为 0
硬复位或软复位后重置为 0
3.8、Reset
数据复位
-
- 任一端口用于重置 USB 数据链路影响
-
- 不改变端口的电源角色和数据角色不改变现有显性契约须退出所有的活动模式须重置电缆 VCONN,DFP 须成为 VCONN SRC
-
复位失败则进入 ErrorRecovery 状态
电缆复位
- 只有 DFP 才能发起电缆复位,且 DFP在发起复位前须成为 VCONN SRC会导致电缆插头退出所有活动模式
软复位
-
- 解决通讯协议出错的问题影响
-
- 物理层:不需要重置协议层: 重置 MessagelDCounter、RetryCounter 和状态机。策略引擎:通过建立显性契约重置依赖于状态的行为。
-
- 注:在 SPR 模式下,源发送源能力信息;在 EPR 模式下,源发送 EPR 源能力信息
-
-
电源:不改变
硬复位
- 电源恢复到默认状态(VBUS -> vSafe0V -> vSafe5V),协议层软复位无论在 SinkTxOK 还是 SinkTxNG 均可发起。VCONN SRC 复位为 SRC 提供不改变 Rp/Rd 的状态复位无法解决问题时须进入 ErrorRecovery 状态
3.9、消息丢弃机制
优先级:SOP > SOP'/ SOP''