☰
Type-C CC引脚与PD协议解析:从物理层到实战排错
2026/10/6 1:28:40 网站建设 项目流程

第一次把Type-C口当成“智能接口”而不是“能正反插的USB口”,是在一次调PD诱骗器抓波形的时候。当时充电器已经协商出20V,但示波器上CC引脚除了一个直流电平,什么异常都没有,直到逻辑分析仪解码出BMC波形,才真正感觉到:这根细细的CC线上承载着的,是整条Type-C链路的“语言中枢”。

这也是我想写这篇解析的原因。网上讲Type-C引脚定义的文章一抓一把,但绝大多数都停留在“CC接5.1k下拉”“PD用来快充”这种层面。真正动手做过方向检测、画过CC外围电路、抓过PD协商波形的工程师都清楚,这里面藏着大量细节:为什么是5.1kΩ而不是4.7kΩ?为什么DFP侧要用电流源而不是普通上拉电阻?PD消息在CC线上到底是怎么编码的?E-Marker线缆为什么用Ra而不是直接读芯片?SBU1/SBU2平时不用,用起来又是什么场景?这些问题如果只靠查手册,翻半天也未必能串成一条完整的逻辑链。

这篇不打算做手册翻译,而是把我实际设计和调试中梳理清楚的东西,按“从物理层到协议层再到实战排错”的顺序完整讲一遍。适合刚接手Type-C项目的硬件工程师、做嵌入式固件想理解PD状态机的朋友,以及被CC引脚各种奇怪电阻搞晕却想真正吃透的人。

1. 一颗引脚改变接口生态:CC和SBU在Type-C物理层里的位置

1.1 旧接口的“盲插”困境与Type-C的电气识别

USB-A时代我们默认了一件事:插头就是分正反的。不是因为多此一举,而是在USB 2.0时代,只有VBUS、D+、D-、GND四根线,如果做成可翻转,USB主机根本不知道数据线该按哪个方向解释——物理连接本身无法表达“我旋转了180度”。Type-C最聪明的地方,不是把接口做小了,而是在接口定义里引入了一个专门用于身份识别的引脚组:CC和SBU。

CC全称Channel Configuration,它的任务是在电气层面完成“你是谁、你插在哪边、你能给多少电”的握手。SBU全称Sideband Use,任务是承载各种Alternate Mode(备用模式)下的边带信号。没有这两类引脚,Type-C就算长得再对称,也无法完成方向检测、供电协商、协议切换这些高级操作。

换个生活化的类比:以前USB-A是“按形状对号入座”,Type-C则是“无论你怎么插,接口自己在通电瞬间数一遍座位号”。这个“数座位号”的动作,就是靠CC引脚上的电压值完成的。

1.2 母座与公头的引脚格局差异

看Type-C母座的引脚排列,总共24个引脚,分为A、B两排,每排12个。CC1在A5,CC2在B5,SBU1在A8,SBU2在B8。注意,CC1和CC2是对称分布在不同侧的,这正是为了配合正反插。

公头(插头端)就不一样了。Type-C公头里只有一颗CC引脚,另外一颗是VCONN。再说直白点,插头旋转180度后,这唯一的CC引脚要么对上母座的CC1,要么对上母座的CC2。母座上的两颗CC,就是用来区分这个方向的。

VBUS和GND在母座上有4颗引脚(A4/A9和B4/B9),一开始很多人不理解,后来发现是为了分担大电流。Type-C单口最高5A,如果只靠一对引脚,接触电阻和温升都会出问题,4颗并联比较稳。

下面这张表建议收藏,画原理图时反复对照:

引脚组母座引脚号功能设计注意点
VBUSA4, A9, B4, B9主电源正极多芯并联承载大电流
GNDA1, A12, B1, B12主电源地同上
CC1A5方向检测/PD通信必须接Rd或Rp,不可悬空
CC2B5方向检测/PD通信与CC1电气规格一致
SBU1A8备用模式边带信号默认悬空,Alt Mode时启用
SBU2B8备用模式边带信号同上
D+A6, B6USB 2.0数据正与USB 2.0 PHY相连
D-A7, B7USB 2.0数据负同上
TX1/RX1/TX2/RX2A2/A3/B2/B3等高速差分信号用于USB 3.x/DP/Thunderbolt

1.3 CC引脚的“双份设计”解决的是什么

