第三章 PD协议基础概念:角色、Vconn与CC线
做USB PD这行,我经常看到有人问一个问题:PD协议到底在干什么?往简单了说,就是弄清楚三件事——谁给电、谁用电、谁说了算。然后再加上一根神奇的线叫CC,把这些信息传过去。今天我就把这几个核心概念掰碎了讲清楚。
电源角色:Source与Sink
电源角色其实很直观,说白了就是谁供电、谁受电。
- Source(供电方):提供VBUS电源,典型代表是个充电器、移动电源、扩展坞。
- Sink(受电方):从VBUS取电,典型代表是手机、平板、笔记本(电池侧)。
但你想想看,一个设备能不能两种角色都能当?比如一台笔记本电脑。插上充电器它是Sink,接上显示器给显示器供电时它又成了Source。PD协议允许设备动态切换电源角色,这在后面的DRP部分会讲。
避坑指南:我在项目里遇到过,有些早期的Type-C设备固件里写死了电源角色,插上只能充电不能放电。一接扩展坞就爆错码,最后追了几个晚上,才发现是角色描述符没配成DRP。
Source和Sink之间的功率协商通过PD协议消息进行,我们后面章节会详细介绍握手流程。这里先记住一句话:没有定下角色,就无法协商电压电流。
| 特性 | Source(供电方) | Sink(受电方) |
|---|---|---|
| 输出VBUS | 是 | 否 |
| 可以请求功率 | 否 | 是 |
| 典型设备 | 充电器、扩展坞、车充 | 手机、笔记本、平板 |
| DRP(双角色) | 可动态切换 | 可动态切换 |
数据角色:DFP、UFP与DRP
数据角色和电源角色是两个独立的维度。数据角色解决的是“谁当主机、谁当设备”的问题。
- DFP(下行端口):类似Host,提供数据通信时充当主控。通常是电脑、扩展坞主机端。
- UFP(上行端口):类似Device,是DFP的数据从属。比如U盘、键盘、鼠标。
- DRP(双角色端口):既可以当DFP,也可以当UFP。比如手机,连电脑是UFP,连U盘是DFP。
我自己的经验是,DRP设备启用的策略非常重要。如果你写过Type-C的嵌入式固件,肯定调过CC线状态机来决定角色。
小技巧:实际调试时,可以用一个带USB PD分析仪的USB硬件抓CC线上的状态流转。我当时就是靠协议分析仪的trace才定位到一个驱动bug——手机切到DFP模式后发送Source Capabilities时TDRSet是空的,压根没配电压。
数据角色和电源角色不是绑死的。一个DRP设备可以在不同时段是DFP或UFP,甚至可以同时出现一组电源角色互换而数据角色也同步互换的情况。这就是PD协议中数据角色交换(Data Role Swap)和电源角色交换(Power Role Swap)的概念。
Vconn:为线缆芯片供电
很多人第一次看到Vconn都会懵。我来说说它是什么。
Vconn是专门为电子标记芯片(eMarked cable,也写作eMarker)供电的电源。电子标记芯片是什么?就是一粒在USB-C线缆里的小IC,用来告诉PD控制器这条线缆的能力(比如能跑5A还是3A,是不是USB 3.2 Gen 2×2,有没有Thunderbolt模式)。
Vconn的电压范围是2.7V~5.5V,电流最大可到1.25A。不过实际设计当中,Vconn通常由Source提供,通过CC线中的一条来传输。
注意:Vconn和CC线共用引脚。具体而言,两根CC线CC1和CC2中,一根用于通信和连接检测,另一根就用于Vconn供电。切记不要两边同时供电,否则会破坏线缆芯片。
我遇到过一个量产阶段发现线缆不兼容的问题——某品牌Type-C线缆的eMarker需要Vconn持续供电才能正常工作,而我们的Source只在下电后提供脉冲供电,结果线缆芯片掉电后未正常响应Discover Identity命令,被系统认为是不支持PD的线缆。后来我调了Vconn供电时序才解决。这件事给我的教训是:设计阶段就要查清eMarker的Vconn要求。
CC线:PD通信的命脉
CC(Configuration Channel)是USB Type-C里最核心的信号线,没有之一。它承担两件事:
- 连接检测与角色发现:通过检测CC1和CC2的上拉/下拉电阻,双方设备判断对方的电源角色和数据角色。
- PD通信通道:PD协议报文(如Source Capabilities、Request、Accept)都用BMC编码走CC线。
简单地说,没有CC线,PD就是一个空壳子。我建议刚入门的同学先把CC线的逻辑梳理清楚,因为后面很多故障排查都会落到CC线上。比如常见问题:插上设备后不开始充电,先看一下CC1/CC2的电压是多少,是不是不在正常范围内。
标准CC状态编码(简短参考)
| CC电压(V) | 含义 |
|---|---|
| 0 < V < 0.2 | 无连接(开路或未接入) |
| 0.25 < V < 0.55 | 仅充当UFP/DFP(接下拉电阻) |
| 0.7 < V < 1.0 | 检测到Source(接上拉电阻) |
| 1.4 < V < 1.7 | 检测到Vconn/eMarker |
总结:三个概念如何一起工作
拿一个手机插到充电器上举例解释:
- CC线检测到充电器上有上拉电阻,手机上有下拉电阻,于是手机得知自己是Sink,充电器是Source。
- 同时,CC线通过BMC编码传输PD消息,让手机知道充电器支持哪些电压档位。
- Vconn通过未使用的CC线为充电线缆的eMarker供电,线缆报告自己的电流能力。
- 数据角色:此时手机是UFP(设备端),充电器是DFP(主机端),可以协商数据角色交换(但很少用于充电器)。
整个过程不到100ms就能完成。如果中间任何一个环节出错,比如CC电压不对或Vconn供电时序不对,就会导致充电失败或无法进入PD工作状态。
实用建议:设计时最好给CC线的每一条通道加上独立的电压检测点,甚至给Vconn供电的MOS加个电流反馈。我在调试时发现CC线的电压波动很大,如果不独立检测,很难定位是线缆问题还是Source端上拉电阻错配。
以上三个基本概念是后面所有PD协议章节的基石。吃透它们,再往前走才不会踩坑。记住:角色确定、CC通信、Vconn辅助供电,这三者缺一不可。