4. USB PD 协议发展历程与版本差异
说起 USB PD 协议啊,从最早的雏形到现在已经进化了十来年。我最早接触 PD 协议的时候,市场上还只有 USB 2.0 的 BC 1.2 充电标准。那时候给设备充个电,电流小得可怜,平板电脑都充不进去。嗯,正是这种尴尬才逼出了后来的 PD 协议。
为什么要了解发展历程?说白了就是为了避坑。很多工程师拿着新芯片去调旧设备,结果死活不通,其实就是版本兼容性问题。我个人习惯,做项目前先查清对方设备支持的 PD 版本,能省很多调试时间。
4.1 从 USB 2.0 的 BC 1.2 到 PD 1.0
早在 PD 协议诞生前,业界的快充方案基本靠各家自己搞。高通有 Quick Charge,联发科有 Pump Express,互不兼容。这时 USB-IF 坐不住了,他们觉得快充得有统一标准。
BC 1.2(Battery Charging 1.2)算是第一个官方充电标准,但它只解决了两件事:
- 识别充电端口类型(DCP / CDP / SDP)
- 把充电电流从 USB 2.0 的 500mA 提升到 1.5A
说实话,这点功率根本不够用。我记得那时候有款 10 寸平板,充电要五六个小时,用户反馈很差。于是 PD 1.0 在 2012年 正式发布,它第一次引入了通过 CC 线通信协商功率的机制。
关键里程碑:PD 1.0 定义的功率最高 100W(20V / 5A),这个标准直到今天还在沿用。不过实际落地非常少,因为那时 Type-C 接口还没普及,PD 1.0 用的是传统 USB Micro-B 连接器上的额外引脚。
4.2 PD 2.0:真正的革命
2014年,USB Type-C 接口发布。PD 2.0 随即跟上,这是真正意义上的大规模商用版本。为什么会成功?因为它和 Type-C 接口深度绑定——CC 引脚天然支持 PD 通信,不需要额外连接器。
PD 2.0 相比 1.0 做了几个核心调整:
| 特性 | PD 1.0 | PD 2.0 |
|---|---|---|
| 物理层 | BMC over Vconn | BMC over CC(兼容更好) |
| 连接器 | Micro-B + 额外引脚 | USB Type-C 原生支持 |
| 电压范围 | 5V / 12V / 20V 固定 | 5V / 9V / 15V / 20V 固定 |
| 最大电流 | 5A(需 Marked Cable) | 5A(需 eMarker) |
| 双向供电 | 不支持 | 支持 DRP |
| 商务协议 | 无 | 引入 SOP'/SOP'' 用于线缆通信 |
嗯,这里要注意。PD 2.0 最大的变化其实是增加了 eMarker(电子标记线缆)的沟通机制。我手头有一个项目就遇到了这个问题:客户买的 Type-C 线没有 eMarker,结果始终协商不到 3A 以上电流。查了半天才发现是线缆不支持 PD 2.0 的完整协议栈。
我的经验:调试 PD 2.0 设备时,我通常先确认 Source 和 Sink 的 Source_Capabilities 是否匹配。如果发现反复 Hard Reset,80% 的概率是电压或电流值超出了对方支持范围。
4.3 PD 3.0:更加智能和柔性的供电
2015年发布的 PD 3.0 增强版,说实话很多人觉得只是小改。但我告诉你,它引入了一个极其重要的概念——PPS(Programmable Power Supply)。
PPS 允许电压以 20mV 的步进调节,电流以 50mA 步进微调。这意味着设备可以实时调整充电电压,把效率拉到最高。你想想看,高通 Quick Charge 4 和联发科 Pump Express 4 后来都采用了 PD 3.0 PPS 作为基座,就是因为它太灵活了。
3.0 的其他改进还包括:
- Fast Role Swap(FRS):在供电角色切换时,能在 5ms 内完成,保证不掉电。我做过一个手机投屏底座项目,切换 Source/Sink 角色时掉电重启,最后还是靠 FRS 解决。
- 更丰富的 VDM(Vendor Defined Messages):厂家可以自定义数据包扩展功能
- 优化了错误恢复机制,减少了 Hard Reset 次数
⚠ 避坑指南:我曾经调试一个 PD 3.0 充电器时,发现它总是进入 PPS 模式后会输出异常纹波。后来检查才发现,PPS 模式下电压调节速度过快,超过了后端 Buck 电路的响应能力。所以做 PPS 设计时,一定要给电压变化留出足够的坡度(Slew Rate)。
4.4 PD 3.1:面向未来的扩展
2021年发布的 PD 3.1,引入了 EPR(Extended Power Range)。你可能会问:100W 还不够用吗?嗯,对于笔记本和显示器来说确实不够。PD 3.1 把电压扩展到了 28V、36V、48V,最高支持 240W 的功率。
| 电压档 | 标准 | 最大功率 | 应用场景 |
|---|---|---|---|
| 5V ~ 20V | SPR(标准功率范围) | 100W | 手机、平版、笔记本 |
| 28V | EPR AVS | 140W(28V / 5A) | 游戏本、投影仪 |
| 36V | EPR AVS | 180W(36V / 5A) | 高性能工作站 |
| 48V | EPR AVS | 240W(48V / 5A) | 显示器、大型设备 |
要注意,EPR 需要特定的 EPR 线缆,而且连接器也必须满足 EPR 的耐压和耐流要求。我见过有人用普通 SPR 线去跑 48V,结果接口烧得一塌糊涂,这就是没搞清楚版本的能力边界。
4.5 版本演进思维导图
好了,我们用一张图把 PD 协议二十年来的演进串起来。
4.6 版本兼容性的实际考量
你可能会关心一个问题:如果我的设备只支持 PD 2.0,对接一个 PD 3.1 的充电器能工作吗?答案是——能,但只能工作在最基础的模式。
PD 协议向下兼容的大原则是:高版本 Source 必须能跟低版本 Sink 通信,但只提供低版本能理解的 PDO(Power Data Object)。也就是说,PD 3.1 充电器面对 PD 2.0 设备时,只会输出 5V/9V/15V/20V 固定电压,而不会尝试 PPS 或 EPR。
我的调试经验:如果遇到两个设备“握手失败”,我喜欢先用逻辑分析仪抓 GoodCRC 之后的 packet。如果一直收到 Reject 或 Wait,多半是你提供的 PDO 对方完全无法接受。这时候降低到 5V/3A 试试,通常能绕过协商问题。
另外一个实际坑:虽然 PD 版本向下兼容,但很多老芯片对 Soft Reset 或 Hard Reset 的处理很糙。我在一个项目中,PD 2.0 Source 每次收到 PD 3.0 的 Extended Capabilities 请求就直接 Hard Reset,搞了一天才发现是固件版本太旧,缺少跳过未知消息的处理逻辑。
4.7 小结与实用建议
好了,整理一下核心记忆点:
- BC 1.2:5V/1.5A,只能充电,无数据协商
- PD 1.0:定义了 100W 规格,但基本没落地
- PD 2.0:Type-C 时代主力,支持 5V/9V/15V/20V 固定档
- PD 3.0:加入 PPS 和 FRS,可微调电压/电流
- PD 3.1:扩展到 48V/240W,引入 EPR 和 AVS
最后给新手工程师一个忠告:拿到一个新 PD 设备,别急着调协议栈。先花 10 分钟读它的 Source_Capabilities 或者 Sink_Capabilities,看看它真实支持哪些 PDO。我见过太多人浪费一整天,最后发现是不小心把 28V 的 PDO 发给了一个只支持 20V 的设备。