很多初学硬件的人会问:方向检测只需要一边有信号,为什么母座要放两颗CC?因为公头只有一个CC,而正反插后那颗CC可能落在不同位置。母座放两颗CC,并在检测时判断“哪一颗检测到了对面设备的下拉电阻”,就能同时得到两个信息:设备已连接、插头朝向。

另一个原因是PD通信的物理通道。PD协议的数据就是跑在CC线上,如果母座只有一颗CC,无论正反插都只复用同一路,但这样就没法区分VCONN。VCONN是一个专门给线缆芯片供电的引脚,标准Type-C线缆里的E-Marker芯片靠它供电。如果只有一颗CC,VCONN就没地方放,线缆能力也无法识别。

从这个角度看,CC1/CC2从来不是冗余设计,它们分别承担了“检测通道”和“供电通道”的职责,而且这个分配是动态的——根据插入方向,物理上互换。

2. CC引脚的静态语言:Rd、Rp、Ra如何完成方向识别与供电能力广播

2.1 三类电阻,三种身份

Type-C在CC引脚上定义了三种“身份电阻”,理解它们是读懂CC引脚一切行为的钥匙:

  • Rd(Device下拉):阻值5.1kΩ,接到地。设备端(UFP)使用。
  • Rp(Host/Source上拉):可以是一个上拉电阻,也可以是一个恒流源。主机端或供电端(DFP)使用。
  • Ra(线缆下拉):阻值1kΩ,接VCONN或地。电子标记线缆(E-Marker Cable)使用。

为什么是5.1kΩ而不是常见的4.7kΩ?5.1kΩ属于E24系列标准阻值,精度通常选1%,但规格书允许20%误差。选这个值是为了在DFP的检测阈值区间内留出余量——阻值太小,压降太低,会误判成线缆存在;阻值太大,压降太高,又可能超过检测窗口。

2.2 一次完整的插入检测:方向是怎么“算”出来的

想象DFP的CC引脚上挂了一个80μA左右的恒流源,UFP的CC引脚接了一个5.1kΩ下拉到地。插头插入的瞬间,电流流过Rd,DFP侧的CC引脚上就会产生一个电压:

V = 80μA × 5.1kΩ ≈ 0.408V

DFP内部的比较器会持续监测CC1和CC2的电压。如果CC1的电压落在0.25V到0.61V这个区间,说明CC1这一侧连接了UFP设备——也就是插头正插;如果CC2也同时满足该条件,或者CC2单独满足,则判断为反插。UFP侧也一样,它通过检测自己CC引脚被拉高的状态,确定自己“见到”了一个DFP。

而如果CC引脚检测到的电压极低,只有0.05V到0.2V左右,说明对端是1kΩ的Ra——那是一款带E-Marker的线缆,此时DFP并不能直接把它当设备应付,而是需要进一步启动VCONN,给线缆芯片供电,再读取线缆信息。

之前调一个样品时,UFP端用的Rd电阻精度不够,标称5.1kΩ实测到了5.8kΩ,配合DFP的电流源,CC电压飘到了0.44V以上。虽然还在标准区间内没翻车,但已经比较接近阈值边界了。所以这里有个硬性建议:Rd、Ra、Rp的电阻精度至少选1%,别为省几分钱给生产留隐患。

2.3 电流源的三档广播:80μA、180μA、330μA

Type-C规范里规定,DFP要广播自己的供电能力。广播方式很巧妙:不靠额外信号线,而是直接改变Rp电流源的电流大小。

  • 80μA:只能提供默认USB电流,对应USB 2.0的500mA或USB 3.x的900mA。
  • 180μA:可以“承诺”提供1.5A。
  • 330μA:可以“承诺”提供3A。

UFP设备通过测量自己CC引脚上的电压来判断DFP属于哪一档。因为Rd固定5.1kΩ,电压其实可以算出来:80μA对应0.4V左右,180μA对应0.9V附近,330μA对应1.7V附近。UFP内部识别这些电压区间后,就知道自己“安全可用的电流”是多少。

这个机制很巧妙,它把“供电能力”这种抽象信息,转化成物理层上一个可测的模拟量。PD协议出现之前的Type-C供电能力,基本全靠它来表达。即使没有PD芯片,靠这3档电流也能完成低功率设备的基本供电协商。

2.4 别图省事把CC1和CC2短接

