第三章 CC逻辑与检测:CC1/CC2工作原理、角色检测与DFP/UFP
好,咱们进入第三章。这一章讲的是Type-C接口的“神经末梢”——CC引脚。说实话,很多工程师做Type-C项目,第一关就卡在这里。CC逻辑搞不清楚,后面的PD协议栈根本跑不起来。
我个人习惯,拿到一个新接口,先看它的“握手”过程。CC引脚就是干这个的。它负责两件事:一是检测有没有设备插进来,二是告诉双方“你是谁,我是谁”。
3.1 CC1/CC2引脚的基本角色
Type-C接口有24个引脚,其中CC1和CC2是最特殊的两个。它们不是单纯的数据线,而是“配置通道”。
你想想看,一根线缆两头都是对称的,怎么区分正反插?怎么知道谁是供电方、谁是受电方?这些信息,全靠CC引脚来传递。
我在项目中遇到过一个问题:客户说他们的设备插上电脑没反应。我量了一下CC引脚电压,发现只有0.2V。嗯,问题找到了——CC引脚根本没拉起来。
CC引脚的核心功能有这几个:
- 连接检测:判断是否有设备插入
- 正反插识别:通过CC1和CC2的电压差异,判断线缆方向
- 角色宣告:告诉对方自己是DFP(下行端口,类似Host)还是UFP(上行端口,类似Device)
- 电流能力广播:DFP通过CC引脚上的电压,告诉UFP自己能提供多大的电流
说白了,CC引脚就是Type-C世界的“自我介绍信”。
3.2 角色检测:DFP与UFP的区分
Type-C规范里定义了两种基本角色:
| 角色 | 全称 | 典型设备 | CC引脚行为 |
|---|---|---|---|
| DFP | Downstream Facing Port | 电脑、充电器、Hub | 在CC引脚上拉电阻Rp到Vbus |
| UFP | Upstream Facing Port | 手机、U盘、外设 | 在CC引脚下拉电阻Rd到GND |
怎么检测的?很简单。DFP会在CC1和CC2上各接一个上拉电阻Rp。UFP则在CC1和CC2上各接一个下拉电阻Rd。
当两个设备连在一起时,DFP的CC引脚通过Rp上拉到Vbus,UFP的CC引脚通过Rd下拉到GND。这时候DFP就能检测到CC引脚上的电压——这个电压值由Rp和Rd的分压决定。
我刚开始做这个的时候,有个误区:以为CC引脚上的电压是固定的。其实不是。Rp的阻值不同,代表DFP能提供的电流能力不同。标准定义了三种Rp:
- 56kΩ:默认USB电流(500mA/900mA)
- 22kΩ:1.5A电流能力
- 10kΩ:3.0A电流能力
UFP通过检测CC引脚上的电压,就能知道DFP能给自己供多少电。这个机制很巧妙,不需要额外的通信。
关键点:DFP的CC引脚电压范围通常在0.25V到1.6V之间(3.3V供电时)。如果电压低于0.2V,说明没接设备。如果电压高于2.0V,可能是有源线缆或者异常情况。
3.3 CC1与CC2的正反插检测
Type-C接口支持正反插,这个功能就是靠CC1和CC2实现的。
你想想看,Type-C接口有24个引脚,但CC1和CC2在物理位置上是对称的。当线缆正插时,CC1连通;反插时,CC2连通。
DFP会在CC1和CC2上都接上拉电阻。但UFP只在一个CC引脚上接下拉电阻——具体是哪个,取决于线缆的方向。
所以DFP检测的时候,会发现其中一个CC引脚电压被拉低了,另一个还是高电平。电压被拉低的那个引脚,就是实际连通的通道。
举个例子:
- 如果CC1电压被拉低到0.4V,CC2电压是3.3V → 正插,使用CC1通道
- 如果CC2电压被拉低到0.4V,CC1电压是3.3V → 反插,使用CC2通道
DFP根据这个信息,自动切换数据线的极性。用户完全感觉不到正反插的区别。
设计小技巧:我建议在硬件设计时,把CC1和CC2的检测电路做成完全对称的。这样不管是正插还是反插,检测逻辑都一样。我曾经见过一个设计,只检测了CC1,结果反插时死活不工作。
3.4 避坑指南:CC引脚设计的常见问题
做CC检测电路,有几个坑我踩过,跟大家分享一下。
第一个坑:Rp和Rd的精度
Rp和Rd的阻值精度很重要。标准要求精度在±5%以内。如果用了±10%的电阻,分压电压可能漂出检测范围。我遇到过一批产品,用了便宜的电阻,结果有些设备能识别,有些不能。排查了两天才发现是电阻精度问题。
第二个坑:ESD保护
CC引脚是直接暴露在外的,很容易受到静电放电影响。我建议在CC引脚上加TVS管,但要注意TVS管的寄生电容不能太大,否则会影响CC信号的上升时间。一般选择电容小于5pF的TVS管。
第三个坑:Vbus的时序
CC检测必须在Vbus稳定之后进行。如果Vbus还没稳定就开始检测CC电压,可能会误判。我习惯在Vbus上电后加一个10ms的延时,再开始CC检测。
警告:千万不要在CC引脚上直接接5V电压!CC引脚的工作电压范围是0V到3.6V(部分芯片支持到5.5V)。如果误接5V,可能会烧坏CC逻辑芯片。我见过一个案例,工程师把CC引脚接到了Vbus上,结果芯片直接冒烟了。
3.5 实际项目中的CC检测流程
好了,理论讲完了,咱们看看实际项目中怎么实现CC检测。
我一般用MCU的ADC来检测CC引脚电压。流程是这样的:
- 上电后,等待Vbus稳定(约10ms)
- 读取CC1和CC2的ADC值
- 判断电压范围:
- 如果两个引脚电压都接近0V → 没有设备插入
- 如果一个引脚电压在0.25V~1.6V之间,另一个接近3.3V → 有设备插入,且电压低的引脚是实际通道
- 如果两个引脚电压都在0.25V~1.6V之间 → 可能是有源线缆或者双角色设备
- 根据电压值判断电流能力:
- 0.25V~0.6V → 默认电流
- 0.6V~1.0V → 1.5A
- 1.0V~1.6V → 3.0A
- 确定角色:如果检测到Rd下拉,本设备就是DFP;如果检测到Rp上拉,本设备就是UFP
这里有个细节:如果设备支持双角色(DRP),它会周期性地在Rp和Rd之间切换。这时候CC检测逻辑要更复杂一些,需要检测多个周期才能确定对方的角色。
嗯,说到DRP,咱们下一章会详细讲。这里先记住一点:DRP设备会交替扮演DFP和UFP,直到双方确定角色。
3.6 小结
CC逻辑是Type-C的基础,也是最容易出问题的地方。我总结几个要点:
- CC引脚负责连接检测、正反插识别、角色宣告和电流能力广播
- DFP用上拉电阻Rp,UFP用下拉电阻Rd
- 通过检测CC引脚电压,可以判断设备类型和电流能力
- CC1和CC2的电压差异用于判断正反插
- 电阻精度、ESD保护、Vbus时序是常见的设计陷阱
下一章咱们讲DRP和Try.Source/Try.Sink模式,那是更高级的角色协商机制。到时候你会看到,CC逻辑其实只是PD协议栈的冰山一角。