USB-C与PD学习笔记——在新的USB应用中换用Type-C接口
USB 发展概览
USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,目前由USB-IF维护。自1994年问世,大致经历了以下时期:USB1.0(1.5Mb/s ,Low-Speed, 1996.01)、USB1.1(12Mb/s ,Full-Speed, 1998.09)、USB2.0(480Mb/s ,High-Speed, 2000.04)、USB3.0(5.0Gb/s ,Super-Speed, 2008.11,又称USB3.1 Gen1、USB3.2 Gen1)、USB3.1 Gen2(10Gb/s ,Super-Speed+, 2013.12,又称USB3.2 Gen2)、USB3.2 Gen2x2(20Gb/s,Super-Speed++, 2017.09,仅支持Type-C接口)、USB4(包含 USB4® 20Gbps与USB4® 40Gbps并向下兼容前述规范,2019.09)。需要注意的是,雷电接口不属于USB规范,它是英特尔维护的一个接口规范,切莫混淆。
版本 | 速度 | 发布年份(参考) |
---|---|---|
USB1.0 | 1.5Mb/s ,Low-Speed,低速 | 1996.01 |
USB1.1 | 12Mb/s ,Full-Speed,全速 | 1998.09 |
USB2.0 | 480Mb/s ,High-Speed,高速 | 2000.04 |
USB3.0 | 5.0Gb/s ,Super-Speed | 2008.11 |
USB3.1 Gen2 | 10Gb/s ,Super-Speed+ | 2013.12 |
USB3.2 Gen2x2 | 20Gb/s,Super-Speed++ | 2017.09 |
USB4® 20Gbps | 20Gbps | 2019.09 |
USB4® 40Gbps | 40Gbps | 2019.09 |
USB3时代命名混乱,最初的USB3.0速率为5.0Gb/s,后来USB3.1和3.2发布后,速度使用Gen1、Gen2、Gen2x2来表示。USB4时代USB-IF已经意识到了这个问题,简化USB版本命名。
USB-IF除维护上述的USB数据协议标准之外,他也定义了USB协议所使用的各种接口和电气规范。在USB3.1以及之前,接口与电器规范包含在USB规范中;从USB3.2开始,USB 3.2规范已经不再包含接口和电气规范,转为单独提供。
USB-IF定义了USB的电源规范。从最初的BC1.0(Battery Charging1.0)到提供5V1.5A电流支持的BC1.2。又从PD1.0开始,到广泛使用的PD2.0&3.0,支持最高20V5A的100W供电能力。最新的PD3.1快充标准由USB-IF 于2021年5月发布。由此,基于USB Type-C的电源支持添加了28V、36V、48V档,其分别能够提供140W、180W、240W三档功率;可调电压模式提供了15V到电源适配器最大电压的可调范围,分辨率100mV。在PD协议中,电源的供给方向与USB接口的功能角色通过单独的导线通信进行配置,实现了大量的功能。
笔者最初开始学习USB-PD的目的是为USB2.0设备更换Type-C接口。本学习笔记最初的目标是为电子工程师提供参考,以便快速将Type-C接口应用于电路设计中;后期若有机会深入,可以研究一下快充协议触发。当然笔者才疏学浅,这个目标目前还很遥远。目前我为探索通过Type-C充电时各IO的信号,画了一张板子做测试用,文件已上传GitHub。
本文相关的参考文档,如往常一样,我会在文末附加链接。
USB Type-C 接口定义
USB Type-C 母座定义(前视图):
USB Type-C 公头定义(前视图):
如何从C口获得电力
这个标题可能看起来有些无聊,但很多初学者对此并不了解。从传统的几款USB接口中获取电力非常简单,你只需要连接VBUS和GND,即可轻松获得电力。但Type-C 接口并非如此。这时有人会说,我画了张板子,Type-C口只是用来供电,我只连接了VBUS和GND,手机充电器插上,板子就工作了。哪有你说的那么悬?
传统5V取电:
目前市面常见的Android手机已经普遍采用Type-C 接口,但充电线与电源适配器间的连接仍大量使用USB A型接口,而这类充电器并不能代表全部。有一类电源适配器的输出口也是C口,它们应当支持PD快充协议。按PD规范,C口应该支持双向充电,这是两者协商决定的,提供电力的设备被称为Source,而受电的设备被称为Sink。Source端应上拉CC,Sink端应下拉CC,以此完成识别。复杂的快充协商要求两边是IC来执行,而普通的5V设备想做到被其他设备识别,只需要几颗电阻就可以。
所以,如上图所示。如果我们要从C口获取电力,我们需要的便是在受电即Sink端Type-C母口的CC1和CC2分别连接一个下拉电阻即可,一般取值5.1K。为什么要分别连接一颗下拉电阻,而不能直接短接CC1和CC2共用一颗电阻?因为在双头Type-C连接线缆中,CC实际只有一条,另一条将作为VCON,给线缆中的EMark芯片供电。注意,这里的EMark芯片是选配的,USB-IF规定了载流能力超过3A的线缆必须带有EMark芯片。而EMark 芯片会将CC线短接的情况识别为耳机附件模式,最终导致在Source端不能正确识别Sink设备。
按照上面介绍的逻辑,如果我们设计的是Type-C公头取电,比如是一条5V电源转接线。这种情况下我们只需要在CC上设计一个5.1K下拉电阻,VCON悬空即可。毕竟在公头Type-C上,只有一个CC线。另外,如果我们设计的是一个连接到Sink端的Type-C公头,此时我们应该为CC添加上拉电阻,以保证Sink正确识别到插入的是电源。具体的电阻大小与电源供电能力有关,此处不在赘述。
如何实现快充:
目前市面上有大量的快充协议,最广泛的可能要属USB PD 和高通的 QC。前者是在CC线上使用PD协议进行通信,后者是在D+和D-上加载不同电压来协商。学习这些信号的时序、协议需要耗费大量的时间。业界有公司专门为此设计了专用的接口芯片,他们往往提供了多种与单片机通信的方式,使用时无需关注PD协议信号的处理,通过简单的配置即可使用。此类产品如:沁恒CH224。
有图片挂了