Power Role 详细可以分为:
a)Source Only
b)默认Source,但是偶尔能够通过PD SWAP切换为SINK模式
c)Sink Only
d)默认SINK,但是偶尔能够通过PD SWAP切换为Source模式
e)Source/SINK 轮换
f)Sourcing Device (能供电的Device,显示器)
g)Sinking Host(吃电的Host,笔记本电脑)
Type-C的Data/Power Role识别协商/Alt Mode
USB Type-C的插座中有两个CC脚,以下的角色检测,都是通过CC脚进行的,但是对于插头、或者线缆正常只有一个CC引脚,两个端口连接在一起之后,只存在一个CC引脚连接,通过检测哪一个CC有连接,就可以判断连接的方向。如果USB线缆中有需供电的器件,其中一个CC引脚将作为VCONN供电。
CC引脚有如下作用:
a)检测USB Type-C端口的插入,如Source接入到Sink
b)用于判断插入方向,翻转数据链路
c)在两个连接的Port之间,建立对应的Data Role
d)配置VBUS,通过下拉电阻判断规格,在PD协商中使用,为半双工模式
e)配置VCONN
f)检测还有配置其他可选的配置模式,如耳机或者其他模式
连接方向、Data Role、Power Role角色检测
SourceSink Connection

如图所示,Source端CC引脚为上拉,Sink端CC引脚为下拉。握手过程为接入后检测到有效连接(即一端为Host一端为Device),随后检测线材供电能力,再进行USB枚举。
如下图指示了Source端,在连接SINK之前,CC1和CC2的框图模型:

a)Source端使用一个MOSFET去控制电源,初始状态下,FET为关闭状态
b)Source端CC1/CC2均上拉至高电平,同时检测是否有Sink插入,当检测到有Rd下拉电阻时,说明Sink被检测到。Rp的阻值表明Host能够提供的功率水平。
c)Source端根据Cable中哪一个CC引脚为Rd下拉,去翻转USB的数据链路,同时决定另外一个CC引脚为VCONN
d)在此之后,Source打开VBUS,同时VCONN供电
e)Source可以动态调整Rp的值,去表示给Sink的电流发送变化,告知SINK最大可以使用的电流
f)Source会持续检测Rd的存在,一旦连接断开,电源将会被关闭
g)如果Source支持高级功能(PD或者Alternate Mode),将通过CC引脚进行通信
如下图指示了SINK端CC1和CC2框架:

a)SINK的两个CC引脚均通道Rd下拉到GND
b)SINK通过检测VBUS,来判断Source的连接与否
c)SINK通过CC引脚上拉的特性,来检测目前的USB通信链路(翻转)
d)SINK可选地去检测Rp的值,去判断Source可提供的电流。同时管理自身的功耗,保证不超过Source提供的最大范围
e)同样的,如果支持高级功能,通过CC引脚进行通信。
如下图指示DRP的CC引脚在链接之前的架构:

a)当作为Source存在的时候,DRP使用MOSFET控制VBUS供电与否
b)DRP使用Switch去切换自身身份作为Source,或者是SINK
c)DRP存在一套机制,分三种情况,去决定自身是SINK或者是Source,去建立两者间彼此的角色。
情况1:不使用PD SWAP,随机变成Source/SINK中的任意一个,CC脚波形为方波

情况2:自身倾向于作为Source,执行Try.SRC,问对面能不能做SINK呀,我做Source
情况3:与情况2相反,自身倾向作为SINK,执行Try.SNK,你做Source,我做小弟

当然还存在Source&Source,SINK&SINK这种搞基模式,唯一的结果就是一直停留在Unattached.SNK/Unattached.SRC,无法终成眷属。
Type-C的其他模式
Display Port Alternate Mode
系统会通过USB PD协议中VDMs的信息通信(CC引脚通信),去告知支持Display Port模式。在这个模式当中,USB SuperSpeed 信号允许部分传输USB,部分传输DP信号。

Audio Adapter Accessory Mode
如下图,为3.5mm音频输入口转Type-C端口,USB2.0链路被用来传输模拟音频信号,若带MIC,MIC信号则连接在SBU引脚上,在这个模式当中,电源可以提供到500mA电流。
Host端如何识别到音频模式呢?把CC引脚和VCON连接,并且下拉电阻小于Ra/2(则小于400ohm),或者分别对地,下拉电阻小于Ra(小于800ohm),则Host会识别为音频模式。

Debug Accessory Mode (DAM)
在DAM下,连接软体和硬体提供可视化调试和控制的系统,使用较少。
https://zhuanlan.zhihu.com/p/687307921
1 简介
USB Type-C其实是USB的一种接口形态,USB的接口形态可以分为USB Type-A、USB Type-B、USB Type-C,USB Type-A和USB Type-B还有两种不同规格的接口形态,分别是USB Mini-A(B)和USB Micro-A(B)。
越来越多的手机开始采用Type-C作为充电和通信端口,Type-C连接器实物和PIN定义如下图:
Type-C 全称是USB Type-C 接口,是一种全新的 USB 接口形式。USB Type-C接口宽度8.3毫米,厚度2.5毫米,而Micro USB接口宽度7.4毫米,厚度2.35毫米,Type-C比Micro USB接口大稍许,比传统USB纤薄小巧。两者大小对比如下图所示。
区分插头公母的方法有:观察外观形状、检查极性、根据大小和形状区分。以下是详细介绍:
观察外观形状。一般来说,插头的一面是公头,另一面是母头,公头的头部通常带有尖端,而母头的头部则通常带有圆孔。 检查极性。部分插头会在其上标记“J”(公头)和“K”(母头),另外,公头的接触片通常位于内部,而母头的接触片则位于外部。 根据大小和形状区分。通常情况下,母头的尺寸比公头大,公头比母头小,因此,可以通过大小和形状来区分公母。

