这篇文章主要介绍一下Type-C的PD协议。
USB PD包
需要注意的是,PD仅在一条单线上通讯,所有PD包里的东西都是串行的。
前导码
前导码是以0开始的包含64个0和1的序列,它本身是不进行4b5b编码的。
数据包开始标识
SOP*是一个通用术语,指不同数据包的开始,它向接受者指明包的开始,指示谁是此消息的接受者。
USB PD消息
控制消息(16bit):管理接口合作伙伴之间的消息流或进行交换不需要额外数据的消息。
数据消息(48-240bit):至少一个数据对象,最多7个数据对象。
发现和协商电源管理;
系统自测BIST;
厂商自定义(VDM)。
扩展消息(26-260byte)
用于源和电池信息的交互;
使用安全;
用于固件更新;
供应商定义。
消息Summary
USB PD消息头格式
消息头格式:
每一个消息包含一个消息头;
消息头包含关于消息和PD端口功能的基本信息。
控制消息
控制消息(16bit):管理端口合作伙伴之间的消息流或进行交换不需要额外数据的消息。
数据消息
数据消息(48-240bit),至少一个数据对象,最多7个数据对象。数据消息应该由消息头组成,后面跟着一个或多个数据对象。数据消息很容易识别,因为消息头中的数据对象字段的数量是非零值。它包含下面几类数据对象:
BIST数据对象(BDO)、电力数据对象(PDO)、请求数据对象(RDO)、厂商定义数据对象(VDO)、电池状态数据对象(BSDO)、警报数据对象(ADO)。
CRC&EOP
CRC是32位的,引用头和所有数据。
不包括前言、SOP和EOP;
多项式=0x04C1 1DB7;
初始值=0XFFFF FFFF
EOP是单k码(5位)
它触发当前帧的CRC结束(开始计算);
它可以在任何时候发送,以提前结束一个数据包始。
SOURCE供电能力
电力能力消息:
消息类型为SOURCE为00001 SINK为00100;
至少有一个电力数据对象;
如果还有其他的固定支出的对象,应该是从低到高的顺序;
如果有电池对象,按从低到高的电压顺序发送;
如果有可变电力供应对象,按从低到高的顺序;
如果有PPS对象,按从低到高的电压顺序。
功能消息还应包含发送端口的消息,后面跟着最多6个额外的power数据对象。
能力信息中的PDOs应按以下顺序发送:
允许转换
VConn的交换顺序
数据角色转换
厂商自定义信息
可分为结构化(SVDM)和非结构化(VDM)。
非结构化:非结构化VDM没有在VDM报头中定义B14……0的内容。它们的定义和使用时VID指出的供应商的唯一责任。当PD上出现硬复位时,端口合作伙伴和电缆插头将退出使用非结构化VDM进入的任何状态;
非结构化VDMs只能在有明确连接的情况下使用;
在订立明确的连接前,不得发送非结构化的VDMs,接收时应予以忽略;
只有DFP应该是非结构化VDMs的发起者;
只有UFP或电缆插头应作为非结构化VDM的响应者;
在任何其他情况下,不得启动或响应非结构化VDMs;
命令序列应该是可中断的,例如,由于需要与电源相关的AMS;
非结构化VDMs只能在主动模式下的模态操作中使用;
非结构化VDMs可以与SOP*包一起使用;
当DFP或UFP不支持非结构化VDMs或不识别VID时,它将返回一条Not_Supported消息。
结构化:将VDM类型字段设置为1定义了在结构化VDM报头中使用比特B14……0;
结构化VDMs仅在有明确连接的情况下使用,但下列情况除外:在建立一个明确的契约之前,一个源可能会发出Discover身份信息,作为发起者,使用SOP*的信息包将其发送到电缆插头。
除了输入模式和退出模式命令之外,任何端口都可以是结构化VDMs的发起者,发起者应仅由DFP发起;
电缆插头只能作为结构化VDMs的应答者;
在任何其他情况下,不应启动或响应结构化VDMs;
当DFP或UFP不支持结构化VDMs时,任何接收到的结构化VDMs都应返回一个Not_Supported消息;
当电缆插头不支持结构化VDMs时,接收的任何结构化VDMs都应被忽略;
一个DFP、UFP或电缆插头,它支持结构化VDMs,并接收一个结构化VDM的SVID,它不承认,应该用NAK命令回复;
结构化的VDM命令序列应该是可中断的,;例如,由于需要与电源相关的AMS。
VDM命令
Discover VDM ACK
Discover SVIDs命令、应答
Discover Mode命令、应答
Enter Mode命令、应答
Exit Mode命令、应答