简介:这份PDF资料围绕TYPE-C接口中的CC(Configuration Channel)功能展开,面向硬件工程师、嵌入式开发者及USB接口设计初学者,帮助读者系统理解正反插识别、接口配置与PD供电协商等核心机制。全文以CC1/CC2为主线,依次讲解DFP与UFP连接时的上拉电阻Rp与下拉电阻Rd检测原理、MUX数据通道切换、Ra/Rd阻值对应的设备类型判断,以及PD2.0/PD3.0/PD3.1的功率等级与PPS微调能力,并延伸至Vconn为Emarker线缆芯片供电的检测流程和DisplayPort Alt Mode的两种通道模式与激活过程,配有大量电路示意图辅助理解。资源包仅含1个PDF文件,大小约878KB,篇幅精炼、图文对照,适合作为接口调试与方案选型时的速查手册。目前已有6721人学习,可帮助读者快速建立CC逻辑的完整认知框架,理清供电与数据切换的排错思路。
1. 从一根线说起:TYPE-C CC 功能到底在管什么
很多人第一次画 TYPE-C 电路,栽的跟头不是 USB3.0 差分对走线,而是两个不起眼的引脚——CC1 和 CC2。板子打回来,插上线没反应,VBUS 死活不出电,示波器一量 CC 电平纹丝不动,最后发现是 Rd 贴成了 10K。这类血泪经验在硬件圈反复上演,根子在于没把 CC 当成一个独立的“协商通道”来理解。TYPE-C CC 功能本质上是一套跑在配置通道上的状态机与协议栈:它负责插入检测与正反插识别、DFP/UFP 角色判定、Rp/Rd/Ra 电阻编码的电流能力广播、PD 协议在 CC 上的 BMC 通信、VCONN 给 Emarker 线缆供电,以及通过 VDM 协商进入 DP Alt Mode 这类替代模式。这份资料把上述五块功能串成了一条线,配了 DFP 与 UFP 连接示意、MUX 切换、VL160 框图、Rp 三档电流表、Emarker 线缆结构、DP 两种 Lane 分配等图,适合做接口电路、扩展坞、显示器主控、充电器固件的工程师当作案头速查。它不教你写 PD 协议栈,但能让你在选型、画原理图、定位“插上没反应”时少走弯路。
2. 插入检测与正反插:Rp/Rd 分压和 MUX 切换怎么落地
2.1 电阻网络是整套逻辑的地基
TYPE-C 的插入检测不靠机械开关,靠电阻分压。DFP 端 CC1、CC2 各挂一个上拉 Rp 到 VBUS 或 3.3V,UFP 端各挂一个下拉 Rd 到 GND。未连接时 DFP 的 CC 被 Rp 拉高;插入后 UFP 的 Rd 与 Rp 形成分压,DFP 的 CC 逻辑控制器读到电压跌落,判定“有设备接入”,随后打开 VBUS 上的 MOSFET 给对端供电。这里的关键参数是 Rd 取 5.1K,Ra 取 0.8–1.2K,Rp 则按电流档位取值。原料里给了三档:默认 USB 档(USB2.0 500mA / USB3.0 900mA)、5V@1.5A、5V@3A。实际选型时,Rp 的阻值直接决定 DFP 向 UFP“广播”自己能给多少电,UFP 侧读到的电压落在哪个区间,就按对应档位取电,这是不需要 PD 协议就能工作的“静态协商”。
正反插识别也在这两个脚上完成。线缆不扭转时,DFP 的 CC1 对接 UFP 的 CC1;扭转时 DFP 的 CC1 对接 UFP 的 CC2。控制器比较两路 CC 谁被拉低,就知道插头方向,进而控制 MUX 把 TX/RX 差分对做交叉或直通。原料里用 VL160 这类支持 USB3.1 的 MUX 举例,实际项目里常见的做法是:CC 控制器输出一个 SEL/ORIENT 信号给 MUX 的切换脚,MUX 同时处理 SuperSpeed 差分对和 SBU 的走向。下面这段伪代码是我在调试时常用的判定逻辑,写成 Python 只为把状态迁移讲清楚,真实固件里是中断加状态机:
# CC 方向与连接状态判定(逻辑示意,非量产代码) RD = 5.1e3 # UFP 下拉,单位欧姆 RP_DEFAULT = 56e3 # 默认 USB 档 Rp RP_1A5 = 22e3 # 5V@1.5A 档 RP_3A = 10e3 # 5V@3A 档 VCC = 3.3 # 上拉参考电压 def read_cc_voltage(adc_mv): return adc_mv / 1000.0 def detect_orientation(cc1_v, cc2_v): # 被拉低的那一路说明对端 Rd 接在这一路 if cc1_v < cc2_v - 0.1: return "CC1_ATTACHED", "NORMAL" # 不扭转 elif cc2_v < cc1_v - 0.1: return "CC2_ATTACHED", "FLIPPED" # 扭转,MUX 需交叉 return "NOT_ATTACHED", None def advertised_current(rp): # DFP 侧根据自己贴的 Rp 反推广播档位 if abs(rp - RP_3A) < 1e3: return "5V@3A" if abs(rp - RP_1A5) < 1e3: return "5V@1.5A" return "USB_DEFAULT"逻辑说明:detect_orientation比较两路 CC 电压差,差值超过 100mV 才认为有效,避免 ADC 噪声误判;advertised_current是 DFP 自检,用来确认原理图上贴的 Rp 与固件里配置的电流档一致。参数上要注意,Rd 的精度直接影响分压落点,5.1K 建议用 1% 精度;Rp 三档之间的电压窗口并不宽,ADC 采样要在 VBUS 开启前完成,否则大电流负载会把 CC 电平带偏。很多“插上能充电但数据不通”的板子,问题就出在方向判定对了、MUX 的 SEL 极性却接反了,示波器看 TX 有波形、RX 没眼图,翻原理图才发现 MUX 的 ORIENT 脚该拉高时被拉低。
2.2 从原理图到上电验证的步骤
落地时我一般按这个顺序走,每一步都有可观测的判据,避免一次改一堆变量。第一步,断开 VBUS 的 MOSFET,只给 CC 控制器上电,用万用表量 DFP 侧 CC1、CC2 对地电压,未插线应接近上拉电压,插线后应跌到分压值。第二步,插不同方向的线,确认两路 CC 交替被拉低,方向信号翻转。第三步,恢复 VBUS 通路,量 UFP 侧 VBUS 是否在插入后 100ms 内建立。第四步,接 USB3.0 设备跑吞吐,确认 MUX 切换后 SuperSpeed 链路训练成功。这套流程能覆盖原料里图 1 到图 3 描述的全部行为,VL160 这类 MUX 的使能、方向、通道选择脚在数据手册里都有真值表,照着真值表逐脚核对比盲猜快得多。
提示:CC 走线要远离 VBUS 大电流路径和差分对,分压节点上不要挂大电容,否则插入检测的边沿会被拖慢,PD 通信的 BMC 信号也会被削顶。
3. 角色配置、PD 供电与 VCONN:从 5V 到 240W 的协商链
3.1 DFP/UFP/DRP 与 Ra 的识别逻辑
角色判定是 CC 的第二层功能。DFP 是主机侧,CC 上挂 Rp;UFP 是设备侧,挂 Rd;DRP 是双角色,两个脚能在 Rp 和 Rd 之间动态切换,相当于 OTG。原料里特别提到 Ra=0.8–1.2K,这是给“纯供电设备”或带 Emarker 的线缆用的标识电阻。DFP 读到 CC 上是 Rd,判定普通 UFP;读到 Ra,判定对端是音频配件或需要 VCONN 的线缆。这里有个容易翻车的点:Ra 和 Rd 的分压落点不同,控制器要能区分“Rd 被拉低”和“Ra 被拉低”,固件里的阈值表必须按实际 Rp 值重新算,不能照抄参考设计。我见过一个扩展坞项目,DFP 把 Ra 误判成 UFP,结果 VCONN 没供出去,Emarker 线缆上电失败,4K 显示器点不亮,查了两天才定位到阈值表少了一档。
PD 协商则完全跑在 CC 上,用 BMC 编码。不支持 PD 的设备走静态 Rp 档位,支持 PD 的设备在 CC 上收发 Source_Capabilities、Request、Accept 等消息,电压电流可以细调。原料给的边界很清楚:PD2.0/3.0 最大 20V@5A 共 100W,PD3.1 最大 48V@5A 共 240W 并向下兼容;PD3.0 的 PPS 支持电压 20mV、电流 50mA 步进。做固件时这几个数字要落到消息对象里:PPS 的 APDO 里电压和电流都是 16 位定点,步进单位写错,请求出去的电压就会差出几百毫伏,负载端直接保护。
3.2 VCONN 与 Emarker 线缆的供电切换
带 Emarker 芯片的线缆是高速场景的刚需,它告诉供电端这根线支持多大电流、什么数据速率、线缆 ID。VCONN 的供电路径是:DFP 检测到某一脚 CC 上是 Ra,就把另一脚 CC 切成 VCONN 输出给 Emarker 芯片供电,被供电的那脚同时承载 PD 通信。原料里强调 Emarker 线缆两头对称、可任意接 VCONN source,且 PD 协议允许 VCONN_SWAP 变更供电方。实际调试时,VCONN 的限流和软启动要配好,Emarker 芯片上电瞬间有浪涌,限流点设太低会反复重启,表现为线缆时识别时不识别。下面是一段配置 VCONN 路径的寄存器操作示意,语言用 bash 只是占位,真实项目里是 I2C 写控制器寄存器:
# VCONN 供电路径配置(寄存器示意,地址与位域按实际控制器替换) i2cset -y 1 0x40 0x12 0x01 # 使能 CC2 作为 VCONN 输出 i2cset -y 1 0x40 0x13 0x28 # VCONN 限流点设为约 280mA i2cset -y 1 0x40 0x14 0x03 # 软启动斜率选中间档,抑制浪涌 i2cset -y 1 0x40 0x10 0x80 # 启动 CC 状态机,进入 Attached.SRC逻辑说明:第一行把 VCONN 开关打到 CC2,前提是方向判定确认 Ra 在 CC1 上;第二行限流点要高于 Emarker 芯片工作电流又低于线缆额定,常见做法是留 1.5 倍余量;第三行软启动避免上电冲击触发过流保护;第四行启动状态机后,控制器会自动完成 Ra 检测到 VCONN 输出的时序。参数上,VCONN 标称 5V,实际允许范围在规范里有窗口,量测时以控制器输出脚为准,不要拿万用表直接戳 CC 脚,表笔电容会干扰 BMC 通信。
3.3 DP Alt Mode 的进入条件与 Lane 分配
替代模式是 CC 功能里最“上层”的一块。DP Alt Mode 的触发不靠 CC 电平,靠 PD 的 VDM:DFP 发 Discover Identity,读到对端 SVID 里含 DisplayPort,再发 Configure 进入替代模式,随后切换 MUX 把 SuperSpeed 差分对改作 DP Lane,AUX 走 SBU1/SBU2。原料给了两种分配:USB3.0+2-Lane DP,HBR2 源支持 4K@30Hz、HBR3 源支持 4K@60Hz;以及 4-Lane DP,跑完整 DP 协议。选哪种不是拍脑袋,要看产品定位:扩展坞要同时保 USB3.0 数据和视频,选 2-Lane;纯视频转接线追求带宽,选 4-Lane,但此时 USB3.0 数据通道被占用,只剩 USB2.0。这个取舍在原理图阶段就要定死,MUX 型号和 Lane 走线都跟着变,后期改板代价很大。
注意:进入 Alt Mode 前必须完成 PD 协商,CC 上的 BMC 通信质量直接决定 VDM 能否走通。CC 走线过长、分压节点滤波电容过大,都会让 VDM 超时,表现为“能充电、能跑 USB、就是不出视频”。
4. 避坑与排查:CC 电路最常见的五类翻车
4.1 插上没反应,VBUS 不出电
现象:线插上去,UFP 侧量不到 5V,DFP 侧 CC 电压也不跌。原因通常是 Rd 贴错值或漏贴,分压没形成,控制器认为没插入;也可能是 Rp 上拉到了错误的电源域,控制器上电时序里 CC 参考电压还没建立就采样。解决:先量 Rd 实际阻值,确认 5.1K 且精度 1%;再查 Rp 上拉源与控制器供电是否同域;最后看固件里插入检测的消抖时间,设太短会把上电毛刺当插入。
4.2 能充电但正反插只有一个方向通数据
现象:A 面插上跑 USB3.0 正常,翻面插只能 USB2.0 甚至不识别。原因基本是 MUX 的方向切换信号极性接反,或者 CC1/CC2 到控制器的两路走线在 PCB 上被交换,方向判定整体镜像。解决:对照 MUX 真值表逐脚量 SEL/ORIENT 电平,两个方向各测一次;再核对 CC 两路是否在连接器到控制器之间被交叉,交叉了就在固件里做映射修正,别改板。
4.3 PD 协商失败,只能跑 5V 默认档
现象:接 PD 充电器,电压停在 5V,抓 CC 波形看不到 BMC 消息或消息被 NAK。原因常见于 CC 分压节点挂了 100nF 以上电容,BMC 边沿被削;或者 CC 走线与 VBUS 并行过长,耦合噪声导致 CRC 错。解决:去掉 CC 节点上的多余电容,只保留控制器要求的极小容值;CC 走线包地并远离 VBUS;用协议分析仪抓 CC,看是 GoodCRC 没回还是 Source_Capabilities 没发出来,定位在物理层还是协议层。
4.4 Emarker 线缆时识别时不识别
现象:同一根线,插拔几次才有一次能跑满速或满功率。原因是 VCONN 限流点设太低,Emarker 芯片上电浪涌触发保护后反复重启;或者 VCONN 软启动太快,冲击电流被线缆侧电容放大。解决:把限流点按 Emarker 芯片 datasheet 的工作电流留 1.5 倍余量,软启动斜率调缓;量 VCONN 输出脚上电波形,看是否有明显跌落再恢复的振荡。
4.5 DP Alt Mode 协商成功但黑屏
现象:协议分析仪显示 Enter Mode 成功,MUX 也切了,显示器就是没信号。原因多在 Lane 极性:DP 的 Lane0/1 在 TYPE-C 连接器上映射到不同差分对,正反插时极性可能翻转,MUX 只切了通道没切极性,或者 AUX 的 SBU1/SBU2 接反。解决:查 MUX 是否支持 Lane 极性反转,不支持就在 PCB 上做可选的交叉焊盘;用 DP 协议分析仪看链路训练卡在哪一步,AUX 不通优先查 SBU 走线和上拉。
5. 用协议分析仪把 CC 状态机“看穿”:一套可复用的验证手法
CC 这块最怕“猜”,因为它是数字状态机和模拟分压的混合体,万用表只能看静态,示波器看 BMC 又太吃力。我后来固定下来的做法是:手边常备一台能解 PD 的协议分析仪,串在 DFP 和 UFP 之间,把 CC 上的消息逐条打出来,再配合一个可编程负载做电流拉偏。具体验证顺序是,先空载插线,看分析仪是否解出 Source_Capabilities 和 Request/Accept,确认 PD 链路通;再逐步加负载到广播档位的 80%,看电压跌落是否在允许窗口内,这一步能抓出 Rp 档位与固件广播不一致的问题;最后换不同厂商的 Emarker 线缆各插十次,统计 VCONN 识别成功率,低于九成就要回头查限流和软启动。这套手法比反复改固件盲试快得多,一次能定位到是物理层分压、BMC 通信还是协议层对象填错。
进阶一点,可以把 CC 控制器的状态机日志打开,对照规范里的 Attached.SRC、Attached.SNK、Try.SRC 等状态迁移,看每次插拔落在哪个状态、超时退到哪。原料里图 10 的 Alt Mode 激活流程,用分析仪抓一遍 VDM 的 Discover Identity 到 Configure,比看十遍框图都直观。参数上要盯住两个时间:插入到 VBUS 建立的延迟,以及 VDM 往返的超时窗口,前者影响用户体验,后者决定 Alt Mode 能不能进。下面这张表是我验证时记录的判据,按项目实际规范微调后可直接用:
| 验证项 | 观测点 | 合格判据 | 常见失败原因 |
|---|---|---|---|
| 插入检测 | DFP 侧 CC 电压 | 插线后跌落至分压窗口 | Rd 错值、消抖过短 |
| 方向识别 | MUX SEL 电平 | 两方向交替翻转 | 极性接反、CC 走线交叉 |
| VBUS 建立 | UFP 侧 VBUS | 插入后 100ms 内到位 | MOSFET 驱动时序 |
| PD 协商 | CC 上 BMC 消息 | 有 GoodCRC 与 Accept | 节点电容过大、噪声 |
| VCONN | VCONN 输出脚 | 上电无反复跌落 | 限流过低、软启动过快 |
| Alt Mode | VDM 交互 | Enter Mode 后链路训练通过 | Lane 极性、SBU 接反 |
从那以后我每次画 TYPE-C 原理图,都会先把 Rp/Rd/Ra 三个阻值和对应档位在图上标死,再让固件同事按同一张表配阈值,插拔验证至少跑正反两个方向和三种线缆。CC 这部分的后悔药很少,前期把分压和状态机对齐,后期能省掉大量“玄学”排查。希望帮到你。
本文还有配套的精品资源,点击获取