Type-C插头和插座的管脚线序
Type-C连接器中有两个管脚CC1和CC2,他们用于识别连接器的插入方向,以及不同的插入设备。本文介绍CC的基本识别原理。

Type-C插头和插座的管脚线序

Type-C管脚类型归类
DFP——Downstream Facing Port,也就是Host UFP——Upstream Facing Port,也就是Device DRP——Dual Role port,既可以做DFP,也可以做UFP。

Type-C插头管脚线序
在建立连接之前,DRP的角色在DFP和UPF之间切换。如果两个DRP连接,最先随机到那种角色后开始建立连接,之后可以通过USB协议协商进行动态切换。
虽然USB Type-C插座和插头的两排管脚对称,USB数据信号都有两组重复的通道,但主控芯片通常只有一组TX/RX和D+/-通道(某些芯片有两组TX/RX和D+/-通道)。
由于USB2.0的数据率最高只有480Mbps, 可以不考虑信号走线的阻抗连续性,USB2.0的D+/-信号可以不被MUX控制而直接从主控芯片走线,然后一分二连接至USB Type-C插座的两组D+/-管脚上。
但USB3.0或者USB3.1的数据率高达5Gbps或者10Gbps,如果信号线还是被简单地一分二的话,不连续的信号线阻抗将严重破坏数据传输质量,因此必须由MUX切换来保证信号路径阻抗的一致性,以确保信号传输质量。
下图中右侧所示的MUX从TX1/RX1和TX2/RX2中选择一路连接至主控芯片,而这个MUX就必须被CC管脚控制。
在USB2.0应用中,无需考虑CC方向检测问题,但USB3.0或者USB3.1应用中,必须考虑CC方向检测问题。

注意UFP,比如U盘,移动硬盘内部不需要CC逻辑检测,因为它是上行,只有一对USB2.0或USB3.0信号,如下图

CC信号有两根线,CC1和CC2,大部分USB线(不带芯片的线缆)里面只有一根CC线,DFP可根据两根CC线上的电压,判断是否已经插入设备。通过判断哪根CC线上有下拉电阻来判断方向,下图的说明已经非常清晰。

如果CC1引脚检测到有效的Rp/Rd连接(对应的电压),则认为电缆连接未翻转。 如果CC2引脚检测到有效的Rp/Rd连接(对应的电压),则认为电缆连接已翻转。
“有效的Rp/Rd连接”指在CC上形成了有效的电压。 从DFP的角度看,下表列出了所有可能的连接状态,

以上只是介绍了CC检测中判断是否翻转的原理,两个CC信号还有向UPF通告DFP提供电流能力的功能等,见下文。
DFP的CC1和CC2信号上都必须有上拉电阻Rp,上拉到5V或3.3V。或者CC1和CC2都用电流源上拉。最终的目的是在插入后,能检测到CC1或CC2上的电压,进而判断是否翻转以及DFP的电流能力。如下是所有可能的配置。可以选择右边三列中的任何一列作为上拉方式,比如Fairchild的FUSB300就是用330uA上拉,TI的TUSB320LAI用的是80uA的上拉,不同的上拉方式在CC引脚上形成的电压不同,不同的电压对应不同的电流能力。

UFP的CC1和CC2管脚都要有一个下拉电阻Rd到GND(或者使用电压钳位)。Rd的处理方式如下表。

注意,最后一列的电流源连接至的电压,是指3.1节中表格的最后一列电流源的上拉电压。 结合这个表格,和3.1节的表格,我们把每种可能的上下拉范围都计算出了最终形成的电压范围,如下表。

CC检测芯片会检测这个电压,通过判断电压范围来决定下一步操作。下表是CC管脚上不同的电压对应的DFP能提供的电流能力。第二列列出的每一种电压范围,都分别覆盖了上表计算出的电压。Rp/Ra的计算是同理的。

带电子标签的线缆,其中一个CC管脚被更名为VCONN,用于给电子标签芯片供电。这个VCONN管脚与GND之间需要一个Ra电阻,这个电阻值范围是800Ω~1.2KΩ。
VCONN的允许范围是4.75V~5.5V,要求供电能力是1W。默认情况下DFP提供这个电源。如果两个DRP连接,则双方可以通过USB PD协议协商来交换VCONN供电方。 支持PD的USB3.0接口均需支持VCONN,可以通过下面两种方式之一提供VCONN电源。
如果其中一个CC引脚上检测到有效的Rp/Rd连接,则VCONN电源可以接到另一个对应的CC引脚。 如果其中一个CC引脚上检测到有效的Rp/Rd连接,先检查另一个CC引脚是否也有Rp/Ra连接,然后再提供VCONN。 先检测是否有Ra存在,如果有说明需要Vconn供电,此时再提供Vconn。检测过程不需要Vconn存在。 注意,每一个CC引脚内部都有一个开关,轮训CC和VCONN功能,下图是一个典型的连接方式:

现实中,我们的手机都是DRP,既能做DFP,又能做UFP,那么是如何切换呢? DRP在待机模式下每50ms在DFP和UFP间切换一次。当切换至DFP时,CC管脚上必须有一个上拉至VBUS的电阻Rp或者输出一个电流源,当切换至UFP时,CC管脚上必须有一个下拉至GND的电阻Rd。此切换动作必须由CC Logic芯片来完成。当DFP检测到UFP插入之后才可以输出VBUS,当UFP拔出以后必须关闭VBUS。此动作必须由CC Logic芯片来完成。下面是一个CC逻辑芯片框图,CC上有一个开关,在不断切换功能。