画图省线的新手经常干一件事:既然正反插最后都是同一颗CC工作,那把CC1和CC2直接短接不就行了?短期看能跑,长期看是颗雷。

如果CC1和CC2短接,DFP就永远无法区分两颗CC引脚上的电压差异,方向检测直接失效。更麻烦的是,VCONN的分配是在“识别出方向”之后才能确定的,短接后VCONN没法正确送电,带E-Marker的线缆芯片就无法工作,协议层会卡死在SOP'通信上。

我在一个早期开发板上见过这种设计,当时Type-C充电能亮,但插上某些带芯片的线缆后完全没反应,查了半天才发现CC1/CC2在母座底部被“好心”地连在了一起。所以这条建议优先记住:CC1和CC2必须保持电气独立。

3. PD协议在CC线上的动态博弈:BMC编码、PDO与电压协商

3.1 为什么有了档位广播还不够,还需要PD

80/180/330μA三档电流只能表达“我能给多少电流”,但表达不了“我能给多少电压”。5V、9V、12V、15V、20V这种多电压输出,靠模拟电平根本无法穷举。PD协议就是在这个背景下出现的:它直接使用CC作为通信线,让DFP和UFP通过报文交换协商出电压、电流、甚至角色关系。

可以说,Type-C的“硬件物理层”负责身份识别,“PD协议层”负责业务协商。两者配合,才让一个口能同时完成充电、数据传输、视频输出、甚至动态电压调节。

PD协议跑在CC线上,采用半双工模式,同一时刻只有一个方向在发送。它跟I2C、UART不太一样,物理层的编码方式是BMC。

3.2 BMC编码:CC线上的“莫尔斯电码”

BMC全称Bi-Phase Mark Coding,双相标记编码。它的特点是每个数据位的周期内,电平至少翻转一次。数据0在时钟周期中间多翻转一次,数据1只在周期边界翻转。

这样说有点抽象,实际用逻辑分析仪抓波形时会看到:CC线上平时是一个直流电平(比如0.4V),一旦出现PD消息,会在直流电平上叠加一系列脉宽基本一致的脉冲串,脉冲串的翻转频率大约在600kHz附近(数据比特率300kbps,每位至少一次翻转,所以脉冲频率约为比特率的2倍)。

PD的物理层对CC线的交流信号做了规定,接收端通过检测脉冲边沿来恢复时钟和数据。这就是为什么CC线上的寄生电容不能太大——电容会把脉冲边沿磨圆,导致接收端采样出错,CRC校验失败。

记得我第一次抓CC线上的PD消息,用的是普通逻辑分析仪,一根探头夹在CC引脚上,地线夹到模块GND。抓出来的波形边沿肉眼可见地变缓,解码成功率很低。后来把探头换成短地线弹簧或者加了有源探头,CRC错误明显减少。信号完整性这事,在CC线上体现得格外真实。

3.3 一次完整的20V协商:四步状态机

PD协议的协商不是各家快充那种私有“秘语”,它有统一的报文结构。DFP上电后会周期性发送Source_Capabilities消息,里面罗列它支持的PDO(Power Data Object,功率数据对象)列表。

以一款65W氮化镓充电器为例,逻辑分析仪解码出的PDO可能长这样:

PDO序号电压电流最大功率
PDO15V3A15W
PDO29V3A27W
PDO315V3A45W
PDO420V3.25A65W

UFP收到这份菜单后,会根据自己的需求选择其中一个,回发一条Request消息,也就是RDO(Request Data Object),里面包含选中的PDO编号以及申请的具体电流。DFP收到合理请求后,回复Accept表示同意,随后切换电压输出到目标值,稳定后发送PS_RDY,告诉UFP“电已经到位,可以开始大电流用电”。

实际用PD诱骗器拉20V时,整个过程大概几十毫秒内完成。状态跳转顺序极清晰:

  1. DFP发送Source_Capabilities,携带PDO列表。
  2. UFP发送Request,选中20V/3.25A档。
  3. DFP回Accept。
  4. DFP调整输出电压,稳定后发PS_RDY。

如果UFP申请了一个PDO列表里不存在的电压,DFP会回Reject或Wait,协商失败后电压维持5V默认档。了解这个状态机,对排查“插上不充电”“诱骗20V不成功”特别有用。

3.4 比“快充协议”更多的东西:SOP、VDM与角色交换

