1. PD Negotiation 概述
1.1 什么是 PD Negotiation
PD Negotiation,翻译过来就是"功率输送协商"。说白了,这是 USB-C 设备之间的一场电压电流谈判。
你插上一个充电器,手机通过 CC 线告诉充电器:"我能吃多少电,你那边能给多少?"两边来回几个回合,定下一个双方都支持的电压和电流组合。这个过程,就叫 PD Negotiation。
我记得刚做第一个 PD 项目时,总觉得这玩意儿就是个握手协议,没啥难度。结果调试时发现手机插上去就是不充电……查了两天才找到原因——协商时序超了 200μs,充电器直接拒掉了请求。嗯,从那以后我再也不敢小看这个"握手"了。
一个完整的 PD Negotiation 包含三个核心动作:
- 能力宣告——源端(Source)告诉宿端(Sink)自己能给哪些电压电流组合
- 请求协商——宿端从中选一个组合,向源端发起请求
- 确认执行——源端同意后切换电压,完成一次功率调整
整个过程的时序窗口非常紧。你想想看,从发起请求到电源切换完成,中间几百微秒的事,任何一个环节卡住,设备就充不上电。
1.2 PD 协议基础
PD 协议不是单片式的,它分了好几个层级。我个人习惯把它分成三层来理解:
- 物理层——负责在 CC 线上传输差分信号,定义电平、速率、编码
- 协议层——定义消息格式、事务规则、重传机制
- 策略层——决定什么时候发什么消息,怎么响应对方的请求
咱们做时序分析和调试,主要打交道的是协议层和策略层。物理层通常由 PHY 芯片搞定,但如果你遇到信号质量问题,也得回头查物理层。
PD 协议里最核心的消息类型有这么几种:
| 消息类型 | 方向 | 用途 |
|---|---|---|
| SRC_CAP | Source → Sink | 源端宣告自身供电能力 |
| SNK_CAP | Sink → Source | 宿端宣告自身用电需求 |
| REQUEST | Sink → Source | 宿端从 SRC_CAP 中选一组参数并发起请求 |
| ACCEPT / REJECT | Source → Sink | 源端同意或拒绝请求 |
| PS_RDY | Source → Sink | 源端通知电压已切换完成,可以开始取电 |
为什么会分这么多消息?因为每一步都需要确认。PD 协议的设计哲学就是"安全优先"——每次电压切换前,双方必须明确确认,不能出现误操作。
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 协议层,不要只盯着协议看。
下面这张图把 PD Negotiation 涉及的知识层级串在一起,你可以看到从物理层到协商层的完整关系。
从这张图你可以看到,PD Negotiation 不是孤立的协议交互,它依赖 Type-C 物理层的稳定连接,也依赖每一层的时序合规。后续章节我们会逐层拆解,把每个环节的时序参数和调试方法讲透。