三、USB PD协议基础:从消息到功率协商

USB PD协议,说白了就是Type-C接口上的“功率谈判语言”。没有它,C口就只能跑5V/3A,也就是15W。但有了PD,你才能看到65W笔记本充电、100W显示器供电,甚至240W的EPR模式。

我个人觉得,理解PD协议有三个关键层次:它说什么(消息类型)、怎么说(协商过程)、以及怎么测(电气测试)。咱们一个一个聊。

核心观点: PD协议的本质是“安全协商,按需供电”。发送方和接收方通过CC线上的消息交互,先确定能力,再分配功率,最后切换电压。

3.1 PD消息类型:你说了啥?

PD消息分为两类——控制消息和数据消息。控制消息就像“打招呼”,数据消息才是“谈正事”。

消息类型 主要消息 作用
控制消息 GoodCRC 接收确认,类似TCP的ACK
Accept / Reject 同意/拒方的请求
PS_RDY 电源已准备好切换,可以改变电压了
数据消息 Source_Capabilities 源端宣告自己能提供的电压/电流组合
Request 接收端请求一个能力
BIST 内置自测模式,我调试时常用它做压力测试
Vendor_Defined 厂商自定义扩展,PPS就靠它实现

我在项目中遇到过一种情况:设备一直发Reject,既不Source_Capabilities也不Request。后来发现是CC线上的电平时序没对上,协议层压根没握手成功。所以消息类型虽然简单,但底层的电气层一旦出问题,协议层就是空谈。

3.2 电源协商过程:从握手到供电

你想想看,一个充电器和一个手机插上之后,它们是怎么知道该跑5V还是20V的?这个过程就叫电源协商,一般分4步:

  1. 物理连接检测: CC1/CC2上的上拉/下拉电阻让设备知道自己是被插的一方还是插入的一方(源端/接收端)。这一步是硬件完成的,不涉及PD协议。
  2. 能力宣告: 源端发送Source_Capabilities消息,列出一组PDO(Power Data Object)。每个PDO就是一个电压/电流组合,比如5V/3A、9V/3A、15V/3A、20V/3.25A。
  3. 请求与确认: 接收端从里面挑一个,发Request消息。源端如果同意,回Accept,然后发PS_RDY。源端实际切换输出电压到目标值。
  4. 供电维持: 供电过程中双方持续发送GoodCRC确认,同时监测CC线上的状态。如果断开或异常,立即回退到5V。
测试技巧: 我建议用示波器同时抓取CC线和VBUS电压,观察PS_RDY消息和电压切换之间的时序。从PS_RDY到电压稳定进入新调节范围,时间不能超过15ms——这是规范硬性要求。

3.3 PPS与EPR:两个进阶概念

PPS(可编程电源): 它是PD 3.0引入的功能。说白了,源端不再只提供几个固定档位,而是允许接收端精细调节电压和电流。比如一个手机在充电时,可以实时微调电压到5.2V、5.5V,以达到最高转化效率。PPS的实现靠的是Vendor_Defined消息,里面带了一个APDO(Augmented PDO)。

我调试PPS时踩过一个坑:某款手机在PPS模式下不停地改变请求电压,隔几百毫秒就发一次Request。一测发现源端的负载瞬态响应跟不上,输出电压出现振荡。最后在源端输出电容上并了一个22μF的陶瓷电容才解决。

EPR(扩展功率范围): 它是PD 3.1推出的,把功率上限从100W拉到240W,也就是48V/5A。EPR使用了特殊的CC逻辑——调整了上拉电阻的电压,让它比普通PD高出一倍。这要求EPR源端和接收端都使用耐压超过50V的器件。

注意: EPR模式下CC线上的幅值更高(BMC编码电压约2W),这意味着你要用更高带宽的差分探头才能准确捕获信号。我曾经拿普通单端探头测EPR的CC波形,结果波形全是反射,根本没法分析。一定要用1GHz以上差分探头。

3.4 电气层要求:BMC编码与电平

PD协议不是随便在CC线上发数字信号那么简单。它使用BMC(Bi-Phase Mark Coding)编码,也就是每个时钟周期内有一次翻转。0和1的区别在于翻转位置不同——1在周期开始就翻转,0在周期中间翻转。

电气参数要点:

  • BMC位速率: 300 kbps ±0.5%
  • CC线上的逻辑电平: 源端主动上拉,接收端下拉到地。BMC信号峰峰值约1.2V@3.3V系统,EPR模式下更高。
  • 上升/下降时间: 要求≤150ns,太慢会破坏BMCD解码的眼图。
  • 差分阻抗: 目标90Ω±15%,与USB 2.0/USB 3.x一致。

3.5 电压/电流阶跃测试

阶跃测试,就是看源端在响应Request切换电压时,输出波形好不好。规范要求每次电压阶跃(比如从5V跳到20V)时,输出电压的过冲要小于规定值,稳定时间要在限时内。

阶跃测试的典型判据:

参数 要求 测试工具
电压上升/下降时间(10%-90%) ≤15ms 示波器+差分探头
过冲/下冲 ≤目标电压的±5% 示波器+数学测量
稳定时间(进入±5%范围) ≤5ms 示波器+光标测量
电流阶跃(负载突变) VBUS跌落≤500mV 电子负载+示波器

我个人习惯用电子负载做一个“阶跃触发”:让负载从轻载突然切到重载,同时看VBUS波形。有一次测一个PD充电器,轻载到重载时VBUS跌了1.2V,超了规范。一查是输出滤波电容的ESR太高,换成低ESR聚合物电容就过了。

阶跃测试注意事项:
1. 示波器带宽至少500MHz,采样率2GS/s以上。
2. 探头用50Ω阻抗匹配,不要用×1衰减档。
3. VBUS和GND测量点选在Type-C座子处,尽量靠近被测设备。
4. 负载的电流阶跃速率要快于源端的瞬态响应,否则测不准。
USB PD协议知识体系 USB PD 协议 消息类型 电源协商过程 PPS & EPR 电气层要求 电压/电流阶跃测试 控制消息:GoodCRC, Accept, PS_RDY 数据消息:Source_Cap, Request, BIST 物理连接 → 能力宣告 → 请求/确认 → 供电 PPS:可编程电源,精细调节电压 EPR:扩展功率至240W,48V/5A BMC编码:300kbps,比特翻转标示0/1 CC电平:1.2Vpp,EPR更高 上升/下降时间 ≤150ns 电压阶跃时间≤15ms,过冲≤±5%

嗯,这张图基本涵盖了本章的核心内容。消息类型是基础,协商过程是流程,PPS/EPR是扩展,电气层和阶跃测试则是验证手段。做PD产品时,这五个环节缺一不可。我个人建议研发阶段就先把电气层调好,再跑协议流程,最后才做阶跃测试——反过来容易浪费时间。