配置通道(CC)原理——CC1/CC2怎么干活,电阻怎么匹配,角色怎么认

各位同学好,我是老三。今天咱们聊 Type-C 里最核心的一个引脚——CC。说白了,USB 想让电源能正反插、能智能分配谁供电谁受电,全靠这两条 CC 线。我刚开始搞 PD 时觉得这东西不就是两根电阻吗?结果在项目里被坑了两次之后才老老实实把原理啃透。咱们一点点拆开看。

CC1/CC2 到底是干嘛的?

Type-C 接口有 24 个引脚,CC1 和 CC2 是其中两个。它们不是差分线,是单端信号。每根 CC 线就干三件事:

  • 检测线缆有没有插好,插的是哪一头(正插还是反插)
  • 告诉对方我是 Source(供电方)还是 Sink(受电方)
  • 协商能拿多少电流(0.5A / 1.5A / 3A)

注意,DFP(也就是 Source)端同时在两条 CC 线上都做了检测,但实际只会用其中一条。为什么会这样?因为插头正反插之后,CC1 和 CC2 会交换位置。你想想看,如果只放一个 CC 引脚,那就没法支持正反插了。

电阻上拉下拉——一张网把身份标出来

角色识别的基础就是电阻匹配。Source 端会在 CC 引脚上拉一个电阻 Rp,Sink 端会在 CC 引脚上下拉一个电阻 Rd。标准值是:

电阻 典型值 用途
Rp(Source 上拉) 10 kΩ / 22 kΩ / 56 kΩ 分别对应 3A / 1.5A / 0.5A 电流能力
Rd(Sink 下拉) 5.1 kΩ 固定值,告诉 Source “我是受电端”
Ra(线缆内部) ≈1 kΩ 识别带 E-Mark 或有 VCONN 的线缆

当 Source 和 Sink 通过线缆连上后,两边的电阻就构成了一个分压网络。Source 端的电压比较器检测 CC 线上的电压,就能知道对面接的是什么设备。我记得有一次写固件,发现 Source 端读到的 CC 电压总是偏低,查了半天发现是 Rp 焊错了阻值,把 10 kΩ 焊成了 22 kΩ,结果电流能力只能给到 1.5A。这种低级错误最容易出在打样阶段,大家务必检查 BOM 表。

核心公式:Source 端 CC 引脚电压 ≈ 3.3 V × Rd / (Rp + Rd)。
当 Rd = 5.1 kΩ,Rp = 10 kΩ 时,Vcc ≈ 3.3 × 5.1 / (10 + 5.1) ≈ 1.11 V。
实测在 0.85 V ~ 2.45 V 范围内都能识别为 Sink。

角色识别——谁当 Source,谁当 Sink

角色判定并不需要复杂的协议握手,靠的就是 CC 线上的电压等级。Source 端的比较器把电压分成几个区间:

  • ≈0.4 V 以下:没连设备,或者线缆是断的。
  • 0.25 V ~ 0.6 V 左右:对面是 Ra(带线缆识别),说明有 E-Mark 芯片或需要 VCONN。
  • 0.85 V ~ 2.45 V 左右:对面是 Rd,标准 Sink 设备。
  • > 2.45 V:可能短路或配置异常。

DRP(双角色端口)会交替在 Source 和 Sink 状态之间切换,每次切换会短暂地把 CC 线拉到对应电阻,然后检测电压。我亲自写过这样的状态机,最头疼的是电容效应——如果线缆太长,CC 线上的电容会导致电压建立变慢,DRP 会误判。我曾经在 USB 3.0 长线(约 2 米)上遇到过,DRP 经常跳到 Source 状态后瞬间又变回 Sink,就是因为电压还没来得及爬上去就被采样了。解决方法是加一个 50 μs 的去抖延迟。

实操技巧:用示波器抓 CC 电压波形,看上升沿是否平滑。如果上升时间超过 100 μs,优先检查拉电阻和走线电容。个人习惯在 Rp 和 CC 之间串联一个 100 Ω 电阻抑制振铃。

一张图看懂 CC 检测流程

下面这张 SVG 图把 Source 端、Sink 端、线缆和检测逻辑串在一起了。你按图从左往右看,就能清楚电阻怎么配、电压怎么判、角色怎么定。

CC 通道检测流程 Source 端控制器 Rp 上拉电阻 电压比较器 CC 线 CC1 / CC2 Rd 下拉电阻 (5.1k) Sink 端设备 Ra (1k) 线缆识别 角色决策:Source / Sink
核心结论:整个角色识别全靠电阻分压这一个物理动作。没有复杂的协议,没有多字节握手。这就是 Type-C 电源角色切换最巧妙的地方——用一层物理层解决了直连场景下的角色判断。

避坑指南——我曾经踩过的雷

注意!CC 引脚不能直接短接到 GND 或 VBUS!我曾经在测试治具上把 CC1 不小心碰到 GND,Source 端判断成了“有设备插入”并且认为电流能力为 0(因为电压接近 0V),结果 VBUS 直接关闭,整个系统掉电。修复方法:每个 CC 引脚串一个 1 kΩ 的保护电阻。

另一个常见问题是双 CC 线的设计。有些工程师觉得既然正反插只会用一根 CC,就把两根 CC 直接并在一起接到芯片。这样做会怎么样?正插时两边的 CC 都连到同一网络,反插时也会,但一旦线缆内部有 E-Mark 芯片同时驱动 Ra,会形成两个下拉并联,电压就测不准了。个人建议:两路 CC 分别独立进入控制器的两个 ADC 通道,由芯片根据检测到的电压高低自动选择有效的那一路。

实操测量参考

拿万用表测 CC 对 GND 电压,可以初步判断连接状态:

  • 空载:0 V(两边都没连)
  • Sink 插入:约 0.4 V ~ 1.6 V(取决于 Rp 和 Rd 分压)
  • Source 插入:若对面是 DRP,电压会周期性跳变

我习惯在硬件联调时先测这个电压,手机电脑插上去看是否稳定在 0.85 V 以上,基本就能判断芯片的 CC 检测逻辑有没有正常工作。