usb pd(power deliver)协议是usb if协会制定的usb充电标准与技术,是目前主流的快充协议之一,其最大供电能力可达100w,被应用在各种设备的电源上。usb pd协议利用usb type-c接口的cc(configuration channel)引脚作为数据传输通道来协商充电的电压、电流和功率传输方向,在介绍usb pd协议的具体内容之前,先简单介绍一下其依赖的usb type-c接口。
如上图所示,type-c接口可以完全替代type-a、type-b、micro ab等各种usb接口,实现数据传输、电力传输。usb pd协议就是基于type-c接口的强大功能实现的。type-c接口的引脚示意图如下所示,vbus为总线电源,d+、d-为usb2.0的差分信号线,tx+、tx-、rx+、rx-为superspeed差分信号,sbu(sideband use)为旁路使用,cc为配置通道。type-c接口最大功率传输可达100w(20v/5a),最大数据传输速率为10gbps。可以看到,在公头上只有一个cc引脚,母头上的cc引脚是对称的,所以也可以利用cc引脚判断正反插。
usb pd协议的工作原理是利用type-c接口的cc线作为数据线来协商电压、电流以及供电方向,整个通信过程需要按照特定的数据包格式,并且存在相互认证的过程。下面先介绍一些usb pd中常见的名词,这些名词在后面也会用到。
source:通常指电源提供端,如电源适配器。
sink:通常指电源消耗端,如手机、平板。
e-marker(electronic marker):电子标记,一般存在于type-c to type-c的线缆中。
cc(configuration channel) :配置通道,用于识别、控制等。
bmc(biphase mark coding):双相位标识编码,通过cc通信。
dfp(downstream facing port):下行端口,即为host或者hu b下行端口。
ufp(upstream facing port):上行端口,即为device或者hub的上行端口。
drd (dual-role data):能作为dfp/ufp。
drp (dual-role power):能做为sink/sour ce。
sop(start of packet sequences):所有的pd传输流程,都是以sop开始,sop代表sop,sop’,sop’’。
eop (end of packet):数据包结束标志。
usb pd协议通过特定格式的数据包进行通信,数据包的格式如下所示。
一个完整的usb pd数据包由前导码(preamble),使用场景码(sop),功能码(messageheader),数据码(byte0-n)、校验码(crc)以及结束码(eop)组成,如果数据部分为空,说明数据包仅作为控制指令使用,称为控制消息。有数据内容的称为数据消息,通常数据消息里包含了要变化的电压值和电流值等信息。整个usb pd数据包中,除了前导码不需要进行4b5b编码外,数据包的其他部分均需要进行4b5b编码,指定数据经过4b5b编码后,数据包中所有数据都需要使用bmc编码之后才能通过cc发送。4b5b编码和bmc编码会在下一章节详细介绍。
前导码(preamble)
前导码(preamble)是为了锁定接收端,预示发送端将要有数据到达,前导码由64位交替的‘0’和‘1’组成,以’0’开始,以’1’结束。
使用场景码(sop*)
所有的usb pd传输流程,都是以sop开始,sop代表sop,sop’,sop’’。不同的使用场景会用到不同sop,每一个sop也由不同的特殊编码组成。如sop是由3个sync-1和1个sync-2组成,对应的5b编码可以在4b5b编码表中查到。
数据包使用sop作为开头,说明该数据包是在source与sink之间进行的。
sop’由2个sync-1和2个sync-3组成,其顺序如下图。
sop’‘也是由2个sync-1和2个sync-3组成,但是其顺序与sop’不同。
数据包使用sop’或sop’’,则说明是source与e-marker之间的通信过程,不同的是,sop’体现的是source与线材近端e-marker的通信,sop’'体现的是source与线材远端e-marker的通信。
功能码(message header)
功能码长度16-bits,通常包含数据包类型、端口角色(ufp/dfp)、pd协议版本等信息,功能码的组成如下图所示。
从列表中可以看出,不同的功能码需要特定的sop*,这个在之前也有提到,下面介绍一些常用的功能码。
extended
extended是用来表示该数据包是否包含外部指令的功能码,该位置1,表示数据包中存在外部指令,反之则没有。如果数据包中包含外部指令,指令内容会跟在功能码后面进行传输。usb pd协议的外部指令使用的比较少,在这里就不做详细的介绍了。
number of data objects
当extended置0时,number of data objects才可以使用,该功能码有3-bits,用来表示功能码后跟的数据的位数,如果number of data objects置0,则表示功能码后没有数据,该数据包为控制消息。如果该功能码置1,则表示该数据包为数据消息。
port power role & port data role
这两个功能码都是表示端口的电源角色(source/sink)和数据角色(dfp/ufp),该位置1时表示source/dfp,该位置0表示sink/ufp。
message type
message type有5-bits,是功能码中比较重要的位,需要和number of data objects 结合使用,前面提到number of data objects决定了数据包的消息类型,message type 则表示具体的指令类型。当number of data objects置0, message type则可以表示以下控制指令。例如当接收器成功接收数据包并crc校验正确后,会向发送端发送带有goodcrc和message id的数据包,来表示通信成功。
当number of data objects置1时,data message types可表示以下指令,例如source会在通信过程中向sink发送source_capabilitties来表示供电能力,sink可以从供电能力列表中进行选择并通过request指令发送给source端。
数据码(byte0-n)
数据码只有在数据包类型为数据消息时才会使用,具体的数据内容需要根据指令的内容改变,例如在使用source_capabiliities消息指令时,数据码就会存放source的供电能力。数据码同样需要使用4b5b进行编码。
校验码(crc)
功能码和数据码都需要由32bits的crc校验进行保护,校验码的生成机制比较繁琐,一般都会使用查表的方式实现,在这里也不做详细的介绍了,感兴趣的小伙伴可以参考usb if协会的官方文档。
结束码(eop)
结束码表示整个数据包的结束,在4b5b编码表中可以找到对应的5b编码,为01101。
4b5b编码
0x02 usb pd协议的编码方式
在usb pd协议的数据包中,除了前导码(preamble)之外,其他部分均需要使用4b5b编码,官方的说法是为了降低接收端设计的复杂度,提高接收端设计的自由度。4b5b编码的原理是建立一个4b5b编码表,将4-bits的数据与5-bits的数据进行对应,发送端根据编码表对4-bits数据进行编码,接收端根据编码表对5-bits数据进行解码,编码表的具体内容如下图所示。
从图中可以看出,除了基本的hex数据外,还定义了一些特定的编码,如sync-1、rst-1等,这些特定的编码会组成sop*,在介绍usb pd协议数据格式时也有提到。另外,编码表中还预留了多个未定义的5b编码,可以作为的扩展指令使用。
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协议的设备,在与电源连接时,会进行认证和协商,协商内容包括电源可提供的充电能力,设备支持的充电功率等。
上图为usb pd认证协商的流程图。首先dfp向ufp发送source capabilities 来表明其供电能力,ufp接收到该数据包校验无误后会向dfp发送goodcrc,表明接收成功,随后ufp会从dfp的capabilities中选择合适功率并使用request消息发送给dfp,同样dfp也会对数据包校验并返回goodcrc。dfp在收到ufp的request之后,会判断能否满足该request,如果可以则发送accept,同时dfp会调整内部电源,准备向ufp供电,准备完成之后会向ufp发送ps_ready消息并将电压、电流转换成ufp请求的值,待ufp回复goodcrc,整个协商过程完成,电源与设备建立起快充关系。
上图是使用cy4500 ez-pd™协议分析仪对协商过程进行监控得到的数据,从数据中可以看出,在dfp发送ps_ready消息之前,vbus的电压为5v,电流几乎为0,在dfp发送ps_ready消息的同时,vbus电压升为20v,开始对设备进行快充。
0x04 usb pd协议安全性分析
前面详细介绍了usb pd协议的数据格式、协商认证过程,了解了其工作原理,usb pd协议的具体实现需要使用usb pd芯片,usb pd协议本身也是公开的,数据包中包含crc校验,并使用4b5b编码和bmc编码,可以说协议在设计的时候就把安全考虑进去,但是各个厂商的usb pd协议芯片的安全性可以说是参差不齐了。usb pd协议芯片一般包括物理层、协议层和策略层,物理层包括一些通用寄存器和pd专用寄存器,还有bmc编解码的功能等,协议层就会包含sop*的识别、协议的实现等内容,策略层则包括一些上层策略。所以需要对芯片进行编程,配置策略,实现协议,当然就会存在固件。由于usb pd协议仅使用cc线进行通信,所以芯片厂商也会通过cc线对usb pd芯片进行固件烧录,在烧录方式上目前存在三种形态。
第一种是原厂单次烧录(otp),这种芯片只在出货之前被烧录一次,不会被再次修改,也就是说不存在烧录恶意固件的问题。同时也因为只支持一次性烧录,所以这种协议芯片往往只会兼容标准的、成熟的快充协议,后续如果出现其他快充协议,协议芯片很难兼容。
第二种是开放式的多次烧录(eflash/mtp),这种协议芯片配置灵活,可以利用开发工具修改固件,完成对新快充协议的兼容以及修复后续出现的bug,出货量较大。不过这种芯片对应的开发工具可以比较容易买到,存在较大安全风险。
第三种是加密式的多次烧录(eflash/mtp),芯片配置同样非常灵活,不过只有掌握了密钥才能获得固件更新的权限,而密钥一般都有充电器厂商保管。在技术层面,这样既保证充电器对bug的修复能力,又能保护充电器不会被恶意更改程序,是usb pd快充充电器的最佳选择,但是如果厂商将密钥存储在烧录软件本地或者烧录设备中,也有可能存在密钥泄露的情况。
所以,usb pd协议的安全性主要取决于芯片厂商的取舍,以上三种形态都在一定程度上牺牲了产品的功能性或者安全性,至于如何去平衡功能性和安全性,这是开发人员和安全研究人员一直需要思考和面对的问题,我们要知道,没有绝对的安全。
模拟计算机与数字计算机的区别是什么
教你如何快速判断电气设备系统中的故障点
nRF5系列首个高端多协议SOC nRF5340TM,满足尖端可穿戴设备的需求
我们说说C++程序员成长路上的那点事
芯片的设计流程
带大家认识什么是USB.PD协议
南芯科技荣获荣耀“卓越交付奖
vivo NEX新品实现正面无刘海和无开孔的真全面屏形态
Google Duo现在可用于Android TV
Manz亚智科技板级封装突破业界最大生产面积 完美应对产能、成本双挑战
防水插座好用吗
电子芯闻早报:高通又挨刀,传Nvidia也变心
通讯产品 PCB 面临的挑战,一文告诉你
刀片电池搅局动力电池市场 三元锂电池和磷酸铁锂电池谁能赢
XR虚拟现实技术的实际应用-上篇
高通称正与夏普合作开发色彩更明亮的显示技术
作为实现无人驾驶的关键技术 车载激光雷达前途明朗
晶振选型设计必须重视的地方
爆款再发AMD新品!三款RedmiBook锐龙版超划算预售
波轮式洗衣机常见故障检修之波轮不转