第1章:CC逻辑与角色检测
大家好,欢迎来到Type-C接口的第一课。
说实话,很多工程师刚接触Type-C时,最头疼的就是CC引脚。为什么?因为USB 2.0时代我们只需要D+、D-两根线,最多加个ID引脚做OTG。但Type-C不一样,它引入了CC(Configuration Channel)这个概念,说白了就是一根“谈判线”。
今天我们就来彻底搞懂CC引脚在干什么,Source和Sink是怎么定义的,以及DFP、UFP、DRP这三种角色到底怎么切换。
1.1 CC引脚:不只是检测插拔
CC引脚的全称是Configuration Channel,中文叫配置通道。它有两个物理引脚:CC1和CC2。为什么需要两个?因为Type-C接口是正反可插的,你插进去的时候,CC1和CC2中只有一个会真正连接上。
我在项目中遇到过一个问题:有块板子插上Type-C线后死活不供电。查了半天,发现是CC引脚上的下拉电阻焊错了位置。嗯,这种低级错误其实挺常见的。
CC引脚的核心功能有三个:
- 检测连接:判断有没有设备插进来
- 识别角色:你是供电方(Source)还是用电方(Sink)
- 协商电流:告诉对方我能提供多大电流
你想想看,如果没有CC引脚,两个设备插在一起,谁供电谁用电?全靠猜?那不乱套了。
1.2 Source与Sink:谁给谁供电?
在Type-C的世界里,角色定义非常清晰:
| 角色 | 定义 | 典型设备 |
|---|---|---|
| Source | 提供电源的一方 | 充电器、电脑USB口 |
| Sink | 消耗电源的一方 | 手机、移动硬盘 |
怎么判断自己是Source还是Sink?看CC引脚上的电阻配置:
- Source端:CC引脚上拉一个电阻Rp到Vbus(通常是3.3V或5V)
- Sink端:CC引脚下拉一个电阻Rd到GND
当两个设备插在一起时,Source端的Rp和Sink端的Rd会形成一个分压电路。Source检测到CC引脚上的电压,就知道对面是个Sink。反过来,Sink检测到电压,就知道对面是个Source。
我个人习惯用万用表量一下CC引脚电压来判断角色。Source端的CC电压一般在1.6V左右(5V供电时),Sink端则是0V。这个方法在调试时特别管用。
关键点:Source和Sink不是固定的。同一个设备可以切换角色。比如手机插充电器时是Sink,但插U盘时可能变成Source(OTG模式)。
1.3 DFP、UFP、DRP:三种角色模式
搞清楚了Source和Sink,我们再来看DFP、UFP、DRP。这三个术语其实是对Source/Sink的进一步抽象:
- DFP(Downstream Facing Port):下行端口,相当于Source。典型例子是电脑的USB口。
- UFP(Upstream Facing Port):上行端口,相当于Sink。典型例子是手机、U盘。
- DRP(Dual Role Port):双角色端口,可以动态切换。典型例子是支持OTG的手机。
为什么要有DFP/UFP这种叫法?其实是为了和USB协议统一。在USB 2.0时代,Host和Device的概念深入人心。到了Type-C,DFP就是Host,UFP就是Device。只不过Type-C多了一个DRP,让设备可以灵活切换。
1.4 DRP模式切换:动态角色协商
DRP是Type-C最灵活的地方。一个DRP设备,插上充电器时是Sink,插上U盘时是Source。怎么做到的?
DRP设备会周期性地切换自己的角色:一会儿当Source(拉Rp),一会儿当Sink(拉Rd)。这个切换频率很快,人眼根本感觉不到。当两个DRP设备插在一起时,它们会通过CC引脚上的电压变化来协商谁当Source、谁当Sink。
我曾经调试过一个DRP设备,发现它和某个充电器死活协商不成功。后来用示波器抓CC引脚波形,发现是切换频率太快,充电器反应不过来。把切换周期从50ms改成100ms,问题就解决了。这种坑,你不实际踩一次根本想不到。
小技巧:设计DRP设备时,建议把CC引脚的切换周期设为80-120ms。太短容易导致兼容性问题,太长则影响用户体验。
1.5 电流能力协商:CC引脚的另一项使命
除了检测角色,CC引脚还负责告诉对方我能提供多大电流。Source端通过Rp电阻的值来声明电流能力:
| Rp电阻值 | 声明电流 | 典型应用 |
|---|---|---|
| 56kΩ | 500mA(USB 2.0默认) | 老式充电器 |
| 22kΩ | 1.5A | 普通快充 |
| 10kΩ | 3A | Type-C标准快充 |
Sink端通过检测CC引脚上的电压,就能知道Source能提供多大电流。如果Sink需要更大的电流(比如5A),那就需要通过PD协议进一步协商了。
这里要注意:CC引脚上的电压不是固定的,它取决于Rp和Rd的分压。我见过有人直接用ADC读CC引脚电压来判断电流能力,这个方法可行,但要注意噪声干扰。建议加个RC滤波,采样值会更稳定。
避坑指南:我曾经遇到过一批Type-C线,CC引脚上的电阻标称56kΩ,实际测量只有48kΩ。结果设备误判电流能力,导致充电电流过大,差点烧了保护电路。所以,量产前一定要抽检CC电阻的精度。
1.6 总结一下
好了,这一章的内容就到这里。我们讲了CC引脚的核心功能、Source/Sink的角色定义、DFP/UFP/DRP三种模式,以及电流能力的协商机制。
说白了,Type-C的CC逻辑就是一套“握手协议”。两根线、几个电阻,就能让设备知道对方是谁、能干什么。这种设计思路,我个人觉得非常优雅。
下一章我们会深入PD协议,看看Type-C怎么通过CC引脚实现更复杂的电源协商。到时候你会看到,CC引脚上跑的不仅仅是电压,还有真正的数据通信。
课后思考:如果两个DRP设备都坚持要当Source,会发生什么?提示一下,这和CC引脚上的电压竞争有关。想不明白的话,下一章我们接着聊。