配置通道(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 表。
当 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 检测流程
下面这张 SVG 图把 Source 端、Sink 端、线缆和检测逻辑串在一起了。你按图从左往右看,就能清楚电阻怎么配、电压怎么判、角色怎么定。
避坑指南——我曾经踩过的雷
另一个常见问题是双 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 检测逻辑有没有正常工作。