1. PD Negotiation 概述:为什么你的 USB-C 设备需要“谈判”?

大家好,我是你们这门课的老朋友。

说到 USB-C 接口,很多人第一反应是“插头终于不用分正反了”。但做了这么多年嵌入式,我得说,这个接口背后的故事远比“正反插”要复杂得多。特别是当你要在 OTG 场景下——说白了就是让手机当主机去接 U 盘、让相机直连硬盘——这时候,USB PD 协商就成了决定成败的关键环节。

咱们这第一课,就把这个“谈判”的来龙去脉捋一捋。

1.1 USB PD 协议简介:从 5V 到 100W 的跨越

传统的 USB 2.0/3.0,供电能力很有限。标准口最大 5V/0.5A,就算是 USB 3.0 也只有 5V/0.9A。想给笔记本充电?门儿都没有。

USB PD(Power Delivery)的出现,彻底改变了这个局面。它通过 CC 线(Configuration Channel)进行数字通信,把供电电压从 5V 拉到了最高 48V,功率飙到了 240W(PD 3.1 EPR)。

我个人习惯把 PD 协议的核心特点归纳为三点:

  • 电力协商灵活:不再是固定 5V,而是提供多种电压档位(Profile),比如 5V、9V、15V、20V,设备按需选择。
  • 双向供电:供电方向可以动态切换。今天手机给耳机充电,明天充电宝给手机充电,角色可以互换。
  • 数据与供电分离管理:CC 线专门管供电协商,数据线(DP/DM/TX/RX)只传数据,互不干扰。
一个小提示:很多工程师刚接触时搞混 CC 和 D+/D- 的作用。记住一条——CC 只管“供电对话”,不运载数据。你要是拿 CC 当数据线用,那设备肯定点不亮。

USB PD 的通信模型其实很简单。它基于 BMC(双向标记编码)在 CC 线上传输数据包。整个握手过程包括:物理层连接 -> 发现对方能力 -> 协商供电配置 -> 进入指定供电模式。这套流程,我当年在调第一个 PD 项目时踩了不少坑,后面会详细讲。

1.2 OTG 场景介绍:让设备角色“动起来”

OTG(On-The-Go)这个概念,其实已经有很多年头了。它的核心思想是:USB 设备不再被死板地定义为“主机(Host)”或“外设(Device)”。今天你接个鼠标,你就是外设;明天你插个 U 盘,你就得切换到主机模式。

传统 OTG 是靠 ID 引脚(Mini-USB 时代)或者电阻下拉(USB-C 时代)来识别角色。但到了 USB-C 下,事情变得更有趣了。为什么?

因为 USB-C 的 CC 引脚不仅能识别插入,还能动态协商谁当 Source(供电方),谁当 Sink(受电方),甚至谁当 Dual-Role(双角色)。

我举个例子你就明白了:

传统 OTG 场景 USB-C + PD OTG 场景
手机只能接 U 盘(限定主机/从机) 手机接显示器(可协商供电方向和数据方向)
充电宝固定输出 5V 充电宝与手机协商后输出 9V 给手机快充
相机连电脑只能传照片 相机连手机,手机给相机供电并读取照片

你看,OTG 场景下,设备角色变得非常灵活。而正因为灵活,才需要 PD 协商这个“裁判”来维持秩序。

注意:USB-C OTG 和 PD 是两个独立但又必须协同工作的机制。OTG 决定设备谁是主机/从机,PD 决定供电能力。如果你只实现了 PD 协商但没处理好 OTG 切换,设备很可能出现“能充电但传不了数据”的尴尬现象。

1.3 协商的重要性:为什么不能“直接通电”?

很多人会问:直接给最高电压不就行了?干嘛还要费劲做协商?

答案是:安全第一,兼容第二,效率第三。

我当年做第一个 Type-C 项目时,就犯过这个错误。那时为了省成本,我在协议栈里写死了直接请求 20V。结果接上一块老旧的开发板,直接把板子上的 LDO 烧了。嗯,从那以后,我再也不敢跳过协商步骤了。

具体来说,协商的重要性体现在三个方面:

  1. 电压匹配:不同设备支持的电压范围不同。一个 5V 的耳机,你给它 20V,不是烧坏就是保护。协商就是让双方确认“我能给什么、你受得了多少”。
  2. 供电角色仲裁:当两个 Dual-Role 设备对接时(比如两个手机对插),谁当 Source、谁当 Sink?这不靠猜,而是靠 CC 线上的 Power Role 协商来决定。我习惯用一句话记住:“先连接的是 Source,但协商后可以互换。”
  3. 数据角色切换:在 OTG 场景下,协商不仅仅决定电,还决定数据流向。比如你通过一个 Type-C Hub 同时接显示器、鼠标、U 盘,主机必须通过协商建立数据链路拓扑。

为了让你更直观地理解这套流程,我画了一张核心逻辑图。你看完应该能对协商的全局有个概念。

USB-C OTG 场景下的 PD 协商核心流程 ① 物理连接:CC 线导通 ② 能力发现:Source 广播电压档位 ③ 角色仲裁:Power Role / Data Role 交换 ④ 精确协商:请求/接受电压电流档位 ⑤ 建立供电协议,正常供电

加一段小结

所以你看,USB PD 协商在 OTG 场景下,绝不仅仅是“选个电压”这么简单。它要解决物理层识别、通信层能力发现、策略层角色仲裁,最后才是供电层的数据交互。每一个环节出错,轻则功能异常,重则烧毁接口。

我建议你先把这张流程图刻在脑子里。之后每一章,我们会把这些抽象的节点拆成具体的代码实现、寄存器配置和调试技巧。等你跟着课程走完一遍,你会发现——协商,也不过是几条消息、几个状态机的事。

但在这之前,理解它为什么存在、解决什么问题,远比死记硬背协议条文更重要。

准备好了?我们下一步就深入到 CC 线的物理层,看看第一脚踩下去会触发什么信号。