PD协议里的报文是分“SOP”的。端口与端口之间的通信叫SOP,DFP跟线缆芯片之间的通信叫SOP',线缆芯片再往远端设备通信叫SOP''。E-Marker读取用的就是SOP'。

PD3.0之后又把电源协商从固定的PDO阶梯进化出PPS(可编程电源),UFP可以像调压器一样在3.3V-21V之间按20mV步进申请电压,这对直充手机电池很有用。PD3.1进一步引入了EPR(扩展功率范围),电压最高到48V、功率240W,这背后的AVS(可调电压源)允许更细粒度调压。

VDM(Vendor Defined Message)也很重要,它就像一个“扩展接口”,用来协商DisplayPort Alt Mode、Thunderbolt等非电力功能。DP Alt Mode会话的启动,本质就是双方先完成PD连接,然后DFP发送VDM,询问UFP是否支持DP功能,如果双方确认,再切换到备用模式。

需要的消息流(抓包视角): Source_Capabilities <- Request [20V/3.25A] -> Accept -> PS_RDY -> VDM Discover SVID <- VDM Responder ACK [DisplayPort] -> VDM Enter Mode [DP] -> VDM DP Status Update

4. 硬件设计实战:CC外围电路、E-Marker线缆与SBU引脚处理

4.1 设计一个带PD能力的UFP设备端CC电路

做支持PD的Sink设备时,CC电路通常包含两个部分:静态的身份电阻(Rd)和动态的BMC收发器。Rd是5.1kΩ下拉,负责静态检测;BMC收发器通常由PD控制芯片(如FUSB302、STUSB4500、TPS25750)内部集成,它一边接CC线,一边接MCU或协议引擎。

画原理图时有几个刚性要求:

  • RD电阻必须接在UFP的CC引脚与地之间,精度1%。
  • BMC收发器的CC引脚到Type-C母座的走线尽量短,避免额外寄生电容。
  • CC引脚上必须加ESD/TVS保护,但TVS的结电容要小,最好低于5pF,太大会直接破坏BMC波形。
  • 如果只是做“无PD的纯充电设备”,不接PD芯片也可以,但Rd仍然必须接,否则DFP侧检测不到有效下拉,不会往外送电。

如果设计的是DFP/充电器侧,CC引脚需要接Rp。多数PD控制器(比如IP2721、SW3518等)内部可配置电流源或上拉,硬件上只需要保证CC走线和反馈电阻正确。

4.2 E-Marker线缆:为什么用“Ra检测”而不是“读芯片”

E-Marker线缆内置了一颗芯片,记录线缆的电流能力、数据传输速率等参数。但DFP怎么知道这根线缆里有没有芯片?答案是:靠CC引脚上检测到的电阻值。

普通无芯片线缆:CC引脚通过Ra(1kΩ)下拉。 有芯片线缆:插头的CC引脚同样接Ra,但芯片需要供电后才能工作,这个供电就是VCONN。

DFP检测到CC引脚上呈现Ra特征后,先给VCONN引脚送上5V,给线缆芯片上电,然后通过SOP'报文读取芯片里的信息。这就是为什么检测Ra是整个E-Marker流程的入口。

实战中有一个容易踩的坑:如果线缆的公头接地设计不当,或者Ra电阻被设计成直接接地而不是连到VCONN相关网络,DFP可能把线缆误判成无芯片线缆,从而限制电流。设计线缆端电路时,Ra和VCONN的关系一定要理清。

4.3 热搜常客:SBU1/SBU2引脚到底怎么用

“Type-C cable中sbu1 sbu2引脚功能”这个搜索词出现频率一直不低,原因很简单——多数通用电路里根本不用SBU,但特定模式下它又是关键信号。

SBU是Sideband Use,直译“带外使用”。意思是它不属于标准数据或电源通道,专门留给各种备用模式当侧信道用。最常见的两个场景:

  • DisplayPort Alt Mode:SBU1和SBU2被映射为DP的AUX+/AUX-,用于DPCD寄存器读写和热插拔检测。做C转DP线缆或支持DP输出的设备时,SBU必须连接到DP芯片的AUX接口,不能悬空。
  • 音频适配器附件模式(Audio Adapter Accessory Mode):Type-C母座通过一个模拟音频适配器接入3.5mm耳机时,SBU引脚会被用来承载麦克风信号和附件检测信号。