这个是由USB-IF制定的单线协议,在CC线上传输,用于协商供电角色,电压,最大供电能力,数据角色,备用模式等,端口与供电电缆之间的通信业通过PD协议进行。协议不做展开,详见USB-IF官网。下面是协议的几个特点:
1.所有通信均通过CC线。 2.DFP是总线主设备,用于发起所有通信。 3.所有消息均采用32bit 4b/5b编码的双向标记编码(Bi-phase Mark Coded,BMC) 4.波特率300K 5.CRC32错误检验+消息重试
线缆至少支持10000次拔插。 不规定信号线规,但是必须保证USB2.0和USB3.0的信号完整性 CC和SUB1/SUB2线上的阻抗不大于50Ω GND返回路径上的最大IR压降为250mV Vbus上的最大IR压降为500mV USB Type-C规范中并未明确规定线缆长度,但是电器要求产生了一些物理限制。USB3.1 Type-C转Type-C电缆组件在5GHz下的插入损耗指定为为-6dB,从而将电缆长度有效限制为1米。USB3.0 Type-C转Type-C电缆组件在5GHz下的插入损耗指定为为-7dB,从而将电缆长度有效限制为2米。

如果Type-C数据线上带了芯片(我们称之为电子标签),这个芯片可以通过USB供电规范2.0 BMC协议与USB端口通信。电子标签电缆可用VCONN供电,也可以直接由Vbus供电,最高可消耗70mW的功率。如下类型的电缆必须要电子标签:
兼容USB3.1的USB Type-C电缆 100W供电电缆。能够实现60W以上功率承载能力的任何电缆都必须有电子标签,并且能够与DFP端口通信。 带电子标签的电缆如果插入不支持USB供电规范2.0的插座中,其行为与标准的无源电缆完全相同。
Type-C接口的数字耳机是一个UFP(Device),手机是DFP。耳机的CC1和CC2引脚上必须有Rd,实际上,乐视数字耳机的CC管脚上有一颗5.1K电阻。

模拟耳机与Type-C接口的转接线
协议要求模拟耳机转接线上把两个CC引脚直接接到GND(必须小于Ra)。


逻辑框图
USB Type-C数据线除了充电传输数据,还可以传输音视频等,很多安卓手机不但用Type-C接口替代了传统的Micro USB而且还取消了3.5mm耳机插孔。对于这样的手机要使用耳机只能用Type-C转3.5mm耳机转换线,经过研究Type-C接口定义和相关资料,发现Type-C输出音频和接收话筒信号对应的针脚,如下图所示。6、7、8针脚对应右声道、左声道、话筒麦克风,1脚对应耳机的GND。

Type-C输出音频和接收话筒信号对应的针脚
手机上用的耳机都是三节四段式,有四根电缆,分别是GND(地)、Mic(话筒麦克风)、L(耳机左声道)、R(耳机右声道)。用万用表测量多种耳机,大部分是第一种接法,只有诺基亚是第二种接法。如下图所示。注意下图与上图中Type-C各针脚对应关系。

三节四段式耳机插头的管脚图
这样搞清楚了,Type-C各针脚与耳机话筒、耳机左右声道对应关系,就可以动手做一条USB Type-C转3.5mm耳机转接线。体验DIY的乐趣,享受成功的喜悦。注意手机随机的Type-C数据线基本都是缩水的部分针脚缺失,改造之前看一下需要的针脚是否完整。另外USB Type-C插头的针脚较多,非常密集手工焊接存在一定难度,请量力而行。
这一类的机型包括小米note3,华为p20pro,坚果锤子等(数字耳机就是一个usb从设备)。

电路板设计有一个耳机自动切换ic,当模拟耳机插入时,模拟耳机的左右声道接在usb+、usb-,因此需要切换开光,如DIO3202A,vbus电平为高,芯片切换到usb通路,vbus电平为低,切换到耳机通路,当数字耳机插入时,type-c逻辑芯片检测到从设备,cpu上的usb切换到主模式,并提供5v(vbus)给从设备供电,完成相应的数字信号传输。

兼容模拟耳机的原理,typec逻辑芯片会识别成不同的设备(数字耳机,usb设备 模拟耳机 音频配件)(也可以使用mic来识别耳机的插拔 原理: 模拟耳机接入耳机后由于vbus没电,耳机逻辑ic选择耳机通道,耳机mic检测脚初始化为高,当模拟耳机插入后,mic相当于一个1k的电阻,由于分压,mic脚的电压会拉低,mic_det脚所在的pmic上的内部电压比较器检测到了电平变化进一步触发了耳机mic的中断,进一步判断耳机的类型,从而识别达到耳机)。
因为TypeC接口有6P、16P、24P等各种,其中6P只能供电,16P除了供电还有USB2.0的D+和D-引脚,24P包含了全功能USB3.0各个引脚。电路图如下:
一般单片机可用下面这种电路。
如果想精简电阻,也可以这样:
当供电端不带USB控制芯片时,CC1和CC2可共用一个下拉电阻,此时供电端CC2连接是断开的。但是当使用带Emark的USB控制芯片时,就不行了,此时单片机会被当做模拟音频设备(耳机)而被拒绝供电。
参考:
从树莓派4 USB-C接口设计失误看嵌入式系统的接口升级
CC1和CC2共用一个下拉电阻的问题
经过实际测试发现,树莓派4上面的这个USB-C接口,其CC1和CC2是连接在一起的,并共用了一颗5.1k的电阻下拉到地。这个设计看似非常巧妙,USB-C接口的控制做到了极致简单,只需要一颗5.1k下拉电阻。当外接的USB-C Cable是不带Emark芯片的情况下,确实可以正常工作。因为这类USB-C Cable的CC2是悬空的,只有CC1有连接到对端,所以,这种Cable跟RaspBerry 4B的USB-C接口母座一连起来,就非常好的符合了Sink端的设计规范,即CC1上,有一个5.1k的电阻下拉到地。

