android驱动开发

TypeC充电方向小结

2018-09-19  本文已影响0人  夏寒RHT

网上看到有人提出一个问题,如果将两台手机的typec通过tpyec-typec cable相连,是否可以实现一台手机给另一台手机充电,充电方向是怎样的。

我自己试了一下,将两台typec手机(QC3.0快充协议)对插,确实可以实现一台给另一台充电,但是初始充电方向并不是由电量多少(电池电压)决定的,连续多次插拔typec,初始充电主从状态随机出现,之后可以通过系统内设置usb选项来自由切换充电主从。

查了很多博客和科技文章,感觉没有说的特别清楚的,最后去USB网站上把typec的spec拉下来一看,什么都写的清清楚楚。所以想要搞清楚一个问题,踏踏实实啃spec吧,别想着有人嚼碎了直接喂你。

1.先介绍一下Type C

直接贴引脚定义:

VBus:总线电源,USB PD协议可配置电压,最大20V 5A

GND:地线

TxRx:Tx1 Rx1   Tx2 Rx2 两组数据传输信号,USB3.1标准

CC:CC1和CC2,两个关键引脚,作用很多:

    探测连接,区分正反面,区分DFP和UFP,也就是主从(虽然typec支持正反插,但typec的点定义并不完全对称,比如Rx1,翻转插头再插入就是Rx2,所以需要系统识别插头的正反插情况,用来正确配置Tx和Rx的连接通讯,虽然定义里有CC1和CC2,但是线缆里只有一根cc线,正反插可以连接不同的引脚,通过读取上下拉电平,从而识别插头的方向);

    配置Vbus,有USB Type-C和USB Power Delivery两种模式;

    配置Vconn,当线缆里有芯片的时候,一个cc传输信号,一个cc变成供电Vconn,用来给线缆里的芯片供电(3.3V或5V);

    配置其他模式,如接音频配件时,DP,PCIe时;

D+D-:用来兼容USB2.0协议的数据传输,音频复用时也是L R信号

SBU:复用引脚,和usb协议本身关系不大,复用为其他端口时使用

2.TypeC对插充电方向

接下来就是一开始提出的问题,两台手机用typec对插,是否能一台给另一台充电。

Type-C设备role分为host和device,对应充电过程中的source和sink。有三种形式:DFP(Downstream Facing Port)、UFP(Upstream Facing Port)和DRP(Dual Role port)。DFP只能做Source,CC线上拉电阻Rp;UFP只能做Sink,CC线下拉电阻Rd;DRP两者都能做,通过switch切换Rp Rd。比如一般充电器是DFP,U盘是UFP,手机是DRP。

所以,我们的问题就是,两个DRP端口相连,怎样分配role?

USB端口交互行为:

首先明确几个状态,是我自己的理解:

source角色在未连接时的状态Unattached.SRC,一旦检测到CC线连接下拉电阻,进入AttachWait.SRC状态,持续检测下拉电阻,经过tCCDebounce时间,然后进入正式source连接状态Attached.SRC,并打开Vbus和Vconn。

sink角色在未连接时的状态Unattached.SNK,一旦检测到CC线连接上拉电阻,进入AttachWait.SNK状态,经过tCCDebounce时间后,检测到了source打开的Vbus,之后进入正式sink连接状态Attached.SNK,

接下来是几种角色端口的交互行为。

Source 到 Sink

引用TypeC SPEC:

简单描述一下就是,source和sink通过typec连接后,source通过CC检测到sink的下拉电阻Rd,认为有sink连接,source打开VBUS和VCONN(在另一条CC上),双方建立连接,并且source可以通过调整上拉电阻Rp的大小来控制vRd的电压值,sink通过检测vRd的大小从而得知sink能从vbus上拉多大的电流。

Source 到 DRP

引用TypeC SPEC:

DRP在未建立连接前,会不断切换连接上下拉电阻Rp和Rd(具体切换细节在下面分解)。

source和DRP通过typec连接后,在DRP连接Rd时,source通过CC检测到Rd,之后打开VBUS和VCONN;DRP检测到source的Rp,之后等source打开Vbus后,确认转换为sink,并正式建立连接。

DRP 到 Sink

情况与上一种情况类似,不再赘述。

DRP 到 DRP

此种情况最为复杂,因为DRP也可以分为三种角色,普通DRP,DRP try source,DRP try sink,即有些DRP,在DRP之间的连接中,会有prefer的角色,比如笔记本和手机,肯定都是DRP,但是笔记本可能会设定为try source,因为笔记本毕竟电池容量比较大,如果将笔记本和手机相连,最好还是笔记本作为source给手机充电,而不要反过来,但是笔记本与墙插充电器相连时,笔记本肯定是sink。

在typec spec中,DRP和DRP相连的行为中,提到了3个case,case2和case3就是有一方DRP是try source或try sink的情况,这两种情况比较复杂,这里不展开了,有兴趣可以详细查阅,这里只给出case1,两个普通DRP之间相连的情况。

未正式建立连接时,两个DRP都在各自不断切换上下拉电阻,当有一时刻,DRP1是上拉电阻,DRP2是下拉电阻状态,然后接下来就和Source 到 Sink的情况是一样的。因为两个DRP状态是不断切换的,所以连接时刻的DRP各自的状态就决定了连接后的主从关系,当然如果某一时刻两个DRP都是上拉或下拉,那连接行为最终会失败,DRP重新进入不断切换状态等待连接。

那是否会有一种极端情况,两个DRP切换状态太同步了,一直是同上拉,同下拉,那这两个DRP是不是就一直不能连接了,这就涉及到了DRP切换周期的问题。

还是回溯到SPEC中:

可以看出,SPEC定义了DRP 切换source和sink的一个完整swap周期为tDRP,其中dcSRC.DRP为整个周期中DRP作为source的百分比。SPEC明确说明了,用于控制这个周期和百分比的时钟,不能来自于一个特别准确的时钟源如晶振或陶瓷晶振等,以此来最小化两个DRP在配对过程中出现无限失败的问题。而对于各周期的上下限也非常宽裕,所以实际情况下各DRP的周期会不尽相同,不会出现两个DRP切换周期一直同步而导致的配对过程无限fail的情况。

所以结论是,两个DRP连接结果是主从随机的,这也符合我一开始用两台手机试验的结果。

3.USB PD(Power Delivery)

以上过程其实只是底层硬件上连接的一个初始化状态,正如我实际试验中所提到的,在初始充电状态确认之后,可以通过系统软件设置来切换充电的主从,两个手机也可以互相切换读取对方的文件,这个就涉及到了更上层软件的协议。

可以看到,通过PD协议可以切换充电的source/sink,可以切换数据的DFP和UFP,也可以切换由谁来提供线缆电压Vconn。由于软件层面的内容较多,目前阶段不再继续深入研究。

最后挖个坑等填,下一篇我想还是和手机充电相关,聊一聊目前最流行的两种快速充电协议,PD和QC。

参考引用资料:

USB Type-C Specification Release 1.3

两台TYPE-C手机连接可以互相充电吗,怎么实现?

USB Type-C 如何决定充电方向?

一次失败的USB Type C告白

细谈USB Type-C

上一篇下一篇

猜你喜欢

热点阅读