3. VCONN与电子标记
好,咱们进入第三章。VCONN 和 eMarker 这块,说白了就是Type-C 线缆的“身份证”和“供电系统”。很多刚接触 PD 协议的工程师容易在这上面栽跟头——要么线缆识别不出来,要么供电出问题。我最早调 PD 的时候,就碰到过一根线缆死活无法协商 5A 电流,最后发现是 eMarker 的 VCONN 供电脚虚焊了。
这一章我们就把这套机制彻底搞清楚。先看 VCONN 怎么供电,再讲 eMarker 如何被识别,最后看电流能力怎么广播出去。
核心知识点速览: VCONN 是为线缆内部芯片(eMarker 或 re-driver)供电的专用电源;eMarker 通过 CC 线上的特定时序被识别;电流能力广播则依赖 eMarker 内部存储的配置信息。三者环环相扣。
3.1 VCONN 供电机制
VCONN,全称是 VCONN,不是 VCONN 啊,别读错。它是 Type-C 规范里专门给线缆内部器件供电的。
为什么需要 VCONN?
想想看,一个好的 USB-C 线缆,尤其是支持 5A 或者 USB 3.x 高速传输的线缆,内部需要电子标记芯片(eMarker)来识别身份,甚至还需要信号 ReDriver 或 Mux 来补偿损耗。这些芯片工作得要电吧?VCONN 就是干这个的。
供电特性:
- 电压范围: 宣称是 3.0V ~ 5.5V,但我实际测量下来,主流设计都稳定在 4.75V ~ 5.25V 左右。
- 电流能力: 规范要求至少能提供 20mA。对 eMarker 来说绰绰有余;如果线缆里还有 ReDriver,那就要看具体规格了,但 VCONN 源端至少要保证 20mA 的持续能力。
- 来源: 由 Source(下行端口,DFP) 提供。在 Type-C 连接过程中,Source 检测到 CC 线上的 Rp/Rd 配置后,就知道该给哪一根线提供 VCONN。
| 参数 | 最小值 | 典型值 | 最大值 | 说明 |
|---|---|---|---|---|
| VCONN 电压 | 3.0 V | 5.0 V | 5.5 V | 源端输出范围 |
| VCONN 电流 | 20 mA | 20 mA | 由电缆设计决定 | 源端必须至少能提供 20 mA |
| VCONN 压降 | — | ≤ 200 mV | — | 线缆上的电压降(含连接器) |
| CC 线检测时间 | — | < 100 ms | — | 连接后必须完成 VCONN 准备工作 |
我第一次调试时以为 VCONN 和 VBUS 是同一个电源,结果发现根本不是。VCONN 是一个独立的供电线路,通常由 Source 端的一个 LDO 或降压转换器提供。
检测与切换:
Source 是通过检测 CC1 和 CC2 上的电压/电阻状态来判断接的是正插还是反插。具体来说:
- 如果 CC1 检测到 Rd(下拉),CC2 检测到 Ra(用于 VCONN 的电阻),那么 VCONN 就施加在 CC2 上。
- 反之,如果 CC2 是 Rd,CC1 是 Ra,VCONN 就施加在 CC1 上。
我曾经设计的一款产品,在批量生产中发现有 3% 的线缆无法触发 VCONN,排查后发现是 Source 端的 CC 检测比较器阈值设计余量不足,稍微调整了电阻分压就解决了。嗯,这里要注意比较器的精度。
警告: VCONN 端不能没有过流保护!如果线缆内部短路或者 eMarker 损坏,20mA 可能会变成几百毫安,烧坏 Source 端的 LDO。我在项目中见过因为漏加 OCP 导致的返修案例——那一批板子换了二十多块。
3.2 eMarker 芯片识别
eMarker(电子标记芯片)是集成在线缆插头内部的一颗小芯片。它存储了线缆的各种能力信息,比如支持的电流、USB 版本、供应商 ID 等。
eMarker 的位置:
它通常位于线缆的电子端(E-Marker),也就是靠近插头的那一侧。对于双头线缆,规范要求每个插头都要有一颗 eMarker,但很多低成本线缆只在其中一端放置。
如何识别 eMarker?
Source 端通过 CC 总线 与 eMarker 通信。通信协议基于 BMC(双相标记编码),和 PD 协议的主通信相同。具体流程是:
- 建立 CC 连接: Source 检测到 Rd,确认是合格的有效负载。
- 施加 VCONN: Source 将 VCONN 施加到正确的 CC 线上(如上节所述)。
- 发送 SOP' 序列: 普通 PD 通信使用 SOP 包。要读 eMarker,Source 会发送 SOP'(SOP Prime)或 SOP''(SOP Double Prime)序列,这些信号能穿透连接器到达线缆内部的 eMarker,但不会让 Sink(受电端)误处理。
- eMarker 回应: eMarker 收到正确的 SOP' 包后,会在 CC 线上回应一个 Discover Identity 应答。
在实际测试中,我最常遇到的坑是:eMarker 初始化未完成。有些 eMarker 芯片上电后需要几十毫秒才能稳定,如果 Source 在 VCONN 刚刚建立后立即发送 SOP' 包,就会收不到应答。我习惯在 VCONN 建立后加入 50ms~100ms 的延迟 再开始枚举 eMarker。
个人经验: 批量采购 eMarker 芯片时,一定要关注其“VCONN 上电延迟”参数。不同厂商的芯片差异很大,有的一次性通过,有的要反复重试。我合作过的几家供应商里,NXP 和 TI 的 eMarker 表现最稳定。
3.3 电流能力广播
eMarker 内部有一个特定的数据结构。Source 通过读取这个结构,就能知道这根线缆能支持多大的电流。这个数据在 PD 协议中称为 “线缆 VBUS 电流能力”。
电流能力广播的机制:
| 编码(3 位) | 电流能力 | 备注 |
|---|---|---|
| 000b | 默认 (3A) | 老旧设备或未编程 |
| 001b | 3A | 常规供电 |
| 010b | 5A | 大功率供电 |
| 011b | 保留 | — |
| 100b 及以后 | 保留/扩展 | — |
Source 在成功识别 eMarker 后,会发起 USB PD Discover Identity 命令。eMarker 的应答包里包含了这个 3 位的电流能力字段,Source 根据这个字段决定自己可以与 Sink 协商的最大电流。
举个例子,如果 eMarker 报告“010b = 5A”,那么 Source 在后续的功率协商中,就可以向 Sink 提供最大 5A 的电流。如果 eMarker 报告的是“3A”,就算 Sink 想要 5A,Source 也不会同意——因为线缆会过热甚至熔化。
关键点: 电流能力广播不是由 Sink 决定的,而是由线缆中的 eMarker 决定的。Source 是最终的仲裁者。说白了,线缆说只能过 3A,Source 就必须遵守,哪怕 Sink 电源饿得嗷嗷叫也不行。
我记得有一次在调试一个 100W 的充电器时,发现插上某品牌的线缆后只能协商到 60W(3A),但这根线明明支持 5A。后来用协议分析仪抓包,看到 eMarker 返回的电流能力编码就是“3A”——那根线是假货!eMarker 没烧录正确的数据。从那以后,我们采购线缆时都会用专用的 eMarker 读写工具做一次性验证。
代码层面,如果你在写 Source 端的固件,典型的处理逻辑是:
// 伪代码:读取 eMarker 电流能力
void process_emarker_discover_identity_response(uint8_t *rx_data) {
// 假设 rx_data 是 eMarker 返回的完整数据包
uint8_t vbus_current_cap = (rx_data[3] >> 2) & 0x07; // 提取 3 位电流能力
switch (vbus_current_cap) {
case 0x00: // 默认 3A
max_cable_current = 3;
break;
case 0x01: // 3A
max_cable_current = 3;
break;
case 0x02: // 5A
max_cable_current = 5;
break;
default:
// 保留值,保守处理为 3A
max_cable_current = 3;
break;
}
// 更新供电协商的上限
update_power_negotiation_limit(max_cable_current);
}
你想想看,这个逻辑其实很简单。但如果 eMarker 没被识别出来,或者没有 VCONN,这一整段代码就不会执行,默认电流会回退到 3A(甚至可能是 1.5A,取决于具体实现)。所以我习惯在固件里加一个超时判断:如果 500ms 内无法识别 eMarker,就假设线缆只支持基本电流。
警告: 千万别忽略 eMarker 的失效情况。有些廉价线缆根本没有 eMarker,但又能正常供电。如果你在固件里假设没有 eMarker 就认为是 5A,那你就等着返修吧。安全策略必须是:无 eMarker → 默认 3A 或 1.5A。
这张图总结了我们这节的三个核心步骤:连接检测→VCONN 供电→eMarker 枚举。每一步都有细节需要把握,特别是 VCONN 的稳定性和 eMarker 的上电时序。
好,关于 VCONN 与 eMarker 的内容就到这。记住:VCONN 是线缆的生命线,eMarker 是线缆的身份证,电流能力广播是通信的语言。三者缺一不可。