首页 Type-C 接口 CC 针脚的工作模式
文章
取消

Type-C 接口 CC 针脚的工作模式

Type-C 接口

Type-C 接口的规范大致与 USB 3.1 规范同时期发布,但是由于在 USB 3.2 规范中才引入了 Type-C 的双通道传输模式,因此我们通常仅基于 USB 3.2 及以后的规范版本来讨论 Type-C 接口。

Type-C 接口的针脚定义我曾经在 USB 2.0 与 USB 3.2 一文中介绍过,为了方便,我将其搬运到本文中:

Type-C 公头 Type-C 公头针脚定义

Type-C 母头 Type-C 母头针脚定义

母头针脚定义:

针脚 定义 作用
A1/B1 GND 接地针脚
A2/B2 TX1+/TX2+ SuperSpeed 差分信号发送针脚正极
A3/B3 TX1-/TX2- SuperSpeed 差分信号发送针脚负极
A4/B4 VBUS 供电针脚
A5/B5 CC1/CC2 配置通道信号针脚
A6/B6 D+ 数据针脚正极
A7/B7 D- 数据针脚负极
A8/B8 SBU1/SBU2 边带使用针脚
A9/B9 VBUS 供电针脚
A10/B10 RX2-/RX1- SuperSpeed 差分信号接收针脚负极
A11/B11 RX2+/RX1+ SuperSpeed 差分信号接收针脚正极
A12/B12 GND 接地针脚

本文的主角是 CC 针脚,我们不会关注其他针脚的功能。

Type-C to Type-C

让我们先从最简单的 Type-C to Type-C 线缆,也就是双头 Type-C 线缆说起。这种线缆的基本 CC 模型如下图所示:

Type-C CC Model

图中标有 “Cable” 的圈内是 USB 线缆,线缆左侧是主设备端的 USB 接口,线缆右侧是从设备端的 USB 接口。

在这种模型下,主设备端需要将 CC 针脚通过 Rp 电阻上拉到 VBUS,从设备端需要将 CC 针脚通过 Rd 电阻下拉到地。而在 USB 线缆中,其中一条 CC 线缆直接从一头连接到另一头,而另一条 CC 线缆则是断开的,如果不需要 VCONN 功能,则直接保持悬空即可(即开路);如果需要 VCONN 功能,则通过 Ra 电阻下拉到地。

由于双头 Type-C 的两边都支持正反插,因此 CC 的连接方式就有四种,不过不管如何连接,对于主设备而言,总有一侧 CC 识别到的是通过 Rd 下拉到地,另一侧 CC 识别到的是悬空;对于从设备而言,总有一侧 CC 识别到的是通过 Rp 上拉到 VBUS,另一侧 CC 识别到的是悬空。

对于主设备而言,CC1/CC2 的识别可以归纳为下面的表格:

CC1 CC2 状态
开路 开路 无连接
Rd 开路 设备连接,方向为 CC1
开路 Rd 设备连接,方向为 CC2
开路 Ra 仅供电,无设备连接,方向为 CC1
Ra 开路 仅供电,无设备连接,方向为 CC2
Rd Ra VCONN 供电设备/配件连接,方向为 CC1
Ra Rd VCONN 供电设备/配件连接,方向为 CC2
Rd Rd 调试配件模式连接
Ra Ra 音频适配器配件模式

对于从设备而言,只需要将 Rd 换成 Rp 类推即可。

对于 OTG 设备而言,由于它既要支持做主设备,又要支持做从设备,通常这些设备又被称为双角色设备(DRD,Dual Role Device),因此它的 Type-C 接口的 CC 针脚需要能够在上拉和下拉之间切换:

DRD CC Model

Rd 和 Ra 的阻值相对固定,规范建议 Rd 的阻值为 5.1kΩ,Ra 的阻值在 800Ω ~ 1.2kΩ 之间。

Rp 有三种可选的阻值,用来表示主设备端能够输出的最大电流大小。默认情况下,如果主设备只能提供基础的 900mA 电流,则 Rp 的阻值应为 56kΩ ± 20%;如果主设备能够提供 1.5A 的电流,则 Rp 的阻值应为 22kΩ ± 5%;如果主设备能够提供 3A 的电流,则 Rp 的阻值应为 10kΩ ± 5%。

Type-C to Type-A

在日常生活中,我们最常见到的带有 Type-C 接口的线缆是 Type-C to Type-A 线缆,也就是一端是 Type-A 接口而另一端是 Type-C 接口的线缆。

