引言:一个看似简单的握手

当你把手机充电器插入笔记本的USB-C接口,几秒钟后,屏幕右下角弹出"正在充电"的提示。这个看似平常的瞬间背后,发生了一场精密的数字对话:充电器告诉笔记本它能提供多少种电压和电流组合,笔记本从中选择最适合的一个,双方确认后,电压从默认的5V升至20V,电流也相应调整——整个过程在毫秒级完成。

这场对话使用的语言叫做USB Power Delivery,简称USB PD。它是过去十五年来充电技术领域最重要的标准之一,不仅让一台充电器可以为从蓝牙耳机到游戏笔记本的各种设备供电,还实现了从100W到240W的功率跨越。这套协议如何工作?为什么它能战胜高通QC、华为SCP等一众私有协议成为行业标准?答案藏在一个精巧设计的协议栈里。

从混乱走向统一:USB PD的十五年演进

timeline
    title USB Power Delivery 协议演进历程
    section 2012年 
        PD 1.0发布
        : 最大100W功率
        : VBUS BFSK调制
        : 未大规模普及
    section 2014年
        PD 2.0发布
        : Type-C CC线通信
        : BMC编码
        : 5V/9V/15V/20V固定电压
    section 2017年
        PD 3.0发布
        : 引入PPS可编程电源
        : 20mV电压步进
        : 恒流模式支持
    section 2021年
        PD 3.1发布
        : EPR扩展功率范围
        : 最大240W (48V/5A)
        : 新增28V/36V/48V档位

2012年:PD 1.0的开创与局限

USB Power Delivery的故事始于2012年。彼时的USB接口主要承担数据传输任务,充电能力停留在USB Battery Charging 1.2规范的7.5W(5V/1.5A)水平。智能手机的兴起让充电速度成为痛点,各厂商开始探索私有快充方案。

USB-IF(USB Implementers Forum)在这一年发布了PD 1.0规范,首次将USB供电能力提升至100W(20V/5A)。但PD 1.0有一个致命缺陷:它使用的是BFSK(二进制频移键控)调制技术,信号通过VBUS线路传输。这意味着它必须依赖专用的USB-A或USB-B接口,无法与当时已经开始普及的micro-USB接口良好兼容。更麻烦的是,VBUS上的信号调制需要额外的滤波电路,增加了硬件成本和复杂度。

PD 1.0没能大规模普及,但它确立了一个核心理念:通过数字协议协商供电参数,而非依赖固定的电压等级。这个理念在后续版本中被完整继承。

2014年:PD 2.0与Type-C的完美结合

2014年是USB发展史上的转折点。USB Type-C规范正式发布,这种可正反插的24针接口不仅解决了"永远插不对"的用户痛点,还引入了一个关键设计:CC(Configuration Channel)引脚。CC引脚最初用于检测连接方向和设备角色,但设计者们很快意识到,它可以承载更多功能——包括PD通信。

PD 2.0规范将通信介质从VBUS迁移到CC引脚,采用BMC(Biphase Mark Code,双相标记码)编码方式。这一改变产生了深远影响:

首先,CC线是专用的通信通道,不存在与电力传输的相互干扰。其次,BMC编码比BFSK更简单高效,可以在廉价控制器上实现。更重要的是,PD 2.0定义了完整的PDO(Power Data Object)结构,让供电设备可以声明自己的能力,受电设备可以从中选择最适合的组合。

PD 2.0支持四种固定电压:5V、9V、15V、20V,最大电流5A,最大功率100W。这套配置覆盖了从手机到笔记本电脑的大部分需求,成为USB PD走向主流的基础。

2017年:PD 3.0与PPS的精细化革命

PD 3.0在2017年发布,看似只是版本号的升级,实则引入了一项改变游戏规则的技术:PPS(Programmable Power Supply,可编程电源)。

在PD 2.0时代,设备只能从几个固定电压中选择。如果你的电池需要11.4V的充电电压,PD 2.0只能提供9V或15V——要么充得慢,要么需要额外的降压电路。PPS改变了这一切:它允许以20mV的步进调整电压,以50mA的步进调整电流。这意味着供电端可以精确输出电池所需的电压,实现所谓的"直充"——充电效率可以超过99%。

三星的Super Fast Charging技术就是PPS的典型应用。它使用PPS在3.3V到11V范围内精确控制输出,为手机提供25W到45W的充电功率。与传统的固定电压充电相比,PPS减少了能量转换损耗,发热更少,充电更快。

PPS还支持恒流模式。在某些充电阶段,电池需要恒定电流而非恒定电压充电。PD 2.0的固定PDO无法实现这一点,而PPS可以让电源进入恒流模式,直接以RDO(Request Data Object)中设定的电流值供电。

2021年:PD 3.1与240W的功率突破

2021年发布的PD 3.1规范再次刷新了人们对USB供电的认知。新规范引入了EPR(Extended Power Range,扩展功率范围),将最大功率从100W提升至240W。

EPR的工作电压扩展到了28V、36V、48V,配合5A的最大电流,理论上可以支持从游戏笔记本到便携显示器的高功率设备。但这不是简单地提高电压上限——EPR引入了全新的安全机制。

