1. USB PD 协议概述与演进历史
1.1 我们为什么需要 PD 协议?
说实话,十年前我调试嵌入式设备时,最头疼的就是供电问题。
你想想看,一个 USB 2.0 端口最多只能提供 2.5W 的功率。充个手机还行,给笔记本供电?门儿都没有。那时候每个设备都有自己的电源适配器,桌面上全是「大砖头」。我一直在想,能不能有一根线搞定所有?
USB PD(Power Delivery)就是为了解决这个问题而生。它的核心思想是:让 USB 端口不仅能传数据,还能安全地输送高达 240W 的功率。这意味着,你的笔记本电脑、显示器、甚至电动工具,都可以通过同一根 Type-C 线缆充电。
PD 协议的核心价值:
- 高功率传输:从 10W 一路飙到 240W
- 双向供电:设备可以决定谁当源端,谁当受电端
- 智能协商:电压和电流不是固定的,而是靠「谈判」决定
- 与数据并行:供电的同时不影响 USB 3.0/4.0 数据传输
1.2 USB 标准演进的时间线
我习惯把 USB 的演进分成两条线来看:一条是数据速率,另一条是供电能力。
| 年代 | USB 版本 | 数据速率 | 最大供电 | 物理接口 |
|---|---|---|---|---|
| 1996 | USB 1.0 | 1.5 Mbit/s | 2.5W (5V/500mA) | Type-A/B |
| 2000 | USB 2.0 | 480 Mbit/s | 2.5W (5V/500mA) | Type-A/B |
| 2008 | USB 3.0 | 5 Gbit/s | 4.5W (5V/900mA) | Type-A/B 改进版 |
| 2014 | USB 3.1 | 10 Gbit/s | 100W (PD 2.0) | Type-C 登场 |
| 2017 | USB 3.2 | 20 Gbit/s | 240W (PD 3.1) | Type-C |
| 2019 | USB4 | 40 Gbit/s | 240W (PD 3.1) | Type-C |
为什么 Type-C 接口这么关键?因为它提供了 CC 通道。这条通道是 PD 协议的「电话线」,专门用来做功率协商。没有 CC,就没有 PD。
1.3 PD 协议版本进化史
PD 协议本身也有自己的演进历程。我个人认为,PD 2.0 才是真正意义上的「可用」版本。
PD 1.0(2012年)—— 开荒者
我记得第一次看到 PD 1.0 的文档时,内心是崩溃的。它要求使用 BFSK 调制方式,在 VBUS 线上叠加上一个载波信号来通信。这玩意儿对硬件要求高,而且兼容性很差。我在项目中试过一次,调试起来简直是噩梦。说白了,PD 1.0 基本没有商业落地。
PD 2.0(2014年)—— 里程碑
这才是真正的开端。PD 2.0 有两大变革:
- 抛弃了 VBUS 载波通信,改用 CC 通道上的 BMC 编码
- 配套 Type-C 接口,硬件协议栈更干净
为什么 PD 2.0 能成功?因为它把功率协商从「模拟方式」变成了「数字方式」。你用 CC 线上的一段差分信号就能传递完整的电压电流需求。我至今还记得第一次用 PD 2.0 芯片给笔记本电脑充电成功时的那种爽感。
PD 3.0(2015年)—— 完善与优化
PD 3.0 主要做了减法:
- 精简了 PDO(Power Data Object)数量,降低解析复杂度
- 增加了快速角色交换(Fast Role Swap)功能
- 修复了 2.0 版本中的一些漏洞
我的一个小经验: 在 PD 2.0 时代,我遇到过不少因为电压过渡时序超时而导致的协商失败。PD 3.0 在这方面做了修正,所以嵌入式开发一般建议跳过 2.0,直接上 3.0。
PD 3.1(2021年)—— 迈向 240W
这个版本把 PD 推向了新的高度:
- 扩展功率范围(EPR):最高 48V / 5A,总计 240W
- 引入 AVS(Adjustable Voltage Supply):允许以 100mV 为步进调整电压
- 还在用的标准功率范围(SPR)保持不变
避坑指南: 我曾经遇到过一个案例,客户在 PD 3.1 的线缆里用了过细的屏蔽线。结果一上 48V 就烧了。记住,高电压需要更好的绝缘和更粗的导线。硬件设计不能只看协议。
1.4 PD 协议在整个 USB 体系中的位置
说白了,USB PD 不是一个孤立的协议。它依赖 Type-C 的物理层,又和 USB 数据协议在同一个端口上并行工作。
从上面的结构图你能看出来,PD 协议其实是「傍着」物理层独立存在的。它不占用数据通道,而是通过 CC 线专线通信。这也是为什么我可以一边传 4K 视频,一边给设备充 100W 的电。
1.5 几个你必须知道的关键概念
在正式开始讲报文结构之前,我强烈建议你先消化这几个概念。它们会贯穿整个课程。
- Source 和 Sink — 谁是供电方,谁是受电方?Source 提供功率,Sink 消耗功率。角色可以互换(DRP)。
- PDO(Power Data Object) — 功率数据对象。它是协商的基本单元,包含电压和电流的信息。
- RDO(Request Data Object) — 请求数据对象。Sink 用 RDO 告诉 Source:「我要这一档电压和电流」。
- CC 线(Configuration Channel) — PD 协议的「通信电话线」。所有协商报文都在上面传。
- BMC 编码 — 一种差分信号编码方式,比 NRZ 更抗干扰,适合在 CC 线上传输。
一个小技巧: 如果调试时发现 PD 协商总失败,先测 CC 线上的信号有没有正常摆幅。我碰到过一半的 CC 通讯问题都是接触不良引起的。
1.6 为什么嵌入开发者必须懂 PD?
你可能觉得 PD 协议是芯片厂家的事,关我嵌入式屁事。但现实是:越来越多的设备选择了 Type-C + PD 作为唯一供电接口。
- 你要设计一个电池供电的产品,需要自适应各种充电器
- 你要控制一个电动工具,需要安全地拉 48V/5A 的功率
- 你要做一个工业显示器,需要通过一根线同时完成供电和视频传输
所有这些场景,都需要你在固件里实现 PD 协商的逻辑。不懂报文结构,你连 BOS(BIST Object)是什么都看不懂。