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 数据协议在同一个端口上并行工作。

USB PD 协议在 USB 体系中的位置 物理层(PHY) Type-C 连接器、CC 通道、VBUS 线路、BMC 编解码 数据协议栈 USB 2.0 / 3.0 / 3.2 / USB4 功率协商层 PD 协议:Source / Sink 角色、VDM 消息 应用层 AC/DC 转换控制、电池充电管理、DisplayPort Alt Mode、Thunderbolt 数据信号和功率协商共用物理层,但逻辑上相互独立 PD 消息在 CC 线上传输,不影响数据线的高速率传送

从上面的结构图你能看出来,PD 协议其实是「傍着」物理层独立存在的。它不占用数据通道,而是通过 CC 线专线通信。这也是为什么我可以一边传 4K 视频,一边给设备充 100W 的电。

1.5 几个你必须知道的关键概念

在正式开始讲报文结构之前,我强烈建议你先消化这几个概念。它们会贯穿整个课程。

  1. Source 和 Sink — 谁是供电方,谁是受电方?Source 提供功率,Sink 消耗功率。角色可以互换(DRP)。
  2. PDO(Power Data Object) — 功率数据对象。它是协商的基本单元,包含电压和电流的信息。
  3. RDO(Request Data Object) — 请求数据对象。Sink 用 RDO 告诉 Source:「我要这一档电压和电流」。
  4. CC 线(Configuration Channel) — PD 协议的「通信电话线」。所有协商报文都在上面传。
  5. BMC 编码 — 一种差分信号编码方式,比 NRZ 更抗干扰,适合在 CC 线上传输。

一个小技巧: 如果调试时发现 PD 协商总失败,先测 CC 线上的信号有没有正常摆幅。我碰到过一半的 CC 通讯问题都是接触不良引起的。

1.6 为什么嵌入开发者必须懂 PD?

你可能觉得 PD 协议是芯片厂家的事,关我嵌入式屁事。但现实是:越来越多的设备选择了 Type-C + PD 作为唯一供电接口。

  • 你要设计一个电池供电的产品,需要自适应各种充电器
  • 你要控制一个电动工具,需要安全地拉 48V/5A 的功率
  • 你要做一个工业显示器,需要通过一根线同时完成供电和视频传输

所有这些场景,都需要你在固件里实现 PD 协商的逻辑。不懂报文结构,你连 BOS(BIST Object)是什么都看不懂。