USB PD 协议概述
各位好,我是老张。搞了十多年嵌入式电源和通信协议,PD 协议是我见过最“折腾”但也最实用的充电标准。今天咱们聊聊它的来龙去脉和核心要点。
从 5V 到 48V:为什么需要 USB PD?
早期 USB 就是 5V / 0.5A,给手机充个电还行。后来平板出来了,2.0A 都不够。我当年做一款平板电脑,用 USB BC1.2 只能到 5V 1.5A,充一次电得三小时——客户直接投诉。说白了,需求摆在那:功率不够。
USB-IF 干脆搞了个大版本升级:USB Power Delivery(PD)。它突破了 5V 限制,把电压拉到最高 48V,电流最高 5A。协议上也彻底重写,不再是简单的 D+/D- 电阻识别,而是通过 CC 线做数字握手。
版本演进:1.0 → 2.0 → 3.0 → 3.1
我最早接触 PD 协议是在 2014 年,那时还是 PD 1.0。说实话,它几乎没量产——太复杂了,而且必须用专用线缆。然后 2014 年底 USB-IF 推了 PD 2.0,才算落地。我记得第一次调通 2.0 的协商时,看到 CC 线上冒出了正确的 SOP 包,心里那个爽。
| 版本 | 发布年份 | 核心变化 | 我踩过的坑 |
|---|---|---|---|
| PD 1.0 | 2012 | 20V/5A,使用 BFSK 调制 | 线缆混乱,兼容性极差 |
| PD 2.0 | 2014 | 改由 CC 线做 BMC 编码,支持 Type-C 接口 | CC 线电容太大导致信号畸变 |
| PD 3.0 | 2015 | 增加 PPS(可编程电源),快速角色切换 | PPS 电流抖动,需要软件滤波 |
| PD 3.1 | 2021 | 扩展功率范围(EPR),最高 48V/5A | EEPROM 写入次数过多锁死 |
你可能会问:为什么 2.0 能火?因为 USB Type-C 接口强制标配了 CC 线,这根线就是 PD 的物理基础。我做过一个项目,客户想用老 microUSB 做 PD——嗯,直接告诉他不现实。
核心特性:一句话说清楚 PD 在干什么
PD 协议本质上是一个 点对点协商协议。每次连接时,两个设备通过 CC 线交换一系列结构化消息,最终确定一个双方都支持的电压电流组合。整个过程大约 10ms 内完成。
下面这几个概念我必须讲清楚,项目里经常搞混。
1. Source 和 Sink
- Source:供电方,比如充电器。
- Sink:受电方,比如手机。
- DRP(双角色端口):可以动态切换,比如笔记本接充电器时是 Sink,接手机时是 Source。
我调试过一个 DRP 切换失败案例:Source 和 Sink 状态机冲突,两个设备都不肯先送 CC 电平。后来发现是硬件上拉/下拉电阻没配合好。
2. PDO 和 RDO
- PDO(Power Data Object):Source 告诉 Sink “我能提供这些功率组合”,比如 5V/3A、9V/3A、15V/3A……
- RDO(Request Data Object):Sink 从中选一个发回去,“我要这个”。
这里有个坑:PDO 的顺序是固定的,Source 必须按电压从低到高排列。曾经有家方案厂商把 20V 放在第一个,结果手机直接请求 20V 烧了摄像头。嗯,设计时要检查。
3. 电压和电流的灵活协商
PD 2.0 支持固定电压(5V/9V/15V/20V)和固定的电流档位。PD 3.0 增加了 PPS:电压可以 20mV 步进调节,电流 50mA 步进。对了,PPS 特别适合手机快充,华为的 SuperCharge 和 OPPO 的 VOOC 都借鉴了这个思路。
4. 五类消息包
协议基于消息包通信,我列一下常用的:
- 控制消息:GoodCRC、Accept、Reject、Soft Reset……
- 数据消息:Source_Capabilities、Request、PS_RDY
- 扩展消息:VDO( Vendor Defined Object),用于厂家自定义功能
- 错误消息:比如协议层超时
- 硬件复位:Hard Reset
我记得初学那会,一个 Hard Reset 触发后 CC 电平会拉低,然后 Source 又以为重新插拔了。那时候抓波形,Log 里全是 Hard Reset 重连循环。后来加了 5ms 死区时间才解决。
协议协商流程一图看清
我画了一张简化的状态机图,把核心节点都标出来了。你仔细过一遍,基本就明白 PD 在干什么。
值得深入的两个细节
PD 协议还有两个容易被忽视的点,我提一提,后边章节会展开。
CC 线不只是电源协商
它还承载了 USB 角色探测、Vbus 检测、线缆 E-marker 识别等任务。你想想看,一根线要干这么多活,电气要求自然高。我自己画板时,CC 线走线必须远离高频开关节点,否则 BMC 解码会丢包。
PD 3.1 的 EPR 模式
2021 年推出的扩展功率范围,最高支持 48V/5A(240W)。但这里有个坑:EPR 要求线缆内置 E-marker 芯片,而且芯片要支持 EPR 标识。我踩过一次:用了普通 5A 线缆,笔记本协商了 48V,结果线缆直接冒烟——嗯,线标 5A 不代表支持 48V。
本章小结
USB PD 协议的核心就是“协商”两个字。它从 5V/0.5A 的“配给制”进化成“对话制”,电压电流随需应变。版本演进中,2.0 让协议实用化,3.0 加了 PPS 灵活性,3.1 拉高功率上限。咱们后续的章节会一步步拆解这些消息包长啥样、状态机怎么跑、代码怎么实现。