第三章 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引脚电压。流程是这样的:

  1. 上电后,等待Vbus稳定(约10ms)
  2. 读取CC1和CC2的ADC值
  3. 判断电压范围:
    • 如果两个引脚电压都接近0V → 没有设备插入
    • 如果一个引脚电压在0.25V~1.6V之间,另一个接近3.3V → 有设备插入,且电压低的引脚是实际通道
    • 如果两个引脚电压都在0.25V~1.6V之间 → 可能是有源线缆或者双角色设备
  4. 根据电压值判断电流能力:
    • 0.25V~0.6V → 默认电流
    • 0.6V~1.0V → 1.5A
    • 1.0V~1.6V → 3.0A
  5. 确定角色:如果检测到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协议栈的冰山一角。