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 一文中介绍过,为了方便,我将其搬运到本文中:
母头针脚定义:
针脚 | 定义 | 作用 |
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 模型如下图所示:
图中标有 “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 针脚需要能够在上拉和下拉之间切换:
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:
如果接入的是 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,则反转电平。例如:
除了音频适配器配件模式外,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