USB PD物理层基础:CC线上的“悄悄话”

大家好,欢迎来到第二章。今天咱们聊聊USB PD的物理层。

说实话,很多做嵌入式的朋友,一开始都被这个物理层绕晕过。我当年第一次看PD协议时,也盯着CC线上的波形发过呆。但搞懂了这一章,后面解析消息就容易多了。

物理层说白了,就是消息怎么在一条线上传过去。USB PD用的不是普通的USB D+/D-,而是CC线。

2.1 CC线:不只是检测连接

CC线,全称Configuration Channel。很多人以为它只用来检测有没有插拔。其实它的任务有三项:

  • 连接检测:判断Source和Sink是否真的连上了。
  • 角色识别:哪个是供电方,哪个是受电方。
  • 通信通道:传输PD消息。

嗯,这里要注意。CC线是单线双向通信,不是差分对。所以抗干扰能力比D+/D-弱一些,但好在距离短。

小提示:我建议你在设计时,CC线尽量走短、走直,远离高频时钟线。免得信号被串扰搞出毛刺。

2.2 BMC编码:类似于数字“摩尔斯电码”

CC线上传数据,用的是BMC编码(Biphase Mark Code)。听着玄乎,其实原理很简单。

你想想看,BMC编码就是靠跳变来表示数据:

  • 发送逻辑“1”:每个bit周期中间加一次跳变(电平翻转)。
  • 发送逻辑“0”:每个bit周期开头加一次跳变,中间不变。

不管发什么,每个bit周期开头都跳变一次。这样接收方就能靠这个跳变来恢复时钟,不用额外传时钟信号。

我做过一个项目,因为时钟对不上,解码出来的数据全是乱的。后来发现是BMC编码的上升沿不够陡,接收端没识别出来。所以硬件上要保证上升时间尽量短。

避坑指南:我曾经遇到过厂商提供的PD收发器,BMC解码逻辑有bug,遇到连续多个“0”时丢位。后来只能在软件里做CRC校验来兜底。所以选型时,一定要看芯片的BMC解码测试报告。

2.3 电压电平:讲“悄悄话”的音量

BMC编码的信号,在CC线上是有电压范围的。Source端和Sink端的电平还不一样。

场景 电压范围 (V) 说明
Source发送 1.05 ~ 1.35 用BMC编码调制在CC线上
Source接收 0 ~ 0.2 (低电平) 看Sink拉低后的电平
Sink发送 0 ~ 0.4 通过改变负载来调变阻抗
Sink接收 0.65 ~ 1.35 检测Source调制的电压

这里有个关键点:Source通过Rp上拉到3.3V或5V,Sink通过Rd下拉到GND。所以CC线上的静态电压,取决于Rp和Rd的分压。

BMC信号就是在那个静态电压上叠加一个较小的交流摆幅。如果你测到的BMC信号幅度太小,很可能是Rp/Rd配错了。

2.4 Rp/Rd电阻配置:握手的第一步

Rp和Rd不仅仅是上拉下拉那么简单。它们的值决定了供电能力和角色。

Source端的Rp有三种值:

  • 10 kΩ(对应81 mA电流,老式Type-C)
  • 22 kΩ(对应180 mA,USB 2.0或3.0)
  • 56 kΩ(对应36 mA,仅支持USB 2.0且不带PD)

Sink端只有一个Rd:5.1 kΩ ±1%(虽然标准允许±5%,我建议用1%的,避免误判)。

为什么会这样?因为CC线上的电压被分压后,Source就能判断Sink类型:

  • Rd接在CC1上,说明Sink选了CC1作为通信通道。
  • 如果检测到Rd,说明支持PD。
  • 如果开路或短路,Source会认为连接异常。
注意:我见过有人把Rd当成普通电阻,用5%的凑合。结果批量生产时,部分设备经常断开重连。因为电阻偏差大,分压电压落在临界区了。所以Rd一定要用1%精密电阻。

知识体系结构图

下面这张图,我把物理层的四个核心部分串起来了:

USB PD物理层核心结构 USB PD 物理层核心要素 CC Configuration Channel 连接检测 & 角色识别 BMC 编码/解码 电压电平检测 Rp / Rd 电阻配置 关键要点 • CC线承载了所有PD通信,BMC编码实现无时钟传输 • 电压电平由Rp/Rd分压决定,BMC信号叠加在直流电平上 • Rd必须用1%精密电阻,避免生产偏差导致通信不稳

从图上可以看明白:CC线是“高速公路”,BMC编码是“通信协议”,电压电平是“路上的信号灯”,Rp/Rd是“收费站”——这四个东西合在一起,USB PD才能正常跑起来。

我建议你调试时,先确认CC线上能看到稳定的BMC信号,再去看协议层。如果物理层就断了,上层怎么调都白搭。

经验之谈:用示波器看CC线时,记得用差分探头或者单端探头接GND。有一次我图省事用了不共地的探头,波形全飘了。查了一天才发现是共地问题。