树莓派4B在使用不带Emark 芯片的连接线时的连接情况
但是,USB TYPE-C规范里面,还规定了一种带Emark 芯片的Cable,这种Cable的CC2上,有一个1K的下拉电阻,用来告知DFP端的CC识别芯片,需要往CC2上提供VCONN Source。一旦跟这样的Cable连接起来,RaspBerry 4 Pi model B就会出现严重问题。因为CC1和CC2连接起来后,会跟Cable上的1K到地电阻并联,形成一个比1k电阻还小的阻抗,从而满足了USB-C规范中Audio Adapter Accessory Mode的连接规范,被电源端误认为是一个模拟耳机设备,从而拒绝供电。

树莓派4B在使用带Emark 芯片的连接线时的连接情况
通过上图我们可以看到,Emark 连接线上的1k电阻会导致,CC1建立失败,1k电阻和5.1k电阻的并联,会导致RaspBerry 4B被认为是一个Audio Adapter Accessory Mode。解决这个问题的方法也很简单,只需要在CC1和CC2上各接一个5.1K电阻到地,互相独立就行了。这一点可以搜索一下笔者在2015年的原创文章《你真的需要TYPE-C芯片吗》。这篇文章为大家提供了判断系统是否需要使用USB-C 控制芯片的三个原则和两个实现方法。
RaspBerry 4B在USB-C接口上的设计,其实属于入门级设计,因为这个接口仅仅用来进行5V供电和一个USB2.0 通信而已,并无复杂的音视频及USB3.0功能。在实际的嵌入式开发中,一个USB-C接口的功能,可能远不止于此。下面我们就大功率供电供电、高速信号传输、双C口DRP控制三点进行阐述。
一般单片机可用下面这种电路:
同理,也可以将CC1和CC2共用一个5.1K的下拉电阻。
用24PIN的TypeC时,一般是需要用到USB3.0协议,则TypeC接口中的A2、A3、A10、A11、B2、B3、B10、B11接到相应芯片的USB3.0接口上,将CC1和CC2按相应角色进行上拉下拉或者接到芯片上即可。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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)是为了锁定接收端,预示发送端将要有数据到达,前导码由64位交替的‘0’和‘1’组成,以'0'开始,以'1'结束。
所有的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'不同。

数据包使用SOP'或SOP'',则说明是Source与E-Marker之间的通信过程,不同的是,SOP'体现的是Source与线材近端E-Marker的通信,SOP''体现的是Source与线材远端E-Marker的通信。
功能码长度16-bits,通常包含数据包类型、端口角色(UFP/DFP)、PD协议版本等信息,功能码的组成如下图所示。

从列表中可以看出,不同的功能码需要特定的SOP*,这个在之前也有提到,下面介绍一些常用的功能码。
Extended是用来表示该数据包是否包含外部指令的功能码,该位置1,表示数据包中存在外部指令,反之则没有。如果数据包中包含外部指令,指令内容会跟在功能码后面进行传输。USB PD协议的外部指令使用的比较少,在这里就不做详细的介绍了。
当Extended置0时,Number of Data Objects才可以使用,该功能码有3-bits,用来表示功能码后跟的数据的位数,如果Number of Data Objects置0,则表示功能码后没有数据,该数据包为控制消息。如果该功能码置1,则表示该数据包为数据消息。
这两个功能码都是表示端口的电源角色(Source/Sink)和数据角色(DFP/UFP),该位置1时表示Source/DFP,该位置0表示Sink/UFP。
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端。

数据码只有在数据包类型为数据消息时才会使用,具体的数据内容需要根据指令的内容改变,例如在使用Source_Capabiliities消息指令时,数据码就会存放Source的供电能力。数据码同样需要使用4b5b进行编码。
功能码和数据码都需要由32bits的CRC校验进行保护,校验码的生成机制比较繁琐,一般都会使用查表的方式实现,在这里也不做详细的介绍了,感兴趣的小伙伴可以参考USB IF协会的官方文档。
结束码表示整个数据包的结束,在4b5b编码表中可以找到对应的5b编码,为01101。
在USB PD协议的数据包中,除了前导码(Preamble)之外,其他部分均需要使用4b5b编码,官方的说法是为了降低接收端设计的复杂度,提高接收端设计的自由度。4b5b编码的原理是建立一个4b5b编码表,将4-bits的数据与5-bits的数据进行对应,发送端根据编码表对4-bits数据进行编码,接收端根据编码表对5-bits数据进行解码,编码表的具体内容如下图所示。

从图中可以看出,除了基本的hex数据外,还定义了一些特定的编码,如Sync-1、RST-1等,这些特定的编码会组成SOP*,在介绍USB PD协议数据格式时也有提到。另外,编码表中还预留了多个未定义的5b编码,可以作为的扩展指令使用。
USB PD协议的数据包中,所有的数据都需要使用BMC进行编码,BMC编码属于物理层的操作,经过编码之后的数据通过CC线进行传送。

上图为BMC编码的示例,BMC编码规则是曼切斯特编码的一个版本,按照脉宽来设定的0和1,从示例中可以看到,在一个周期里有高低电平变化为1,否则为0。
以上详细介绍了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协议认证协商的过程。
我们知道,不同的设备需要不同的充电电压、电流,手机需要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,开始对设备进行快充。
前面详细介绍了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协议的安全性主要取决于芯片厂商的取舍,以上三种形态都在一定程度上牺牲了产品的功能性或者安全性,至于如何去平衡功能性和安全性,这是开发人员和安全研究人员一直需要思考和面对的问题,我们要知道, 没有绝对的安全 。
一、Type-C简介以及历史
自1998年以来,USB发布至今,USB已经走过20个年头有余了。在这20年间,USB-IF组织发布N种接口状态,包括A口、B口、MINI-A、MINI-B、Micro-A、Micro-B等等接口形态,由于各家产品的喜好不同,不同产品使用不同类型的插座,因此悲剧来了,我们也要常备N中不明用途的接口转接线材。