除此之外,Thunderbolt等高速模式也会定义SBU的用途。普通USB 2.0/3.2数据线里SBU完全不接,甚至母座端的SBU引脚直接悬空也不会影响充电和标准数据传输。所以看到原理图上SBU空着不用,不要慌,这是正常的。只有需要支持DP或音频附件时,才需要把SBU接出来到对应功能模块。

4.4 设计上容易忽视的VCONN与过压保护

VCONN不是“可选项”。只要设计DFP口,并且希望支持E-Marker线缆,VCONN就必须能送电。VCONN电压一般在5V左右,但供电能力很小,主要用于线缆芯片。

另外,CC引脚和VCONN引脚都经由母座暴露在外部环境中,很容易在热插拔瞬间被VBUS的浪涌冲击。规范里虽然CC引脚本身不是电源引脚,但实际使用中经常会因为线缆内部短路或错误插入而出现异常高压。常规做法是在CC引脚上并联TVS管到地,同时利用PD控制芯片自带的过压比较器做二级保护。

5. 实测、排错与兼容性验证:把CC引脚和PD协议从纸面搬到板子上

5.1 用逻辑分析仪抓一次真实的PD握手

调试PD协商,手边最可靠的工具就是逻辑分析仪加解码插件。以sigrok PulseView为例,把采样率设到5MHz以上,探头接CC引脚,地线接板子GND,等充电器挂上负载后触发,就能抓到完整波形。

解出来的消息序列一般长这样:

[GoodCRC] <-- Source_Capabilities [PDO1: 5V/3A, PDO2: 9V/3A, PDO3: 15V/3A, PDO4: 20V/3.25A] [GoodCRC] --> Request [RDO: 20V/3.25A] [GoodCRC] <-- Accept [GoodCRC] <-- PS_RDY

看到Accept和PS_RDY,说明协商链路完整。如果抓包只有Source_Capabilities,后面没有Request,大概率是UFP端协议状态机没跑起来。如果连Source_Capabilities都抓不到,先怀疑CC线的静态电阻配置——DFP根本没把UFP识别出来。

5.2 四个高频踩坑点

  • CC引脚悬空。这是检测不到设备的头号原因。母座CC必须接Rd(UFP)或Rp(DFP),悬空时DFP永远判定“无连接”。
  • Rd阻值错误。前文说过标5.1kΩ实测5.8kΩ的案例,精度不达标会把电压推近阈值边缘。
  • TVS结电容过大。用了常规口香糖TVS,结电容20pF以上,BMC脉冲全被“吃”掉了,表现为PD协商时对时好时坏。换低电容TVS后立即恢复。
  • 没有VCONN或VCONN电压不对。插上E-Marker线缆后DFP读不到线缆信息,往往是VCONN没供上电。

5.3 兼容性矩阵测试

做产品不能只在自己开发板上跑通就交付。建议把测试设备组成一个矩阵:一边是不同品牌的充电器(苹果、联想、氮化镓、老式USB-A转C线缆),一边是不同规格的线缆(无E-Marker USB2.0线、E-Marker USB3.2线、1米/2米长度),再把正反插、动态插拔、负载突变都过一遍。

我最常做的一个兼容性自检流程是这样的:

  1. 用标准PD诱骗器验证所有充电器的PDO列表,记录输出电压情况。
  2. 用示波器长时间监测CC线上的BMC波形,特别留意插入瞬间是否有毛刺或异常电平。
  3. 对所有线缆做CC引脚导通性测试,确认E-Marker线缆能通过SOP'被正确识别。
  4. 在PD协商成功后再热插拔,观察两端是否进入错误恢复流程,能否再次正常协商。

这套流程跑下来,大多数硬件层面的隐患都能暴露。

最后再说一个调参心得。Type-C的CC引脚和PD协议,本质上是一套“物理层身份识别+链路层协商”的组合拳。很多看起来莫名其妙的“插上不充电”“只有5V没有快充”“带芯片线缆不能识别”,往根上挖,无外乎三类原因:Rd/Rp/Ra配置不对导致身份识别失败、CC线寄生参数太差导致BMC物理层误码、PD状态机在报文交互环节出现超时或拒绝。

把这三点吃透,后续不管是做快充、做DP扩展坞,还是做嵌入式Type-C设备,都能少走一大半弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询