3. 协议层模型:PD协议的分层结构与SOP信号

搞通信的都知道,任何一个复杂协议都不是一锅粥堆出来的。USB PD 也不例外——它严格分了三层:物理层、协议层、策略层。每一层各管各的事,又通过标准接口联动。

这套分层模型,说白了就是 “别越级汇报”。我刚开始调 PD 的时候,老觉得策略层直接改电压多省事啊?后来一次误操作把 CC 线烧了才明白——物理层不搞定,上层再聪明也没用。

3.1 分层到底怎么分?

下面这张表把三层的关系和职责拆开了,你对照着看会更清楚:

层次 英文 负责什么 典型要素
策略层 Policy Engine 电源协商、角色切换、状态机管理 Source/Sink/DRP 状态,PDO 选择
协议层 Protocol Layer 事务组织、消息封装、重传、GoodCRC Header、Data Object、Message ID
物理层 Physical Layer 电气信号、BMC 编解码、CRC 校验、SOP CC 线、BMC 符号、Rp/Rd、SOP 序列

你注意看,物理层在最底下,干的是最脏最累的活——把 0 和 1 变成差分电压,编码解码,还要识别报文的开始和结束。协议层更像一个翻译官,把物理层的原始比特流翻译成 “要增加电压到 5V 3A” 这样有意义的消息。策略层则是个决策者,根据当前状态决定下一步该干什么。我在一次产品联调中遇到过策略层乱跳状态的问题,最后定位到是物理层的 SOP 识别不稳定导致消息串扰——嗯,分层虽好,但底层不稳全盘崩。

3.2 物理层:SOP 与信号的门槛

物理层最核心的任务之一就是判断 “报文什么时候开始”。这就引出了这节课的重点——SOP(Start of Packet)信号。

SOP 不是简单的一串脉冲。它是用一组特定的 BMC 编码符号来标记报文起始的。我曾经在示波器上蹲过一整个下午,就是为了捕获一个正确的 SOP 波形——当时发现我们的板子发出的 SOP 前导码少了一个周期,导致接收方死活不解码。

3.3 SOP 到底是什么?

SOP 位于报文的开头,结构上分成两部分:

  • 前导码(Preamble):64 个交替的 0/1 位,用于接收端时钟同步。
  • SOP 序列:4 个 5 比特符,用 BMC 编码承载,用来标识通信目标。

不同的 SOP 序列代表不同的通信对象。标准里定义了四种主要类型:

SOP 类型 通信方向 典型用途
SOP Source ↔ Sink 双方电源协商、正常消息交换
SOP' Source ↔ Cable 读取线缆 E-Marker、线缆供电
SOP'' Sink ↔ Cable Sink 端读取线缆信息
SOP''' Cable ↔ 自身控制器 线缆内部通信(很少直接看见)
Hard Reset 任意方发 全局复位,重新开始协商

为什么会需要这么多 SOP 类型?你想想看,在一条 Type-C 线缆里,Source、Sink、E-Marker 控制器三个角色可能同时在线。如果没有 SOP 区分,线缆发出的消息被 Source 当成 Sink 消息解码,那不乱套了?

我记得第一次调试 SOP' 的时候,一直收不到线缆回复。后来发现是硬件把 SOP' 序列错配成了 SOP 序列。解决办法很简单——检查 BMC 解码器是否把 SOP' 的 K 码序列正确识别。你可以用逻辑分析仪对比标准时序模板。

3.4 协议层:让消息有意义

协议层在物理层之上。它把物理层传送过来的比特流“翻译”成 Header 和 Data Object。比如说,Source 发了一个 Request Data Object,协议层负责拆包、校验 GoodCRC、管理 Message ID,以确保消息不丢失、不重复。

避坑:我遇到过一台设备老是重复发同一个 Request,原因是它对端的 GoodCRC 没有及时回复。后来我们在协议层增加了超时重传机制才解决。这属于分层设计里典型的“上层依赖下层”的问题,物理层丢了一个 CRC,协议层就得重来。

3.5 策略层:谁来拍板?

策略层是顶层大脑。它不关心底层是 0 还是 1,只看状态机——当前是 Source 还是 Sink?要不要切换角色?该用哪个 PDO 供电?

我习惯把策略层想象成公司的 CEO:物理层是前台,协议层是项目经理,而策略层做决策。CEO 不会去管前台的电话线怎么接,但前台信号不好,CEO 就得等。

3.6 一张图看懂 PD 分层与 SOP

下面这张 SVG 将三层模型和 SOP 的位置画在了一起,你一眼就能看清他们怎么配合。

PD 协议分层模型与 SOP 信号位置 策略层 Policy Engine 状态机 / PDO 协商 / 角色切换 协议层 Protocol Layer 消息封装 / GoodCRC / 重传 / Message ID 物理层 Physical Layer BMC 编解码 / CC 线 / Rp/Rd / CRC SOP 序列 前导码 BMC 编码器 SOP 位于物理层最前端,由前导码 + 4 个 K 码序列组成,用于区分不同通信对象

你看,策略层在顶部发号施令,协议层在中间组织消息,物理层在最底下发送和接收原始信号。SOP 信号就嵌在物理层的起始环节——没有它,接收方连报文什么时候开始都不知道。

一句话记住:

  • 三层从上往下是“决策 → 翻译 → 信号”。
  • SOP 属于物理层,但影响整个协议栈——因为它决定了消息是给 Source、Sink 还是线缆。