图1 USB协议发布时间节点
而对于Type-C来说,看起来USB标准化组织也是意识到统一和标准化问题,在定义标准时,除了硬件接口定义上,还增加了一部分“个性化”特点。分别是什么呢?
1.1 定义了全新的接口形态
接口大小跟Micro USB相近,约为8.3mm x 2.5mm,支持正反插,同时也规范了对应的线材,接口定义如下(线材端只有一对USB2.0 DATA):


在插座定义上,定义了如下两种插座:
a)全功能的Type-C插座,可以用于支持USB2.0、USB3.1、等特性的平台和设备。
b)USB 2.0 Type-C插座,只可以用在支持USB2.0的平台和设备上。
在插头定义上,定义了如下三种插头:
a)全功能的Type-C插头,可以用于支持USB2.0、USB3.1、等特性的平台和设备。
b)USB 2.0 Type-C插头,只可以用在支持USB2.0的平台和设备上。
c)USB Type-C Power-Only插头,用在那些只需要供电设备上(如充电器)。
在线缆定义上,定义了如下三种线缆:
a)两端都是全功能Type-C插头的全功能Type-C线缆。
b)两端都是USB 2.0 Type-C插头的USB 2.0 Type-C线缆。
c)只有一端是Type-C插头(全功能Type-C插头或者USB 2.0 Type-C插头)的线缆。
还定义了N种为了兼容旧设备的线缆:
a)一种线缆,一端是全功能的Type-C插头,另一端是USB 3.1 Type-A插头。
b)一种线缆,一端是USB 2.0 Type-C插头,另一端是USB 2.0 Type-A插头。
c)一种线缆,一端是全功能的Type-C插头,另一端是USB 3.1 Type-B插头。
d)一种线缆,一端是USB 2.0 Type-C插头,另一端是USB 2.0 Type-B插头。
e)一种线缆,一端是USB 2.0 Type-C插头,另一端是USB 2.0 Mini-B插头。
f)一种线缆,一端是全功能的Type-C插头,另一端是USB 3.1 Micro-B插头。
g)一种线缆,一端是USB 2.0 Type-C插头,另一端是USB 2.0 Micro-B插头。
h)一种适配器,一端是全功能的Type-C插头,另一端是USB 3.1 Type-A插座。
i)一种适配器,一端是USB 2.0 Type-C插头,另一端是USB 2.0 Micro-B插座。
以上这些线材,我们知道,Type-A接的是HOST,所以转接线中,CC引脚需要接上拉电阻。Type-B接的是Device,因此CC引脚需要接下拉电阻。
其中,具备全功能的Type-C应该具备E-Marker功能,由于具备E-Marker,线缆能够被读到其带电流的能力、特性、线材ID等等。E-Marker的供电电源来自于VCONN,如何知道线缆需要VCONN呢?线缆会通过下拉的电阻Ra,Source检测到之后会提供VCONN。
1.2传输速率,供电效能
最大传输速度10Gb/s,即是USB 3.1 Gen2标准,也支持4 Lane DP模式,传输高清图像,在供电部分,最大可以支持100W(20V/5A)
1.3 “个性化”协商机制
由于端口一致,线材两端接口也一直,为了能够区分两端USB设备的角色(Host/Device),必须有一套协商机制,便于进行角色确认,这部分通过CC(Configuration Channel)管脚进行设置。后面随着PD规范的面世,CC脚开始被用来做简单的半双工通信,用来完成POWER供给的协商
1.4 强悍的一统天下的态势
由于Type-C的扩展功能(SBU1/SBU2),大部分配件诸如耳机、视频接口、Debug接口等等都可以实现兼容设计,成功逆袭以往所有的USB标准,成功上位!
二、Type-C Port的Data Role、Power Role
2.1 Type-C的 Data Role
在USB2.0端口,USB根据数据传输的方向定义了HOST/Device/OTG三种角色,其中OTG即可作为HOST,也可作为Device,在Type-C中,也有类似的定义,只是名字有了些许修改。如下所示:
(1)DFP(Downstream Facing Port):
下行端口,可以理解为Host或者是HUB,DFP提供VBUS、VCONN,可以接收数据。在协议规范中DFP特指数据的下行传输,笼统意义上指的是数据下行和对外提供电源的设备。
(2)UFP(Upstream Facing Port):
上行端口,可以理解为Device,UFP从VBUS中取电,并可提供数据。典型设备是U盘,移动硬盘。
(3)DRP(Dual Role Port):请注意DRP分为DRD(Dual Role Data)/DRP(Dual Role Power)
双角色端口,类似于以前的OTG,DRP既可以做DFP(Host),也可以做UFP(Device),也可以在DFP与UFP间动态切换。典型的DRP设备是笔记本电脑。设备刚连接时作为哪一种角色,由端口的Power Role(参考后面的介绍)决定;后续也可以通过switch过程更改(如果支持USB PD协议的话)。
2.2 Type-C的Power Role
根据USB PORT的供电(或者受电)情况,USB Type-C将port划分为Source、Sink等power角色
如下图显示常用设备的Data Role和Power Role
Power Role 详细可以分为:
a)Source Only
b)默认Source,但是偶尔能够通过PD SWAP切换为SINK模式
c)Sink Only
d)默认SINK,但是偶尔能够通过PD SWAP切换为Source模式
e)Source/SINK 轮换
f)Sourcing Device (能供电的Device,显示器)
g)Sinking Host(吃电的Host,笔记本电脑)
三、Type-C的Data/Power Role识别协商/Alt Mode
USB Type-C的插座中有两个CC脚,以下的角色检测,都是通过CC脚进行的,但是对于插头、或者线缆正常只有一个CC引脚,两个端口连接在一起之后,只存在一个CC引脚连接,通过检测哪一个CC有连接,就可以判断连接的方向。如果USB线缆中有需供电的器件,其中一个CC引脚将作为VCONN供电。
3.1 CC引脚有如下作用:
a)检测USB Type-C端口的插入,如Source接入到Sink
b)用于判断插入方向,翻转数据链路
c)在两个连接的Port之间,建立对应的Data Role
d)配置VBUS,通过下拉电阻判断规格,在PD协商中使用,为半双工模式
e)配置VCONN
f)检测还有配置其他可选的配置模式,如耳机或者其他模式
3.2 连接方向、Data Role、Power Role角色检测
3.2.1 SourceSink Connection
如图所示,Source端CC引脚为上拉,Sink端CC引脚为下拉。握手过程为接入后检测到有效连接(即一端为Host一端为Device),随后检测线材供电能力,再进行USB枚举。
如下图指示了Source端,在连接SINK之前,CC1和CC2的框图模型:
a)Source端使用一个MOSFET去控制电源,初始状态下,FET为关闭状态
b)Source端CC1/CC2均上拉至高电平,同时检测是否有Sink插入,当检测到有Rd下拉电阻时,说明Sink被检测到。Rp的阻值表明Host能够提供的功率水平。
c)Source端根据Cable中哪一个CC引脚为Rd下拉,去翻转USB的数据链路,同时决定另外一个CC引脚为VCONN
d)在此之后,Source打开VBUS,同时VCONN供电
e)Source可以动态调整Rp的值,去表示给Sink的电流发送变化,告知SINK最大可以使用的电流
f)Source会持续检测Rd的存在,一旦连接断开,电源将会被关闭
g)如果Source支持高级功能(PD或者Alternate Mode),将通过CC引脚进行通信
如下图指示了SINK端CC1和CC2框架:
a)SINK的两个CC引脚均通道Rd下拉到GND
b)SINK通过检测VBUS,来判断Source的连接与否
c)SINK通过CC引脚上拉的特性,来检测目前的USB通信链路(翻转)
d)SINK可选地去检测Rp的值,去判断Source可提供的电流。同时管理自身的功耗,保证不超过Source提供的最大范围
e)同样的,如果支持高级功能,通过CC引脚进行通信。
如下图指示DRP的CC引脚在链接之前的架构:
a)当作为Source存在的时候,DRP使用MOSFET控制VBUS供电与否
b)DRP使用Switch去切换自身身份作为Source,或者是SINK
c)DRP存在一套机制,分三种情况,去决定自身是SINK或者是Source,去建立两者间彼此的角色。
情况1:不使用PD SWAP,随机变成Source/SINK中的任意一个,CC脚波形为方波
情况2:自身倾向于作为Source,执行Try.SRC,问对面能不能做SINK呀,我做Source
情况3:与情况2相反,自身倾向作为SINK,执行Try.SNK,你做Source,我做小弟
当然还存在Source&Source,SINK&SINK这种搞基模式,唯一的结果就是一直停留在Unattached.SNK/Unattached.SRC,无法终成眷属。
3.3 Type-C的其他模式
3.3.1 Display Port Alternate Mode
系统会通过USB PD协议中VDMs的信息通信(CC引脚通信),去告知支持Display Port模式。在这个模式当中,USB SuperSpeed 信号允许部分传输USB,部分传输DP信号。