首先,EPR设备必须使用专用的EPR认证线缆。这种线缆需要承受至少53.65V的电压,旁路电容的耐压要求达到63V。其次,进入EPR模式前,设备必须进行专门的握手流程,确保双方都支持EPR功能。最后,EPR模式需要周期性的keep-alive消息维持,一旦通信中断,电压会立即降回安全水平。

PD 3.1还定义了新的APDO(Augmented Power Data Object)类型:SPR(Standard Power Range,标准功率范围)APDO覆盖3.3V-21V,EPR AVS(Adjustable Voltage Supply,可调电压源)覆盖15V-48V。这套分类让设备可以更精确地声明自己的能力。

协议栈的层次结构:从物理层到应用层

USB PD是一个分层协议,类似于TCP/IP协议栈。理解这个结构对于深入掌握PD至关重要。

graph TB
    subgraph 应用层
        DPM[设备策略管理器<br/>Device Policy Manager]
    end
    
    subgraph 策略层
        PE[策略引擎<br/>Policy Engine]
    end
    
    subgraph 协议层
        PROT[协议层<br/>Protocol Layer<br/>消息处理/状态机]
    end
    
    subgraph 物理层
        PHY[PHY层<br/>BMC编码/解码<br/>CRC校验]
        CC[CC线<br/>通信介质]
    end
    
    DPM --> PE
    PE --> PROT
    PROT --> PHY
    PHY --> CC
    
    style DPM fill:#e1f5fe
    style PE fill:#fff3e0
    style PROT fill:#f3e5f5
    style PHY fill:#e8f5e9
    style CC fill:#fce4ec

物理层:BMC编码与信号传输

物理层是PD协议的基础。它负责将数字比特转换为CC线上的电信号,并处理接收到的信号还原为比特流。

PD使用BMC编码传输数据。BMC是一种自同步编码方式:每一位的开始都发生电平跳变,如果该位是0,则整个位周期保持电平不变;如果该位是1,则在位周期中间再跳变一次。这种编码方式有以下优势:

一是自同步特性。每位开始的跳变为接收端提供了时钟参考,无需额外的时钟线。二是直流平衡。由于跳变的存在,信号的平均电平接近中间值,适合耦合传输。三是错误检测能力。如果接收端在错误的时间检测到跳变,可能意味着传输错误。

BMC信号的数据速率是300kbps,采样率是600kHz(每位两个采样点)。这个速率足以在毫秒级完成功率协商,又不会对CC线的电容和电感提出过高要求。

数据链路层:成帧与错误检测

在BMC编码之上,PD使用4b5b编码将数据转换为比特流。这种编码将每4位数据映射为5位编码,目的是保证足够的跳变密度,维持直流平衡。

4b5b编码定义了16个数据码和若干控制码(称为K码)。其中几个关键的K码包括:

  • SYNC-1 (11000) 和 SYNC-2 (10001):用于组成SOP(Start of Packet)标记
  • RST-1 (00111) 和 RST-2 (11001):用于复位序列
  • EOP (01101):结束标记

一个完整的PD消息帧包含以下字段:

| Preamble | SOP | Header | Data Objects | CRC | EOP |

Preamble是64位的交替序列(0101…),用于接收端同步。SOP标记指示消息的开始类型。Header是一个16位字段,描述消息的基本属性。Data Objects是可选的数据部分,最多7个32位对象。CRC是32位循环冗余校验码,覆盖Header和Data Objects。EOP标记消息结束。

协议层:消息类型与状态机

协议层定义了三种消息类型:控制消息、数据消息和扩展消息。

控制消息只有Header,用于确认、拒绝、获取状态等简单操作。常见的控制消息包括:

  • GoodCRC:确认收到消息
  • Reject:拒绝请求
  • Accept:接受请求
  • Get_Source_Cap:请求供电能力
  • PS_RDY:电源就绪

数据消息包含Header和最多7个32位数据对象。最关键的数据消息是Source_Capabilities(源能力)和Request(请求)。Source_Capabilities包含供电端的所有PDO,Request则由受电端发送,指定选择的PDO索引和请求的电流。

扩展消息用于传输较长的数据块,如设备身份信息、厂商定义的消息等。它的格式与普通数据消息略有不同,包含额外的扩展头。

协议层还维护一个状态机,处理消息的发送、接收、重试和超时。如果发送方在一定时间内没有收到GoodCRC确认,会触发重传机制。如果重传次数超过限制,协议层会报告错误给上层。

策略引擎与设备策略管理器

策略引擎是PD协议栈的大脑。它根据设备的能力和需求,决定如何响应收到的消息,以及何时主动发送消息。

设备策略管理器(Device Policy Manager)位于更高层次,管理整个设备的电源策略。例如,一台笔记本电脑可能有多个USB-C端口,每个端口可能同时连接供电设备。设备策略管理器需要协调各个端口的功率分配,确保总功耗不超过电源适配器的能力。

策略引擎和设备策略管理器之间的交互是设备特定的,USB规范没有严格定义。这给了厂商实现差异化功能的空间,但也导致了不同设备行为的不一致性。

PDO与APDO:电源能力的精确声明