由于 Type-A 线缆只有 4(USB 2.0) 或 9(USB 3.2)根线缆,规范要求 Type-C 接口的一侧 CC 针脚通过 Rp 上拉到 Type-A 接口的 VBUS 针脚,而另一侧(或称为 VCONN 针脚)保持悬空。注意在这种情况下,Rp 的默认阻值应为 56kΩ ± 5% 而不是 56kΩ ± 20%。

显而易见,这种线缆要求 Type-A 侧连接的设备一定是主设备,而 Type-C 侧连接的设备一定是从设备。

需要注意的是,华为的 USB 2.0 快充线将两个 CC 针脚都通过 Rp 上拉到了 VBUS,这实际上是一种私有协议,华为自己的手机识别到 CC1/CC2 都通过 Rp 上拉到 VBUS 后就知道这是华为自己的快充线,从而启用华为的快充协议。

对于非华为设备,如果想要兼容华为的快充线,就必须启用调试配件模式(Debug Accessory Mode),然后将这种模式视为普通 USB 接入来处理。需要注意的是,华为快充线中的 CC 丢失了识别正反插的能力,因此无法做成 USB 3.0 线缆;即使以 USB 2.0 连接,虽然 USB 2.0 原则上不需要 CC 来识别正反插,但是部分驱动(例如 FSA4480 的高通驱动)在 CC 无法识别的情况下不会提供功能,还需要对驱动代码进行修改以兼容。

音频适配器配件模式

CC 为 Type-C 提供了音频适配器配件模式(Audio Adapter Accessory Mode),即支持 TRRS 接口(我们熟知的 3.5mm 耳机接口就是其中一类)转换到 Type-C 接口。

需要注意的是,TRRS to Type-C 耳机与 USB 耳机是两回事,前者通常称为模拟音频耳机,后者通常称为数字音频耳机,二者的主要区别是数模转换(DAC,Digital-to-Analog Conversion)由谁来完成:前者由设备完成数模转换,然后将模拟音频信号通过 TRRS 接口发送到耳机;后者则是设备直接将数字音频信号通过 USB 协议发送给耳机,由耳机完成数模转换,输出模拟音频信号。

在这种模式下,Type-C 的 3.2 差分信号线不被使用,USB 2.0 的差分信号线中的 D- 针脚与 D+ 针脚分别连接 L 音频信号与 R 音频信号,两个 SBU 针脚分别连接到 MIC 与 AGND。TRRS to Type-C 线缆内部需要将两个 CC 针脚都通过 Ra 接地。

需要注意的是,在主设备端,尤其是对于 SoC 而言,输出 USB 信号的 IO 口与输出模拟音频信号的 IO 口往往是不相同的,因此在 SoC 到 Type-C 接口的中途需要插入一个切换芯片来将 USB 信号分流,例如 FAS4480:

FSA4480

如果接入的是 USB 设备,则芯片内部将 DN_L 开关拨到 DN 侧,将 DP_R 开关拨到 DP 侧;如果接入的是模拟音频耳机,则芯片内部将 DN_L 开关拨到 L 侧,DP_R 开关拨到 R 侧。

PD 协议与备选模式

USB 供电(PD,Power Delivery)协议旨在通过单根电缆提供更灵活的电力传输和数据,从而实现 USB 的最大功能。该协议最主要的用途就是实现充电协商,对 USB 从设备进行更高功率的充电(PD 3.1 协议已支持最高 240W 充电)。

主设备与从设备进行充电协商时,就需要在 CC 线缆上传输以双相标记编码(Biphase Mark Coding)处理的 USB 供电消息(USB Power Delivery Message)。

双相标记编码的规则是:用两个时钟周期来表示一个比特的数据,每两个时钟周期转换一次电平;在同一个比特的两个时钟周期之间,如果该比特是 0,则保持电平不变,如果该比特是 1,则反转电平。例如:

Bitphase Mark Coding

除了音频适配器配件模式外,Type-C 还支持各种备选模式(Alternative Mode),用以支持 DisplayPort, MHL, thunderbolt, HDMI 或 VirtualLink 传输协议。要想进入备选模式,同样需要通过 USB 供电消息来进行协商。

具体的协商过程这里就不介绍了,因为内容太多,有兴趣了解的话可以去查阅一下 USB PD 规范。

参考

Universal Serial Bus Power Delivery Specification Revision 3.1 - USB-IF

Universal Serial Bus Type-C Cable and Connector Specification Release 2.1 - USB-IF

USB Type-C - Wikipedia

本文由作者按照 CC BY 4.0 进行授权

Android C++ 生成 compile_commands.json

C++ Concept 重载决议探讨