3.3.2 Audio Adapter Accessory Mode
如下图,为3.5mm音频输入口转Type-C端口,USB2.0链路被用来传输模拟音频信号,若带MIC,MIC信号则连接在SBU引脚上,在这个模式当中,电源可以提供到500mA电流。
Host端如何识别到音频模式呢?把CC引脚和VCON连接,并且下拉电阻小于Ra/2(则小于400ohm),或者分别对地,下拉电阻小于Ra(小于800ohm),则Host会识别为音频模式。

3.3.3 Debug Accessory Mode (DAM)
在DAM下,连接软体和硬体提供可视化调试和控制的系统,使用较少。
四、如何进行数据链路的切换
4.1 纯USB3.0
以TUSB546(DFP),TUSB564(UFP)为例子
前者的使用例子如笔记本电脑、后者的使用例子如Monitor
如下图,两端设备会根据插入方向,切换数据链路。图X插入连接为CC1,因此TUSB564切换到TX1/RX1

图中插入连接为CC2,因此TUSB564切换到TX2/RX2,也就是根据CC引脚插入,识别插入方向

4.2 USB3.1和2 LANE of DisplayPort
切换原理如上,需要注意的是,DP信号是使用TX/RX进行传输,DP的AUX是通过SBUx进行传输

4.3 纯DP模式 4 lane