graph LR
    subgraph PDO类型
        A[固定PDO<br/>Fixed Supply<br/>5V/9V/15V/20V]
        B[可变PDO<br/>Variable Supply<br/>电压范围]
        C[电池PDO<br/>Battery Supply<br/>直接电池连接]
    end
    
    subgraph APDO类型
        D[SPR APDO<br/>3.3V-21V<br/>PPS可编程]
        E[EPR AVS<br/>15V-48V<br/>扩展功率]
    end
    
    A --> F[PD 2.0/3.0]
    B --> F
    C --> F
    D --> G[PD 3.0 PPS]
    E --> H[PD 3.1 EPR]
    
    style A fill:#bbdefb
    style B fill:#bbdefb
    style C fill:#bbdefb
    style D fill:#c8e6c9
    style E fill:#fff9c4

固定PDO的结构

PDO(Power Data Object)是PD协议的核心数据结构。每个PDO是一个32位字段,编码了电压、电流或功率信息。

固定PDO是最基本的类型,格式如下:

| Bit 31-30 | Bit 29 | Bit 27-28 | Bit 26-20 | Bit 19-10 | Bit 9-0 |
|  PDO Type | Reserved | Dual-Role | Voltage   | Max Current | Reserved |

电压字段以50mV为单位,例如5V编码为100(5000/50),20V编码为400。电流字段以10mA为单位,例如3A编码为300。

一个典型的充电器可能声明以下PDO:

  • PDO 1: 5V/3A(15W)
  • PDO 2: 9V/3A(27W)
  • PDO 3: 15V/3A(45W)
  • PDO 4: 20V/5A(100W)

APDO的结构

APDO(Augmented Power Data Object)是PD 3.0引入的新类型,用于PPS功能。APDO的格式与固定PDO不同:

| Bit 31-29 | Bit 28-27 | Bit 26-17 | Bit 16-8 | Bit 7-0 |
|  PDO Type | PPS Power | Max Voltage | Min Voltage | Max Current |

最大电压和最小电压都以100mV为单位,最大电流以50mA为单位。PPS Power字段指定了功率限制。

一个支持PPS的充电器可能声明:

  • 固定PDO: 5V/3A, 9V/3A, 15V/3A, 20V/5A
  • APDO: 3.3V-11V/3A, 3.3V-16V/3A, 3.3V-21V/5A

APDO的关键特征是可调范围。受电设备可以在APDO声明的范围内请求任意电压,精度为20mV。

EPR APDO

PD 3.1定义了EPR APDO,用于扩展功率范围。它的结构与SPR APDO类似,但电压范围扩展到15V-48V。

EPR APDO的出现意味着USB-C可以为游戏笔记本、便携显示器等高功率设备供电。但EPR需要专门的EPR认证线缆,而且进入EPR模式前必须完成额外的握手流程。

功率协商流程:从连接到供电

完整的PD功率协商流程可以分为以下几个阶段:

sequenceDiagram
    participant Source as 供电端(Source)
    participant Cable as 线缆E-marker
    participant Sink as 受电端(Sink)
    
    Note over Source,Sink: 阶段1: CC检测与VBUS开启
    Source->>Sink: 检测到Rd下拉电阻
    Source->>Sink: 开启5V VBUS
    
    Note over Source,Sink: 阶段2: 线缆发现
    Source->>Cable: Discover Identity (SOP')
    Cable->>Source: Discover Identity ACK
    
    Note over Source,Sink: 阶段3: 能力协商
    Source->>Sink: Source Capabilities (PDO列表)
    Sink->>Source: Request (选择PDO)
    Source->>Sink: Accept
    Source->>Source: 调整电压/电流
    Source->>Sink: PS_RDY
    
    Note over Source,Sink: 阶段4: 正常供电
    Sink->>Sink: 开始拉取功率

阶段一:CC检测与默认供电

当USB-C插头插入接口时,供电端首先检测CC引脚上的电压变化。如果检测到Rd下拉电阻(约5.1kΩ),说明有受电设备连接。此时供电端会开启VBUS,输出5V电压,提供至少500mA电流。

这个阶段的供电是"隐式"的,不需要PD协商。即使设备不支持PD,也能获得基本的5V供电。这保证了向后兼容性。

阶段二:线缆发现

如果供电端支持大于3A的电流,它需要首先查询线缆的能力。这是因为线缆内部的导线有电流限制,超过限制可能导致过热甚至火灾。

查询过程使用SOP’消息(针对线缆上的E-marker芯片)。E-marker会返回线缆的电流能力、数据能力和支持的PD版本。供电端根据这些信息调整自己的PDO,确保不超过线缆的承受能力。

对于不支持E-marker的线缆(通常是USB 2.0低速线缆),电流被限制在3A以内。

阶段三:能力协商

供电端发送Source_Capabilities消息,包含所有可用的PDO。受电端收到后,从中选择一个最合适的PDO,通过Request消息告知供电端。Request消息中包含PDO索引、请求的电流(对于PPS还包括请求的电压)。

供电端收到Request后,首先验证请求是否在声明的PDO范围内。如果有效,发送Accept消息;否则发送Reject消息。接受请求后,供电端开始调整输出电压和电流。调整完成后,发送PS_RDY消息通知受电端。

从Request到PS_RDY的整个过程通常在几十毫秒内完成。在此期间,受电端应保持较低的功耗,等待电压稳定。

阶段四:供电维持与重新协商

供电关系建立后,双方可以继续进行PD通信。常见的场景包括:

  • 供电端发送新的Source_Capabilities,通知能力变化
  • 受电端发送新的Request,请求调整功率
  • 双方进行角色交换(从受电端变为供电端,或反之)
  • 进入或退出Alternate Mode(如DisplayPort Alt Mode)

PPS模式还要求周期性的keep-alive消息。受电端需要在PPS Request中设置操作超时值,如果在超时前没有发送新的Request,供电端会将电压降回5V。这是防止通信失败后设备承受过高电压的安全机制。

CC引脚检测机制

graph TB
    subgraph 供电端Source
        V5[5V电源]
        RP[Rp上拉电阻]
        CC1_S[CC1]
        CC2_S[CC2]
        V5 --> RP
        RP --> CC1_S
        RP --> CC2_S
    end
    
    subgraph 受电端Sink
        RD[Rd下拉电阻<br/>5.1kΩ]
        CC1_D[CC1]
        CC2_D[CC2]
        GND[地]
        RD --> CC1_D
        RD --> CC2_D
        RD --> GND
    end
    
    subgraph 线缆
        CC_WIRE[CC线]
    end
    
    CC1_S -.->|连接| CC_WIRE
    CC_WIRE -.->|连接| CC1_D
    CC2_S -.->|未连接| CC2_D
    
    style RP fill:#ffcdd2
    style RD fill:#c8e6c9
    style CC_WIRE fill:#bbdefb

USB-C的CC引脚检测机制是整个协议的基础。供电端在CC引脚上放置上拉电阻Rp,受电端放置下拉电阻Rd。当两者连接时,形成一个电压分压器,供电端可以通过测量CC电压来判断:

  1. 是否有设备连接(检测到电压下降)
  2. 连接方向(CC1还是CC2有效)
  3. 设备类型(通过不同的Rp值判断供电能力)

Rp的不同阻值代表不同的电流能力:

  • 56kΩ Rp:默认USB功率(500mA)
  • 22kΩ Rp:1.5A @ 5V
  • 10kΩ Rp:3A @ 5V

这个模拟检测机制在PD数字协商之前完成,确保即使是简单的5V供电也能正常工作。

角色交换:双角色设备的灵活性

sequenceDiagram
    participant Laptop as 笔记本(DRP)
    participant PowerBank as 移动电源(DRP)
    
    Note over Laptop,PowerBank: 初始状态:笔记本从移动电源获取电力
    PowerBank->>Laptop: Source Capabilities
    Laptop->>PowerBank: Request 20V
    PowerBank->>Laptop: Accept + PS_RDY
    Note over Laptop,PowerBank: 笔记本正在充电...
    
    Note over Laptop,PowerBank: 外部电源适配器插入笔记本
    Note over Laptop: 检测到外部电源
    
    Laptop->>PowerBank: PR_Swap (请求角色交换)
    PowerBank->>Laptop: Accept
    
    Note over Laptop,PowerBank: 角色切换中...
    Laptop->>Laptop: 切换为Source角色
    PowerBank->>PowerBank: 切换为Sink角色
    
    Laptop->>PowerBank: Source Capabilities
    PowerBank->>Laptop: Request
    Laptop->>PowerBank: Accept + PS_RDY
    
    Note over Laptop,PowerBank: 移动电源正在充电...

DRP与角色交换

双角色端口(Dual Role Port,DRP)是USB-C规范的重要概念。DRP可以动态切换为供电端或受电端,这为笔记本电脑、移动电源等设备提供了极大的灵活性。

想象这样一个场景:你的笔记本电脑连接着移动电源。当你把电源适配器插入笔记本时,笔记本应该从移动电源获取电力变为给移动电源充电。这需要双方都支持角色交换。

PD定义了两种角色交换:电源角色交换(Power Role Swap)和数据角色交换(Data Role Swap)。电源角色交换改变供电方向,数据角色交换改变DFP/UFP关系。

角色交换的发起方发送DR_Swap或PR_Swap消息。接收方可以接受或拒绝。如果接受,双方执行角色切换,包括重新配置CC引脚的Rp/Rd设置、调整VBUS方向等。

快速角色交换(FRS)

传统的角色交换需要完整的协商流程,耗时可能在百毫秒级。对于某些场景,这个延迟是不可接受的。

考虑一台正在供电的笔记本电脑突然拔掉电源适配器。如果笔记本不能迅速切换到从电池供电,系统可能会因电压跌落而崩溃。快速角色交换(Fast Role Swap,FRS)正是为解决这类问题而设计。

FRS允许在约150微秒内完成角色切换。流程如下:

  1. 供电端检测到外部电源丢失
  2. 供电端在CC线上发送FRS信号(通过改变Rp电阻值)
  3. 受电端检测到FRS信号后立即切换为供电端
  4. 新的供电端开始输出VBUS电压

FRS是PD 3.0引入的功能,需要硬件支持。并非所有设备都支持FRS,但在移动电源和笔记本电脑这类设备上,它提供了关键的用户体验保障。

VCONN与E-marker:线缆的智能身份证

graph LR
    subgraph 主机端
        HOST[主机/充电器]
        VCONN_SRC[VCONN电源<br/>3V-5.5V]
        CC_HOST[CC引脚]
    end
    
    subgraph 线缆插头A
        EMARK_A[E-marker芯片]
        RA_A[Ra电阻<br/>~1kΩ]
        CC_A[CC/VCONN]
    end
    
    subgraph 线缆内部
        CC_WIRE[CC线]
        VCONN_WIRE[VCONN线<br/>(可选)]
    end
    
    subgraph 线缆插头B
        EMARK_B[E-marker芯片<br/>(可选)]
        RA_B[Ra电阻]
        CC_B[CC/VCONN]
    end
    
    subgraph 设备端
        DEVICE[设备]
        CC_DEV[CC引脚]
    end
    
    HOST --> CC_HOST
    VCONN_SRC --> CC_HOST
    CC_HOST --> CC_A
    CC_A --> EMARK_A
    EMARK_A --> RA_A
    CC_A --> CC_WIRE
    CC_WIRE --> CC_B
    CC_B --> CC_DEV
    CC_DEV --> DEVICE
    
    style EMARK_A fill:#fff9c4
    style EMARK_B fill:#fff9c4
    style VCONN_SRC fill:#ffcdd2

E-marker的功能

E-marker(Electronically Marked Cable)是植入USB-C线缆中的小型芯片,用于存储线缆的属性信息。根据USB规范,任何支持SuperSpeed数据传输或电流大于3A的线缆都必须配备E-marker。

E-marker存储的信息包括:

  • 线缆类型(被动/主动/光学)
  • 支持的数据速率(USB 2.0/3.1/3.2/4.0,Thunderbolt等)
  • 最大电流能力(3A或5A)
  • 最大电压能力(SPR或EPR)
  • 供应商ID和产品ID
  • 固件版本

这些信息通过PD协议读取。供电端在协商高功率之前,会先读取线缆的E-marker信息,确认线缆能够承受预期的电流和电压。

VCONN的供电机制

E-marker芯片需要供电才能工作。USB-C规范定义了VCONN机制为E-marker供电。

VCONN的工作原理如下:USB-C插头有两个CC引脚,分别称为CC1和CC2。由于插头可以正反插,只有一个CC引脚会连接到线缆的CC线,另一个则悬空。悬空的那个CC引脚被用作VCONN,向线缆内的E-marker供电。

VCONN的电压范围是3V-5.5V,最大功率约1W。这个电压范围比VBUS宽松,使得移动设备可以直接使用电池电压驱动VCONN,省去一级电压转换。

当设备检测到线缆上有Ra电阻(800Ω-1.2kΩ)时,就知道线缆内有E-marker,于是启用VCONN供电。Ra电阻也用于区分E-marker和普通Rd下拉电阻。

树莓派4的教训

E-marker和VCONN机制并非没有复杂性。2019年发布的树莓派4就因为设计缺陷而登上头条。

树莓派4的USB-C供电接口将两个CC引脚短接在一起,并连接了一个5.1kΩ的下拉电阻。这个设计在配合不带E-marker的线缆时工作正常,但当使用带E-marker的线缆时,5.1kΩ的Rd与约1kΩ的Ra并联,总电阻变成约840Ω——这超出了USB-C规范定义的Rd范围。

结果是:使用E-marker线缆时,很多USB-C充电器拒绝识别树莓派4为有效受电设备,不输出VBUS电压。这个设计缺陷在后续版本中修复,但它给所有USB-C设备设计者上了一课:协议的每一个细节都有其存在的理由。

安全机制:从认证到防护

flowchart TB
    subgraph 认证流程
        A[主机发送Challenge<br/>+随机数] --> B[设备签名Challenge<br/>返回证书链]
        B --> C[主机验证证书链<br/>确认CA可信]
        C --> D[主机验证签名<br/>确认私钥匹配]
        D --> E{认证结果}
        E -->|通过| F[允许高功率模式]
        E -->|失败| G[拒绝或限制功能]
    end
    
    subgraph 硬件保护层
        H[过流保护OCP<br/>电流超限切断VBUS]
        I[过压保护OVP<br/>电压超限断开连接]
        J[过温保护OTP<br/>温度过高降功率]
        K[短路保护<br/>检测到短路立即切断]
    end
    
    F --> H
    H --> I
    I --> J
    J --> K
    
    style A fill:#e3f2fd
    style F fill:#c8e6c9
    style G fill:#ffcdd2

USB Type-C认证协议

随着USB-C端口成为笔记本电脑和手机的标配,安全问题日益突出。恶意设备可能通过USB-C端口发起攻击,损坏的充电器可能输出过高的电压。

USB-IF在2019年启动了USB Type-C认证计划。这套机制基于PKI(公钥基础设施),允许主机验证连接设备的真实性。

认证流程如下:

  1. 主机发送Challenge消息,包含一个随机数
  2. 设备使用私钥对Challenge签名,返回证书链和签名
  3. 主机验证证书链的有效性,确认设备由可信CA签发
  4. 主机使用设备的公钥验证签名,确认设备拥有对应私钥

通过认证的设备可以安全地进入高功率模式或传输敏感数据。未通过认证的设备可以被拒绝或限制功能。

这套机制的核心是证书链。USB-IF委托DigiCert等CA机构签发设备证书,确保证书的可信性。设备厂商需要为每个支持认证的产品申请证书,并在设备中安全存储私钥。

硬件级保护

除了协议级认证,USB-C和PD还定义了多层硬件保护机制:

过流保护(OCP):当电流超过设定阈值时,供电端会切断VBUS。典型的阈值设置在额定电流的1.5倍左右,响应时间在微秒级。

过压保护(OVP):当VBUS电压超过安全范围时,受电端会断开连接。对于SPR设备,安全上限是21.5V;对于EPR设备,上限提高到53.65V。

过温保护(OTP):电源控制器监测温度,过热时降低功率或停止输出。

短路保护:当检测到VBUS对地短路时,立即切断输出,防止损坏。

这些保护机制由专用的USB-C控制器芯片实现,如Cypress(现为Infineon)的CCG系列、TI的TPS6598x系列、ST的STUSB系列等。这些芯片集成了CC检测、PD协议栈、功率开关和多种保护功能,大大简化了产品设计。

与私有协议的关系:共存还是竞争?

私有协议的崛起

在USB PD普及之前,高通的Quick Charge(QC)协议主导了快充市场。QC通过在D+/D-数据线上传输电压调整指令,实现了比标准5V更高的充电电压。

QC 2.0支持5V/9V/12V三档电压,QC 3.0引入了以200mV步进调整电压的能力,QC 4.0开始支持USB PD。这种演进反映了市场的选择:PD的开放性和通用性最终战胜了私有协议的先发优势。

华为的SCP(SuperCharge Protocol)、OPPO的VOOC等私有协议采用了不同的技术路线:低压大电流。它们不提高充电电压,而是增大电流至4A甚至6A。这种方案减少了手机内部的降压损耗,但需要专用的线缆和充电器。

PD的胜利与私有协议的转型

USB PD最终成为行业标准,原因有三:

第一,通用性。一个PD充电器可以为所有支持PD的设备充电,无需考虑品牌和型号。这对消费者友好,也减少了电子垃圾。

第二,开放性。PD规范由USB-IF维护,任何厂商都可以实现,无需支付专利费。这降低了进入门槛。

第三,功能性。PD 3.0的PPS功能提供了比QC 3.0更精细的电压控制(20mV vs 200mV),而且PD还支持角色交换、Alternate Mode等功能,远超单纯快充的范畴。

如今,大多数主流手机厂商都在私有快充之外支持PD。一些厂商甚至开始放弃私有协议,全面转向PD。2024年欧盟的通用充电器法规要求所有手机、平板、相机等设备支持USB-C和PD,进一步推动了PD的普及。

工程实现的挑战

控制器芯片的选择

实现USB PD需要专用的控制器芯片。这些芯片大致分为两类:

第一类是纯PHY芯片,如ON Semiconductor的FUSB302。这类芯片只实现物理层功能:BMC编码解码、CC检测、CRC校验等。协议栈和策略需要运行在主控MCU上,通过I2C接口与PHY通信。FUSB302价格低廉,但需要较多的软件开发工作。

第二类是全功能控制器,如TI的TPS65988、ST的STUSB4700。这类芯片集成了完整的PD协议栈、功率开关、保护电路等。用户只需通过GUI配置参数,芯片就能自动处理PD协商。这类芯片简化了开发,但成本较高。

第三类是混合模式控制器,如ST的STUSB4531。它内部运行完整的PD协议栈,但也允许外部MCU通过特定接口干预协议行为。这种模式在灵活性和易用性之间取得了平衡。

软件协议栈的实现

对于使用纯PHY芯片的开发者,需要自己实现PD协议栈。开源社区提供了一些参考实现:

  • Chromium OS的USB-PD模块是功能完整的实现,支持PD 3.0的大部分功能。
  • Clara Hobbs的PDB(PD Buddy)项目针对STM32和FUSB302设计,适合嵌入式场景。
  • Ralim的usb-pd库是基于PDB的分支,在一些开源硬件项目中得到应用。

实现协议栈的挑战在于状态机的复杂性和时序的严格要求。例如,收到Source_Capabilities消息后,必须在tSendResponse(约5.5秒)内回复Request,否则协商失败。又例如,PPS模式需要周期性发送Request,间隔不能超过operating timeout。

兼容性测试

USB PD规范庞大而复杂,不同厂商的实现难免存在差异。USB-IF提供了兼容性测试程序,通过测试的产品可以获得认证。

兼容性测试覆盖以下方面:

  • 电气特性:VBUS电压精度、时序、纹波等
  • 协议行为:消息格式、状态机转换、错误处理等
  • 互操作性:与参考设备的通信

通过认证的产品会进入USB-IF的产品数据库,消费者可以查询验证。但市场上仍存在大量未认证或虚假认证的产品,兼容性问题时有发生。

未来展望

PD 3.2及以后

USB-IF持续更新PD规范。目前最新的PD 3.2规范主要是一些修订和澄清,没有引入重大新功能。但业界已经在讨论下一版本的增强方向:

更高的功率:600W甚至更高的功率正在被讨论,以支持更多类型的设备。这将需要更高的电压和新的线缆标准。

无线充电集成:将PD与无线充电协议整合,实现有线到无线的无缝切换。

更智能的功率管理:根据设备状态动态调整功率分配,延长电池寿命。

标准化的代价

USB PD的成功也带来了标准化的代价。规范变得越来越复杂,实现成本上升。PD 3.1规范文档超过800页,理解所有细节需要投入大量时间。

另一方面,消费者的期望也在提高。他们希望一个充电器能为所有设备充电,并且充电速度足够快。这种期望推动着标准的演进,也给设备厂商带来了压力。

结语

USB Power Delivery用十五年的时间,从一个雄心勃勃的概念发展成无处不在的标准。它统一了混乱的快充市场,让一台充电器为从耳机到笔记本的各种设备供电成为可能。

这个成功的背后,是精巧的协议设计。从BMC编码到PDO结构,从PPS到EPR,每一层设计都服务于特定的问题。协议栈的层次结构借鉴了计算机网络的思想,角色交换机制赋予了双角色设备灵活性,认证协议保障了安全性。

但协议只是纸面上的规范,真正的挑战在于工程实现。控制器芯片、软件协议栈、兼容性测试——每一个环节都可能成为瓶颈。树莓派4的E-marker兼容问题提醒我们,细节决定成败。

下一个十五年,USB PD会走向何方?更高的功率?更智能的管理?还是被某种新技术取代?无论答案如何,USB PD已经证明了:一个精心设计的开放标准,可以改变一个行业。


参考文献

  1. USB Power Delivery Specification R3.1 V1.7. USB-IF, 2023. https://www.usb.org/sites/default/files/USB%20PD%20R3.1%20V1.7_0.zip

  2. USB Type-C Cable and Connector Specification Revision 2.0. USB-IF, 2019.

  3. Chang, Cindy. “Power Delivery Origin and Specification.” Granite River Labs, 2021. https://www.graniteriverlabs.com/en-us/technical-blog/usb-pd-power-delivery-spec-versions

  4. “The Basics of USB Power Delivery Negotiations.” Acroname, 2024. https://acroname.com/blog/basics-usb-power-delivery-negotiations

  5. “USB PD Coding.” eeucalyptus.net, 2023. https://eeucalyptus.net/2023-12-06-usb-pd-1.html

  6. “All About USB-C: Resistors And Emarkers.” Hackaday, 2023. https://hackaday.com/2023/01/04/all-about-usb-c-resistors-and-emarkers/

  7. “What’s the Difference Between USB Power Delivery 3.0 and 3.1?” ENLVSUN, 2026. https://www.enlvsun.com/whats-the-difference-between-usb-power-delivery-30-and-31

  8. “USB-C Power Delivery 3.1 vs. 3.0: Best Guide for 240W Charging.” Life Cables, 2026. https://lifecables.com/usb-c-power-delivery-3-1-vs-3-0-240w/

  9. “Fast Role Swap (FRS) Switch User Guide.” USB-IF. https://www.usb.org/sites/default/files/FRS%20Switch%20Documentation.pdf

  10. “Overcoming the challenges of USB PD 3.0’s Fast Role Swap.” Power Electronic Tips, 2019. https://www.powerelectronictips.com/overcoming-challenges-usb-pd-3-0-fast-role-swap/

  11. “What Is 240W USB Extended Power Range (EPR)?” Plugable, 2021. https://plugable.com/blogs/news/what-is-240w-usb-extended-power-range-epr

  12. “240W USB-C Cable Performance Testing and Safety Considerations.” UL. https://www.ul.com/insights/240w-usb-c-cable-performance-testing-and-safety-considerations

  13. “USB Type-C and Power Delivery DisplayPort Alternate Mode.” STMicroelectronics, 2018. https://www.st.com/resource/en/technical_article/ta0356-usb-typec-and-power-delivery-displayport-alternate-mode-stmicroelectronics.pdf

  14. “Sending Vendor-Defined Messages (VDMs) with USBHub3c.” Acroname, 2025. https://acroname.com/blog/sending-vendor-defined-messages-vdms-usbhub3c

  15. “USB-IF Launches USB Type-C Authentication Program.” USB.org, 2019. https://www.usb.org/sites/default/files/2019-01/USB-IF_USB%20Type-C%20Authentication%20Program%20Press%20Release_FINAL_20181227.pdf

  16. “DigiCert Selected by USB-IF to Operate Managed PKI for USB Type-C Authentication.” DigiCert, 2018. https://www.prnewswire.com/news-releases/digicert-selected-by-usb-if-to-operate-managed-pki-for-usb-type-c-authentication-300748888.html

  17. “FUSB302 - Programmable USB Type-C Controller w/PD.” ON Semiconductor. https://files.pine64.org/doc/datasheet/pinecil/FUSB302-D.PDF

  18. “USB PD Stand-alone Sink Controller.” oxblog, 2019. https://blog.oxplot.com/usb-pd-standalone-sink-controller/

  19. “USB Type-C and USB PD Demystified.” STMicroelectronics, 2019. https://www.st.com/content/dam/AME/2019/technology-tour-2019/chicago/presentations/T1S3_Schaumburg_USB-Type-C_G.Gosciniak.pdf

  20. “USB Power Delivery: The Technology 2 - USB Type-C and Role Swap.” Renesas. https://www.renesas.com/en/support/engineer-school/usb-power-delivery-03

  21. “Fast role swap power architecture.” Texas Instruments. https://www.ti.com/lit/pdf/slyy147

  22. “USB-C PD Fast Role Swap – The consumer experience uninterrupted.” ON Semiconductor. https://www.onsemi.com/site/pdf/ONSB336.pdf

  23. “DisplayPort: Tapping The Altmode.” Hackaday, 2023. https://hackaday.com/2023/07/24/displayport-tapping-the-altmode/

  24. “Exploring USB Type-C Alternate Mode Universality.” Synopsys, 2017. https://www.synopsys.com/blogs/chip-design/usb-type-c-alternate-mode-universality.html

  25. “USB-C for Engineers, Part 3.” Reclaimer Labs, 2017. https://www.reclaimerlabs.com/blog/2017/2/1/usb-c-for-engineers-part-3

  26. “USB快充(即USB Power Delivery, USB PD)的核心概念和原理.” CSDN, 2024. https://blog.csdn.net/xhxh510573522125/article/details/142518523

  27. “USB PD快充协议.” 腾讯云. https://cloud.tencent.com/developer/article/2165495

  28. “快充技术:USB Power Delivery 和 Quick Charge 介绍.” Granite River Labs. https://www.graniteriverlabs.com/zh-tw/technical-blog/quick-charge-usb-power-delivery-overview

  29. “USB PD协议.” 哔哩哔哩. https://www.bilibili.com/read/cv34375367/

  30. “USB4 Alt-Mode Testing: DPAUX and USB-PD.” Teledyne LeCroy, 2021. https://blog.teledynelecroy.com/2021/12/usb4-alt-mode-testing-dpaux-and-usb-pd.html

  31. “What is USB-C DisplayPort (DP Alt Mode) and Why it Matters.” BenQ. https://www.benq.com/en-us/knowledge-center/knowledge/usb-c-introduction-what-is-dp-alt-mode.html

  32. “New USB Type-C Standards Offer Cryptographic-Based Security.” Dark Reading. https://www.darkreading.com/application-security/new-usb-type-c-standards-offer-cryptographic-based-security

  33. “AUTHENTICATION FOR USB TYPE-C.” NXP, 2016. https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/ftf2016/206/1/MHW-N1910%20Authentication%20for%20USB%20Type-C.pdf

  34. “Implementing USB-C PD PHY directly into micro-controller.” Stack Exchange, 2023. https://electronics.stackexchange.com/questions/649227/implementing-usb-c-pd-phy-directly-into-micro-controller

  35. “Hybrid USB PD controller adds protocol flexibility without full firmware.” EE World Online, 2026. https://www.eeworldonline.com/hybrid-usb-pd-controller-adds-protocol-flexibility-without-full-firmware/

  36. “STMicroelectronics Releases USB PD Sink Controller With Hybrid Mode.” All About Circuits, 2026. https://www.allaboutcircuits.com/news/stmicroelectronics-releases-usb-pd-sink-controller-with-hybrid-mode/

  37. “How to manage fast role swap (FRS) in an STM32.” ST Community, 2024. https://community.st.com/t5/stm32-mcus/how-to-manage-fast-role-swap-frs-in-an-stm32/ta-p-748689

  38. “USB PD 3.0 fast role swap switching considerations.” Texas Instruments. https://www.ti.com/lit/pdf/ssztaq4

  39. “PD 3.0 vs PD 3.1: What’s the Real Difference?” Trivano Shop, 2026. https://trivanoshop.com/pd-3-0-vs-pd-3-1/

  40. “Understanding USB PD 3.1 vs PD 3.0 vs PD 2.0.” Wandkey, 2024. https://wandkey.com/usb-pd-3-1-vs-pd-3-0-vs-pd-2-0/

  41. “What is Fast Role Swap in USB PD?” ON Semiconductor. https://onsemineworg.my.site.com/onsemisupportcenter/s/article/What-is-Fast-role-swap-in-USB-PD

  42. “A Closer Look at USB PD 3.0’s Fast Role Swap.” Electronic Design. https://www.electronicdesign.com/technologies/power/article/21805076/protection-from-puppies-or-wombats-a-closer-look-at-usb-pd-30s-fast-role-swap

  43. “POWER DELIVERY (PD) VENDOR-DEFINED MESSAGE (VDM).” Texas Instruments, 2022. https://www.tdcommons.org/cgi/viewcontent.cgi?article=5996&context=dpubs_series

  44. Ralim/usb-pd: USB-PD driver stack for the FUSB302. GitHub. https://github.com/Ralim/usb-pd

  45. “How do I select USB-PD voltage with the FUSB302?” ON Semiconductor Community. https://community.onsemi.com/s/question/0D54V00007KN81DSAT/how-do-i-select-usbpd-voltage-with-the-fusb302

  46. “STUSB4500 USB Type C Power Delivery & Backwards.” Reddit, 2020. https://www.reddit.com/r/microcontrollers/comments/gfcxfd/stusb4500_usb_type_c_power_delivery_backwards/