TYPE-c是一种可以用于充电和数据传输的接口,既可以用于USB,也可以兼容DP,HDMI等音视频接口。
物理 pin
D+ D-:插座有两对,插头只有一对。用于usb2.0的慢速传输,连接的时候有且只有一对会连接,因此可以实现正插反插都可以,兼容USB2.0.
TX,RX:usb3.0的数据传输,四对差分pairs,因此可以很好兼容DP的传输。
CC:插座有cc1,cc2,插头只有CC,可以由此确认正插还是反插。另一个不连接cc的pin连接Vconn。source利用检测CC1,和cc2上的电压来确定是否接到了sink。
Vconn:插座的一个ccx会与插头的Vconn连接,用于cable和IC的供电(DP时的AUX供电)
Vbus:给设备提供power。USB PD模式:20v,5A.
CC1和CC2的配置—检测是否连接
source的CC1和CC2会配置上拉电阻Rp,sink的CC会配置下拉电阻Rd(Fix in 5.1kΩ)。
source根据cc1和CC2连到的电阻是Rb还是Ra确定是Sink还是给cable供电。
Source根据CCX上的电压变化确定是否有Sink,Sink通过Vbus或者CC上的电压变化是否提供确定Source是否连接。
Vbus调整
查表Rp,Rd
Source的Rp可以动态调整,告诉Sink它可以提供多大的电流,这个与它的上拉电压有关
sink可以根据Rd来知道现在的电流是多大----->查表
问题–worse case
DRP
一种可以通过开关切换Rp和Rd来决定此时是Source还是Sink的device(墙头草)
状态机
普通source和sink
DPR—Try.sink, Try.source
DPR有的一个中间状态,即它在刚检测时,想做对方的角色,并且会去尝试。
,TX和RX作为DP的lane,CC作为PD信号的传输,Vbus给device供电,Vcon给cable供电。具体的pin assignment,可以参考Displayport alt model的spec,会有对应的sink和source端的pin assignment。
因此对于线而言,每个Plug也支援多种Assignment,选用哪种Assignment需要进行选择
对于Plug而言,连接DPF_D的Plug表现为与DPF_D相同的Assignment,而连接UPF_D的Plug表现为与UPF_D相同的Assignment。
HPD and AUX
SUB作为AUX的沟通链路,在DP to type c的cable上,一般还会有专门检测AUX电压的IC,确定是否连接上。
HPD shall be supported on the USB-C connector when operating in DisplayPort Alt Mode by way of USB PD Messages that carry DisplayPort status information. Two types of USB PD Messages may carry HPD – DisplayPort Status Update and Attention 。
HPD信号是通过PD芯片来产生和接收的。
PD
要使得type c能够调整到DP model,其中就需要PD沟通,一般DP–C的cable上都会有专门的PD ic。
PD的作用是DFP和UFP之间的供电选择、dp model的进入和调整、HPD信号的产生和传递。
需要说明的是,DFP的概念是host of data,意味着发起数据传输的主机,UFP是device of data,服从主机做数据传输的设备。
当sink和source连接时,首先要做的就是power contral,它会决定source端需要给sink提供多大的电压和电流。
这一章节因为我直接有做过一个ppt,所以直接把ppt的内容放上去,有需要讲解的地方后面会添注文字
一个完整的USB PD数据包由前导码(Preamble),使用场景码(SOP),功能码(MessageHeader),数据码(Byte0-n)、校验码(CRC)以及结束码(EOP)组成,如果数据部分为空,说明数据包仅作为控制指令使用,称为控制消息。有数据内容的称为数据消息,通常数据消息里包含了要变化的电压值和电流值等信息。整个USB PD数据包中,除了前导码不需要进行4b5b编码外,数据包的其他部分均需要进行4b5b编码,指定数据经过4b5b编码后,数据包中所有数据都需要使用BMC编码之后才能通过CC发送。
PD信号的开头会有SOP*,是为了区分这个沟通信号到底是给cable还是device的。
一个PD信号会有这些部分组成,其中preamble是有phy层产生的
前导码(Preamble)是为了锁定接收端,预示发送端将要有数据到达,前导码由64位交替的‘0’和‘1’组成,以’0’开始,以’1’结束
所有的USB PD传输流程,都是以SOP开始,SOP代表SOP,SOP’,SOP’’。不同的使用场景会用到不同SOP,每一个SOP也由不同的特殊编码组成。如SOP是由3个Sync-1和1个Sync-2组成,对应的5b编码可以在4b5b编码表中查到
支援SOP’的 cable plug 只能偵測並且回應 ordered set 是 SOP’的 packet
支援SOP”的 cable plug 只能偵測並且回應 ordered set 是 SOP”的 packet
功能码(Message Header)
功能码长度16-bits,通常包含数据包类型、端口角色(UFP/DFP)、PD协议版本等信息,功能码的组成如下图所示
EOP可以用於提前終止數據包,例如 在發送硬復位信號之前。每次的传输,对方都应该回复一个:good CRC",来表示自己正确接收,然后才是正式的回复。
控制消息
当消息头中的数据对象字段数设置为0时,将消息定义为控制消息。控制消息仅由消息头和CRC组成。协议层发起消息(即接受消息、拒绝消息等)。控制消息类型在消息头的消息类型字段中指定(第4…0位)。
GoodCRC :GoodCRC消息应返回消息的MessageID, 确认前一条报文已正确接收.
GotoMin : GotoMin消息只适用于那些在接收请求数据对象。它是对接收端口的一个指令,将其操作功率级别降低到最小.
Accept :在下列情况下,接受讯息是有效的回应:
Request、PR_Swap、DR_Swap、VCONN_Swap、FR_Swap、Soft_Reset、
Reject :在下列情况下,拒绝讯息是有效的回应:
Request、PR_Swap、DR_Swap、VCONN_Swap
Ping :以前用于USB Type-A和USB Type-B连接器,以确定在没有发生其他消息传递时接收器是否继续存在。
PS_RDY :由源发送表示电源以达到所需的工作状态。
Get_Source_Cap :得到源端功能,对方回应Source_Capabilities Message。
Get_Sink_Cap :得到Sink端功能,对方回应Sink_Capabilities Message。
DR_Swap :DR_Swap消息的接收者应通过发送Accept消息、Reject消息或Wait消息来响应。接收到Accept后,DFP,UFP交换角色。Reject不采取措施。Wait表示将来可能交换,暂时不采取操作。
PR_Swap :任何端口合作伙伴都可以发送PR_Swap消息来请求交换电源角色。返回消息为Accept消息、Reject消息或Wait。
VCONN_Swap :顾名思义,交换VCONN角色。消息发送后,对方执行。新的V CONN源将发送PS_RDY消息,指示它现在正在寻找VCONN。初始V CONN源在收到PS_RDY消息的最后一位EOP后,应停止在tVCONNSourceOff内寻找VCONN。
Wait :表示等待.
Soft Reset :当存在消息同步错误时,源或接收器可以发送一条Soft_Reset消息。软t_reset消息从协议层错误中恢复。接收放会恢复到PE_SNK_Ready和PE_SRC_Ready状态
Not_Supported :表示不支持。
Get_Source_Cap_Extended :请求关于端口源功能的附加信息。
Get_Status :请求端口合作伙伴的当前状态。源或接收器应返回一条状态消息作为响应
FR_Swap :
Get_PPS_Status:接收器发送Get_PPS_Status消息来请求关于源状态的附加信息
Get_Country_Codes :支持的[ISO 3166]中定义的alpha-2国家代码。
BMC编码
USB PD协议的数据包中,所有的数据都需要使用BMC进行编码,BMC编码属于物理层的操作,经过编码之后的数据通过CC线进行传送。
上图为BMC编码的示例,BMC编码规则是曼切斯特编码的一个版本,按照脉宽来设定的0和1,从示例中可以看到,在一个周期里有高低电平变化为1,否则为0。
USB PD协议编解码流程
以上详细介绍了USB PD协议数据包的格式和各个部分的功能,那么对于一个完整的数据包,发送端发送的流程是什么,接收端接收到数据之后会进行哪些处理呢。
上图为一个完整的数据包发送和接收的流程图,可以看到,在发送数据时,需要将经过CRC校验后的数据使用4b5b编码,再使用BMC编码才可以通过CC发送。在接收数据时,首先进行BMC解码,然后需要确定SOP的位置,因为SOP后的数据才是真正的有用的数据,再进行5b4b的解码,校验CRC。
介绍完理论,来看一下在实际的数据包。下面是使用逻辑分析仪抓取的USB PD协议通信数据包,使用上面介绍到的内容对这个数据包进行解析。
首先,BMC解码,根据BMC编码规则,识别出’0’和’1’,已经标注在图中。SOP识别,标注出的前20 bits为00011 00011 00011 10001,我们可以将这些数据理解为4组经过4b5b编码的数据,由于在传输数据时采用大端模式,所以需要将数据的高低位交换,转换之后为11000(Sync-1) 11000(Sync-1) 11000(Sync-1) 10001(Sync-2),也就是SOP(Sync-1、Sync-1、Sync-1、Sync-2)。同样的,SOP后的数据也需要先高低位交换,识别结果为Source_Capabilities,说明该消息是用来表明Source的供电能力的,那么数据包中也会包含数据码,分析的方法跟前面也是一样的。
在日常的工作中,其实并不需要手工去分析大量的USB PD的消息类型,目前大部分逻辑分析仪都可以对USB PD协议进行解析,另外也可以借助CY4500 EZ-PD™协议分析仪对USB PD通信逻辑进行分析,只有部分逻辑分析仪无法识别的内容,才需要我们根据协议内容去进行分析,这些内容大部分是USB PD芯片厂商定义的调试消息类型。
以上详细介绍了单个USB PD数据包的构成,以及如何去识别数据包的内容,DFP和UFP通过数据包进行通信,就是USB PD协议认证协商的过程。
0x03 USB PD协议认证协商
我们知道,不同的设备需要不同的充电电压、电流,手机需要9V/2A,平板需要15V/2A,电脑需要20V/3.25A,那么电源是如何实现根据设备需求提供定制化输出的呢?
支持USB PD协议的设备,在与电源连接时,会进行认证和协商,协商内容包括电源可提供的充电能力,设备支持的充电功率等。
VDM
比较重要的一部分,是DP中的沟通主体。
SVID,每个公司有专门的固定值,每次的传输的都必须是一样。structure VDM Header是为了表示这个命令是什么,也能做ack/neck等。
不同的command,后面跟的东西也是不同的,在dp alt model中也有对应的table表示。
message header后的7个bytes的VDO,第一个会作为structure VDM header,所以后面实际有效的data只有6个bytes。
这个是为了知道了解情况和cable和port的能力。
FLOW
确定DFP和UFP
DFP发Discover model,UFP回复自己支持的capabilities,再由DPF决定是否进入DP model。
进入DP model后,做一些调整,并且有一些HPD status的传输。
示例
后续结束后会一直发attention命令。