问题思考:如何确定是DP 4 lane模式或者是DP 2 lane+USB3.0 模式?
通过CC引脚,利用PD协议沟通,协商,PD Controler 发起请求,并得到回应
五、相关参数/名词解释 5.1 上拉电阻Rp
Rp有6个参数(5V档位和3.3V档位各3个),指示着不同的供电能力。
5.2 下拉电阻Rd
都是5.1K电阻下地,能否检测电源供电能力,取决于电阻的精度。
5.3 线材中的下拉电阻Ra
最小值800 ohm,最大值1.2K
5.4 名词/连接状态解释
名词:
Alternate Mode Adapter(AMA):支持PD USB交替模式的设备,作为UFP存在
Alternate Mode Controller (AMC):支持PD USB交替模式的主机,作为DFP存在
Augmented Power Data Object(APDO):体现Source端的供电能力或者Sink的耗电能力,是一个数据对象
Atomic Message Sequence(AMS):一个固定的信息序列,一般作为PE_SRC_Ready, PE_SNK_Ready or PE_CBL_Ready的开始或者结束
Binary Frequency Shift Keying (BFSK):二进制频移键控
Biphase Mark Coding(BMC):双相位标识编码,通过CC通信
Configuration Channel (CC):配置通道,用于识别、控制等
Constant Voltage (CV):恒定电压,不随负载变化而变化
Current Limit (CL):电流限制
Device Policy Manager(DPM):设备策略管理器
Downstream Facing Port(DFP):下行端口,即为HOST或者HUB下行端口
Upstream Facing Port(UFP):上行端口,即为Device或者HUB的上行端口
Dual-Role Data (DRD):能作为DFP/UFP
Dual-Role Power (DRP):能做为Sink/Source
End of Packet (EOP):结束包
IR Drop:在Sink和Source之间的电压降
Over-Current Protection(OCP):过流保护
Over-Temperature Protection(OTP):过温保护
Over-Voltage Protection(OVP):过压保护
PD Power (PDP):Source的功耗输出,由制造商在PDOs字段中展示
Power Data Object (PDO):用来表示Source的输出能力和Sink的消耗能力的数据对象
Programmable Power Supply (PPS):电源输出受程序控制
PSD:一种吃电但是没有数据的设备,如充电宝
SOP Packet:Start of Packet,所有的PD传输流程,都是以SOP Packet开始,SOP*代表SOP,SOP’,SOP’’
Standard ID(SID):标准ID
Standard or Vendor ID(SVID):标准或产商ID
System Policy Manager(SPM):系统策略管理,运行在Host端。
VCONN Powered Accessory(VPA):由VCONN供电的附件
VCONN Powered USB Device(VPD):由VCONN供电的设备
Vendor Data Object (VDO):产商特定信息数据对象
Vendor Defined Message(VDM):产商定义信息
Vendor ID (VID):产商ID
状态:
Disabled State:从CC引脚移除终端,如果不支持该状态,那么该端口在上电后直接是Unattached.SNK或Unattached.SRC,该状态端口不会驱动VBUS或VCONN,CC1和CC2会呈现高阻到地 ErrorRecovery State:从CC1和CC2引脚移除终端,接下来会根据端口类型转化为Unattached.SNK或Unattached.SRC,这相当于强制断开连接事件,并寻找一个新的连接。如果该状态不支持,则转化为支持的disabled状态,如果disabled状态也不支持,则转化Unattached.SNK或Unattached.SRC。,该状态端口不会驱动VBUS或VCONN,CC1和CC2会呈现高阻到地 Unattached.SNK State:端口等待检测到Source的出现,一个端口Dead Battery不供电时候进入这个状态,端口不能驱动VBUS和VCONN,CC1和CC2分别地通过Rd终止到地,当Source连接检测到会转化为AttachWait.SNK,意味着在一个CC引脚上有SNK.Rp。USB 2.0不支持USB PD可能在VBUS检测到直接转化到Attached.SNK AttachWait.SNK State:端口检测到SNK.Rp状态在一个CC引脚上,并等待VBUS。端口不驱动VBUS或VCONN Attached.SNK State:端口连接上了,并作为Sink操作,如果初始化进入这个状态同样作为UFP操作,Power和Data的状态改变可以通过USB PD Command。直接从Unattached.SNK转化过来是通过检测VBUS,不确定方向和可用的高于默认的USB Power Try.SRC State:端口查询决定伙伴端口是否支持Sink,不驱动VBUS和VCONN,端口要在CC1和CC2上分别Source电流 TryWait.SNK State:端口成为Source失败,准备连接成Sink,不支持VBUS或VCONN,CC1和CC2分别通过Rd终止 Try.SNK State:端口查询决定伙伴端口是否支持Source TryWait.SRC State:端口成为Sink失败,准备连接成Source
PD协议是Power Delivery,简单来说是一种快速充电标准。
包含PD协议的Type-C 系统从Source到SINK的系统框图大致如下:

在Source的内部包含了一个电压转换器,且受到PD控制器控制,他会根据输入电压的条件以及最高可输出规格需求,此电压转换器可以是BUCK、Boost、Buck-Boost或者反激转换器。整个通信过程都在PD控制器的管控之下,USB PD还有一个开关,用于切换VCONN电源(电缆包含电子标签时用到)。
当电缆接通之后,PD协议的SOP通信就开始在CC线上进行,以此来选择电源传输的规格,此部分由Sink端向Source端询问能够提供的电源配置参数(5V/9V/12V/15V/20V)。
如下波形为SINK 控制器申请一个9V电压输出的例子。

(1)SINK端发起SOP,申请获取Source能提供的规格资料
(2)Source回复能提供的规格列表
(3)SINK回复选择的电压规格,并带上所需要的电流参数,并发出相应的请求
(4)Source接受请求,并且把VBUS由5V抬升到9V
(5)在电压变化期间,SINK的电流会保持尽可能小,Source端VBUS到达9V并稳定之后,会发出Ready信号
(6)SINK端电流逐步抬升,若SINK需要降低电压,会重复以上过程
需要注意的是,在电压下降期间,Source为了让电压快速降低,Source会打开放电电路,达到额定值之后,Source会等待一段时间,电压稳定之后再发出Ready信号给SINK。
这种沟通方式的好处就是能确保任何电源的变化都能在SINK和SOURCE的规格范围内,避免出现不可控情况。
PD协议的通信编码为Bi-phase Mark Coded (BMC),通过CC脚进行通信,如下图。

BMC码是一种单线通信编码,数据1的传输,需要有一次高/低电平之间的切换过程,而0的传输则是固定的高电平或者低电平。每一个数据包都包含有0/1交替的前置码,起始码(SOP),报文头,数据位,CRC以及结束码(EOP)

如下图所示,展开后的CC脚PD通信波形

BMC编码的通信,也可以使用分析仪进行分析,用来抓取每个数据包,并且获得数据包的作用,如电压电流等。

PD3.0规范中,定义了以下电源配置清单:

对于5V/9V/15V来说,最大的电流为3A,在20V的配置当中,如果是普通的电流,则最大能够支持20V/3A,即60W,如果使用的是带了E-Marker的线缆,则供电能达到20V5A,即100W。
支持超高速数据传输(USB3.1)或者是供电电流超过3A,电缆都必须使用E-Marker进行标识。线缆中有IC,他们需要从VCONN获得电源。

