1. PD Negotiation 概述

1.1 什么是 PD Negotiation

PD Negotiation,翻译过来就是"功率输送协商"。说白了,这是 USB-C 设备之间的一场电压电流谈判。

你插上一个充电器,手机通过 CC 线告诉充电器:"我能吃多少电,你那边能给多少?"两边来回几个回合,定下一个双方都支持的电压和电流组合。这个过程,就叫 PD Negotiation。

我记得刚做第一个 PD 项目时,总觉得这玩意儿就是个握手协议,没啥难度。结果调试时发现手机插上去就是不充电……查了两天才找到原因——协商时序超了 200μs,充电器直接拒掉了请求。嗯,从那以后我再也不敢小看这个"握手"了。

一个完整的 PD Negotiation 包含三个核心动作:

  • 能力宣告——源端(Source)告诉宿端(Sink)自己能给哪些电压电流组合
  • 请求协商——宿端从中选一个组合,向源端发起请求
  • 确认执行——源端同意后切换电压,完成一次功率调整

整个过程的时序窗口非常紧。你想想看,从发起请求到电源切换完成,中间几百微秒的事,任何一个环节卡住,设备就充不上电。

核心要点:PD Negotiation 的本质是源与宿之间的一次双边协议交互,目的是在保证安全的前提下,找到最优的供电参数。

1.2 PD 协议基础

PD 协议不是单片式的,它分了好几个层级。我个人习惯把它分成三层来理解:

  1. 物理层——负责在 CC 线上传输差分信号,定义电平、速率、编码
  2. 协议层——定义消息格式、事务规则、重传机制
  3. 策略层——决定什么时候发什么消息,怎么响应对方的请求

咱们做时序分析和调试,主要打交道的是协议层和策略层。物理层通常由 PHY 芯片搞定,但如果你遇到信号质量问题,也得回头查物理层。

PD 协议里最核心的消息类型有这么几种:

消息类型 方向 用途
SRC_CAP Source → Sink 源端宣告自身供电能力
SNK_CAP Sink → Source 宿端宣告自身用电需求
REQUEST Sink → Source 宿端从 SRC_CAP 中选一组参数并发起请求
ACCEPT / REJECT Source → Sink 源端同意或拒绝请求
PS_RDY Source → Sink 源端通知电压已切换完成,可以开始取电

为什么会分这么多消息?因为每一步都需要确认。PD 协议的设计哲学就是"安全优先"——每次电压切换前,双方必须明确确认,不能出现误操作。

个人经验:我建议你在调试时先把 SRC_CAP 和 REQUEST 两个消息的时序抓出来看。90% 的协商失败问题,都出在这两个消息的间隔时间上。

1.3 USB Type-C 与 PD 的关系

很多人把 Type-C 和 PD 混为一谈,其实它们是两码事。

Type-C 是一种物理接口标准,定义了插头形状、引脚排布、正反插能力。而 PD 是一种协议标准,跑在 Type-C 的 CC 引脚上,负责功率协商。

你可以这么理解:Type-C 是高速公路,PD 是路上跑的交管协议。没有高速路,交管协议没法用;但光有路没有协议,车流就乱套了。

维度 USB Type-C PD 协议
角色 物理连接标准 功率协商协议
关键引脚 CC1 / CC2 CC 线承载 BMC 信号
功能 插拔检测、方向检测、线缆识别 电压/电流协商、角色切换、VDM
工作前提 物理接插完成 Type-C 检测到 Rp / Rd 后启动

我曾经在一个项目里踩过这个坑:硬件同事反复确认 Type-C 连接没问题,CC 电平也正常,但 PD 就是协商不成功。我排查了三天,最后发现是 CC 线上的电容太大,把 BMC 信号的边沿搞塌了……嗯,物理层的问题,但表现是协议层不通。

所以你做 PD 调试时,心里一定要清楚:问题可能出在 Type-C 物理层,也可能出在 PD 协议层,不要只盯着协议看。

避坑指南:我曾经因为 Type-C 线缆里 CC 线虚焊,导致 PD 协商时断时续。换了三套软件方案都没解决,最后拿示波器一量才发现 CC 线阻抗不稳。先查物理层,再查协议层——这顺序不能乱。

下面这张图把 PD Negotiation 涉及的知识层级串在一起,你可以看到从物理层到协商层的完整关系。

PD Negotiation 技术栈与知识体系 USB Type-C 物理层 CC 引脚检测 | Rp / Rd 识别 PD 协议层 SRC_CAP | REQUEST | ACCEPT 电源协商层 电压电流请求 | 协商确认 | 功率切换 时序分析 关键时序参数 合规性验证 边界条件测试 调试方法 日志分析 波形抓取 状态机跟踪 三层架构逐层支撑,时序分析与调试方法贯穿全程

从这张图你可以看到,PD Negotiation 不是孤立的协议交互,它依赖 Type-C 物理层的稳定连接,也依赖每一层的时序合规。后续章节我们会逐层拆解,把每个环节的时序参数和调试方法讲透。

学习建议:刚开始接触 PD 的同学,我建议你先把这个三层架构记在心里。遇到问题先定位到层,再用对应层的方法去排查,效率会高很多。