USB-C 入门系列|第 4 章 / 连载中
你正在阅读 第 4 章:PD 快充协商,充电器和设备如何决定功率。如果你是从搜索引擎直接进来的,可以先看总目录,也可以按上一篇、下一篇顺着读。
前面第三章已经讲过线材电流上限、高功率线材和 E-marker 这些内容。这一章就不再重复讲线材能承受多少电流了,我们把视角往后挪一步:当线插上、设备也已经知道对面存在之后,充电器和设备到底是怎么谈出一个充电功率的?
这就是 USB PD 协商。
我觉得 USB PD 最容易被误解的地方,是很多人会把它想成一个“充电器主动输出”的过程。比如充电器标着一个很高的功率,大家就会下意识觉得它应该主动把最大能力推给设备;如果手机只显示二十多瓦,就觉得充电器没发挥出来。其实 PD 不是这样工作的。更准确的理解是:充电器先报出自己有哪些能力,设备再从里面选一个自己想要的,充电器确认后才切换电源状态。
所以这章的核心不是某个具体功率数字,而是背后的流程:Source_Capabilities、Request、Accept、PS_RDY,以及最后建立的 Explicit Contract。
USB PD 更像谈判,不像蛮力供电
如果把 USB-C 的物理连接看成“见面”,那么 USB PD 就是见面之后的谈判。
设备插上去以后,充电器不会上来就说“我有高压档位,我直接给你 20V”。这太危险了。对面可能是手机,可能是耳机,可能是移动电源,也可能是一台笔记本。不同设备能接受的电压、电流和充电策略完全不同。一个负责任的电源系统,最怕的就是在不知道对面是谁的时候自作主张。
所以 PD 的做法很克制:先建立基础连接,再交换能力,再请求档位,再确认切换。
这里可以先记住一个很短的流程:
Source_Capabilities -> Request -> Accept -> PS_RDY -> Explicit Contract
这条线就是本章的主线。
Source 和 Sink:先分清谁在供电
在 USB PD 里,供电方叫 Source,用电方叫 Sink。
你把手机插到充电器上,充电器是 Source,手机是 Sink。你把笔记本插到充电器上,充电器还是 Source,笔记本是 Sink。你用笔记本给手机反向充电,这时笔记本就变成 Source,手机是 Sink。
这个概念本身不难,难的是不要把它和数据方向混在一起。USB 里还有 DFP、UFP 这些数据角色,后面还有 Alt Mode、VDM、视频输出等一堆东西。但在这篇里,我们先不展开那些。只要围绕快充来理解,Source 就是“这轮供电的人”,Sink 就是“这轮用电的人”。
从这个角度看,PD 协商其实就是 Source 和 Sink 在确定一件事:这一轮我们到底按什么电源条件工作。
第一步:充电器先发能力列表
USB PD 协商里第一条很重要的消息叫 Source_Capabilities。
这个词看起来像规范里的大词,但意思非常朴素:充电器把自己的供电能力发给设备。
我很喜欢用“菜单”来理解它。充电器不是只说一句“我最大功率很高”,而是会把自己能提供的几个档位列出来。比如一个常见的 USB-C 充电器,可能会告诉设备:我可以提供 5V,也可以提供 9V、15V、20V,不同电压下有不同的电流能力。
这时设备看到的不是一个抽象的“65W”,而是一组选项。每个选项背后都可以用 $P=U \times I$ 算出功率。比如某个档位是 20V 3.25A,那就是 $20\text{V}\times3.25\text{A}=65\text{W}$。
在协议里,这些选项通常会以 PDO 的形式存在。PDO 是 Power Data Object,可以暂时理解成菜单上的一个供电套餐。下一章我们会专门讲 PDO、RDO、APDO 和 PPS,所以这里不用急着把格式细节塞进脑子里。第四章只需要先理解:充电器会先把菜单递出来。
这一步很关键,因为设备不能凭空点一道菜单上没有的菜。如果 Source_Capabilities 里没有某个档位,Sink 就不能假装它存在。
第二步:设备根据自己需求发 Request
菜单递出来以后,真正做选择的是设备。
设备会发一条 Request。它的意思大概是:我看完你的能力列表了,我想使用其中这个档位,并且我希望按这个条件工作。
这就是为什么很多时候“同一个充电器,不同设备功率不同”。因为充电器只是提供能力,设备才是发起请求的一方。
比如一台手机可能只请求一个比较保守的档位,平板可能请求更高一点,笔记本又可能请求更高。这里不是充电器偏心,而是每台设备的电池、温度、充电芯片、系统策略都不一样。设备不是为了把充电器榨干而存在,它会按自己的节奏来。
这一点特别重要,因为它能解释很多日常现象。你拿一个高功率充电器给手机充电,手机没有跑到充电器标称上限,不代表充电器一定虚标。更常见的情况是,手机根本没有请求那么高。它可能觉得二十多瓦已经够了,也可能因为电量、温度或协议策略限制,不愿意再往上走。
换句话说,PD 快充里不是 Source 强行决定 Sink 吃多少,而是 Sink 从 Source 的能力里挑一个自己要的。
第三步:Accept 只是同意,不是已经切好电
设备发出 Request 后,充电器如果认可这个请求,会回复 Accept。
这里有个很容易忽略的点:Accept 不是“电已经切好了”,它只是“我同意你的请求”。
为什么要分这么细?因为电源切换不是一句话的事。从一个电压切到另一个电压,需要电源控制器调整输出,需要等待电压稳定,也需要确保保护条件成立。PD 协议不希望 Sink 一看到 Accept 就默认新电源已经可用了,所以还需要下一步。
这个设计很像你去店里点餐。店员说“可以做”,只是接受了你的订单;真正能吃,是菜上桌之后。
第四步:PS_RDY 才是“电源准备好了”
当 Source 完成电源状态切换后,会发送 PS_RDY。
PS_RDY 可以理解成 Power Supply Ready,也就是电源已经准备好。到这一步,Sink 才能认为新的供电条件可以正式使用。
所以一个更像真实过程的描述应该是:
充电器发菜单 -> 设备点档位 -> 充电器接受 -> 充电器切电源 -> 充电器通知准备完成
这就是为什么我说 USB PD 很谨慎。它不是“设备想要什么,充电器马上切什么”,而是每一步都有确认。尤其是从 5V 进入更高电压时,这种确认就很重要。
如果你用电流表看某些设备,会看到插入后电压并不是一瞬间就到目标档位,而是有一个短暂过程。这个过程背后就可能包含了连接识别、能力发送、请求、接受、电源准备这些动作。肉眼看起来只是数字跳了一下,协议里其实已经走了一套流程。
Explicit Contract:谈妥之后才算正式供电
当 Accept 和 PS_RDY 都完成之后,双方会进入一个叫 Explicit Contract 的状态。
这个词可以叫“显式供电合同”。听起来有点官方,但意思并不玄。它就是 Source 和 Sink 都明确知道:这一轮我们按哪个供电条件来。
比如设备请求了某个 20V 档位,Source 接受并准备完成,那么双方就按这个条件工作。这里仍然可以用 $P=U \times I$ 去理解功率,但重点不在公式,而在“双方都同意了这个状态”。
这个合同不是永久的。后面如果设备温度升高、电池进入快充后段、多口充电器重新分配功率,或者系统策略发生变化,都可能触发新的协商。也就是说,PD 不是开关,而是一段会根据状态变化调整的关系。
这也是很多人用电流表观察快充时会觉得奇怪的地方:刚插上去功率很高,过一会儿又降下来;多插一个设备,原来的设备功率也变了。这些现象不一定是异常,它们可能只是新的供电合同替换了旧的供电合同。
这一章和第三章的分工
第三章解决的是“为什么有些线只能到某个电流上限”。那一章更关注线材、电流能力、E-marker、高功率边界。
第四章解决的是另一件事:在这些边界之内,设备和充电器如何决定具体用哪个档位。
所以如果第三章是在讲“路最多能承受多宽”,第四章就是在讲“车要不要走这条路、走哪一档速度、什么时候换档”。
线材能力当然会影响最终结果,但它在这一章只作为前提存在。真正要理解的主角,是 PD 消息协商。
用电流表看这一章,应该看什么
如果你手里有维简 K2 这类 USB-C 电流表,这一章可以对应到几个现象。
第一,看电压有没有从基础状态跳到更高档位。比如插上后先是 5V,随后进入 9V、15V 或 20V,这通常说明设备和充电器完成了某种协商。
第二,看电压变化之后电流是否稳定。只看电压不够,因为功率还要乘电流。比如同样是 20V,不同电流下的最终功率会差很多。
第三,看插拔、换设备、换充电器时,协商结果是否变化。如果同一台设备在不同充电器上请求到的档位不同,那可能是 Source_Capabilities 不同;如果同一只充电器给不同设备结果不同,那多半是 Sink 的请求不同。
不过也要记住,普通电流表看到的是结果,不一定能显示每一条 PD 消息。它能帮你看到“协商之后变成什么样”,但不一定能完整告诉你“中间每一步消息怎么走”。如果要看完整 PD 消息,需要协议分析工具。
常见误区
充电器标多少瓦,设备就会吃多少瓦吗?
不会。充电器标称的是能力上限,设备请求的是自己当前想要的档位。Source 提供菜单,Sink 点菜,不是 Source 强行把最大功率塞给 Sink。
看到 20V 就代表满血快充吗?
不代表。20V 只是电压,功率还要看电流。比如 $20\text{V}\times1\text{A}=20\text{W}$,而 $20\text{V}\times3\text{A}=60\text{W}$。它们都是 20V,但完全不是一个功率等级。
Request 之后是不是马上就切电压?
不是。Request 之后,Source 还要回复 Accept,然后完成电源切换,最后发送 PS_RDY。对 Sink 来说,PS_RDY 才是“电源准备好了”的信号。
为什么功率会中途变化?
因为供电合同可以重新协商。电量、温度、系统策略、多口功率分配,都可能让设备重新请求一个更合适的档位。
写在最后
这一章真正想讲清楚的是:USB PD 快充不是一个单向输出过程,而是一套有来有回的协商流程。
充电器先告诉设备自己能提供什么,设备再选择自己需要什么,充电器确认并完成电源切换,最后双方进入一个明确的供电合同。理解了这一点,再看手机为什么吃不满标称功率、笔记本为什么功率会变化、多口充电器为什么会重新分配功率,就不会只从“充电器够不够强”这一个角度去想了。
下一章就可以继续拆“菜单”本身。也就是 USB PD 里的 PDO、RDO、APDO 和 PPS。到那一章,我们再具体看:Source_Capabilities 里的每个档位到底长什么样,Sink 的 Request 又是如何表达“我要这个档位”的。