我们注意到,线缆中有1K的下拉电阻Ra,这样在线缆插入的时候,Source会识别到CC1和CC2电压下降的情况,具体的电压会告诉主机那个端子被Sink的5.1K下拉,那个端子被线缆的1K电阻下拉。因此线缆的插入方向也可以被识别到。Source就可以通过开关,给E-Marker提供VCONN。
如下图为带E-Marker的情况:

(1)电缆接通之后,Source的一根CC线被来自VCONN的1K拉低
(2)Source检测到此电压,知道电缆中有E-Marker,因此切换VCONN到对应的CC引脚
(3)在之后,PD通信将会包含Source和E-Marker之间的通信(SOP'&SOP'')Source和Sink之间为SOP
当设备为DRP时,设备的CC1和CC2为方波,一旦连接,CC端都会发生改变。

在本次连接当中,左边的DRP做了Source,右边的DRP作为SINK,也有可能翻转过来。也可以本来就设定SOURCE或者SINK优先。
连接之后,想翻转也是允许的,只要发起角色变换请求就可以了。
1、快充协议简介
快充,顾名思义就是给手机快速充电,通过软/硬件技术手段,调整手机的电压与电流的输入值,进而缩短手机的充电时间,打破以往传统的5V/1A模式。提升充电速度的方式无非三种:电流不变,提升电压;电压不变,提高电流;电压、电流两者都提高。
随着市场的需求扩张,目前市面上高电压恒定电流、低电压高电流、高电压高电流三种模式都已经出现并完善起来。对于这三种模式,每个厂商都有不同的选择,因此衍生出了多种快充协议。目前较为主流的有PD快充,高通的QC2.0/3.0,联发科的PE协议,oppo、vivo的闪充、华为的SCP等。为规范快充标准,USB-IF(USB标准化组织)发布了USB PD 3.0的重要更新,旨在一统快速充电技术规范方案,并且不允许USB接口通过非USB PD协议进行电压调整,而谷歌也宣布Android7.0以上的手机搭载的快充协议必须支持PD协议,更是加快了PD一统快充协议江湖。下面我们就以USB-PD为例,带你全面认识手机快充。
2、USBPD充电原理
USB-PowerDelivery(USBPD)是由USB-IF组织制定的目前主流的快充协议之一,它可以使目前默认最大功率5V/2A的type-c接口提高到100W功率。并且可以进行双向甚至组网的电能传输,具备系统级供电方案。

图1 USBPD通信线缆
USBPD通信通过VBUS上交流耦合的FSK信号的调制(24MHz)进行半双工通信,从而实现手机和充电器的充电过程。
SOURCE端和SINK端分别代表适配器端和手机内部芯片SINK控制器,从USB通信传输角度可以理解为USBHOST(主设备)和USBOTG(做从设备)。
当电缆接通之后,PD协议的SOP通信就开始在CC线(type-c接口通信配置通道)上进行,以此来选择电源传输的规格,此部分由SINK端向SOURCE端询问能够提供的电源配置参数(5V/9V/12V/15V/20V)。

图2 包含USBPD协议的Type-c系统充电原理框图
以手机端和适配器的9V充电为例,整体过程如下:
USB OTG端(从设备:适配器端)监控VBUS上电压状态,如果有VBUS的5V电压存在并且检测到OTG的ID脚是1K下拉电阻则说明该电缆支持USBPD通信,此时通信过程开始。

图3 PD通信波形电平变化
(1)SINK端发起SOP(起始段),启动SOURSE端USBPD设备管理器,申请获取SOURSE端能提供的规格资料;
(2)SOURCE端回复能提供的规格列表,即根据USBPD规范解析该消息得出适配器所支持的所有电压和电流列表对;
(3)SINK端回复选择的电压规格,即选择一个电压和电流对,并带上所需要的电流参数,发出相应的请求;
(4)SOURSE端适配器内部解码转换后接受请求,调整适配器输出,把VBUS线缆上由5V抬升到9V;
(5)手机收到消息后,SINK端会调整充电电压和电流,待SOURSE端的VBUS线缆到达9V并达到稳定进行充电;
手机在充电过程中可以动态发送消息来请求充电器改变输出电压和电流,从而实现快速充电的过程。
3、USB PD协议解析规划
PD协议的通信编码为Bi-phase Mark Coded (BMC),通过CC脚进行通信,如图所示。

图4 BMC通信线缆
BMC码是一种单线通信编码,数据1的传输,需要有一次高/低电平之间的切换过程,而0的传输则是固定的高电平或者低电平。每一个数据包都包含有0/1交替的前置码,所有的PD传输流程,都是以SOP Packet开始,起始码(SOP),报文头,数据位,CRC以及结束码(EOP)。

图5 PD传输数据
BMC编码的通信,从数据流的测试节点开始,可以使用分析仪进行分析,也可以用带有协议解码功能的示波器进行直接解码,抓取每个数据包,并且获得数据包的报文参数。

图6 协议规划
如图所示即为使用示波器在测试节点所获取的CC脚上PD通信波形。由此可看出,BPD协议的位数较多,解码较为复杂,而通过示波器的协议解码功能,可将完整报文在短时间内迅速解出,大大提升了工程师的工作效率以及直观的体验。

图7 ZDS示波器 USBPD解码

图8 PD协议控制下的电压抬升过程

图9 用双ZOOM模式分析PD各段解码协议
目前ZDS系列示波器不仅能够支持USBPD的协议解码,并且也支持QC2.0/3.0协议的解码,可以满足目前主流快充协议的解码需求,并且在其高达512M的大存储机制下,可支持超长时间的解码还原真实波形,完整监控通信过程;且具有双ZOOM分析功能,可用主时基捕获需要统计数据的波形,通过Zoom1定位一段时间的特征值,再由Zoom2放大波形细节,观测瞬时信号变化,大大提升了工程师的测试便捷性。