一张图看懂Battery Charging Specification 1.2(BC1.2)USB充电协议
一张图看懂Battery Charging Specification 1.2(BC1.2)USB充电协议
作者:AirCity 2019.11.2
[email protected]
1 简介
如果你做过基带工程师,肯定分析过那些不充电的客退手机。如果你发现充电电流只有100mA,2mA等,建议你先看看USB IF的Battery Charging Specification 1.2版本。这是任何手机充电必先经历的第一个捂手协议(某些定制协议的充电器除外)。本文用一张图告诉你整个协议的精髓,能解决你遇到的大部分疑问。
2 充电器识别过程(精髓)
下图是手机插入充电器后发生,一系列的决策逻辑流程,只需要看蓝色字体,其他颜色字体所述逻辑不常见。
- 1 检测Vbus。PD(Portable Device,如手机)中有个检测VBUS是否有效的电路,电路有一个参考值,高于这个值就认为是VBUS有效了。这个参考值叫VOTG_SESS_VLD,他是一个范围,最小0.8V,最大4V。仔细观察USB A头里面,Vbus和GND的两个PIN是最长的,目的就是要先接触,Vbus线上电。
- 2 PD启动定时器,这个时间是TDCD_TIMEOUT=300~ 900ms。在这个时间内,如果PD不支持DCD(Data Contact Detect,数据连通性检测),超时后将开始下一步。如果支持,PD在D+线上施加电流IDP_SRC(7~ 3uA),如果PD连接的是SDP,SDP在D+线上有一个下拉电阻RDP_DOWN(14.25~ 24.8Kohm),此时D+电压为99.75mV~322.4mV,只要PD在D+上检测到的电压小于VLGC_LWO(0.8V),且维持TDCD_DBNC(10ms),DCD就检测成功,开始进入下一步。如果PD插入了其他类型的设备,PD将在D+检测不到电压小于VLGC_LWO的情况,那么将一直等到TDCD_TIMEOUT超时。只有PD连接的是SDP(普通USB口)或者CDP(充电能力强的USB口)的时候,DCD才有用,因为DCD时间段,DCD成功后,立即进入了下一步,而不用等待TDCD_TIMEOUT超时。USB Connect Timing ECN中规定,一个上电的USB设备,要求在连接到host的TSVLD_CON_PWD(1s)内建立连通。
- 3 Primary detection,首次检测。PD在D+上施加电压 VDP_SRC(D+ Source Voltage 0.5~0.7v),然后PD开始检测D-上的电压。只看蓝色字体,逻辑分为两种可能。
- 3.1 第一种可能:PD在D-上检测到的电压小于VDAT_REF(Data Detect Voltage 0.25~0.4 v),这个时候说明PD连接到了一个普通的USB口(电脑的USB口)
- 3.2 第二种可能:PD在D-上检测到的电压大于VDAT_REF(Data Detect Voltage 0.25~0.4 v),说明PD连接到了DCP(充电头,首次检测期间,控制IC会把D+D-短路)或者CDP(充电能力强的USB口,首次检测期间,控制IC会把D+D-短路)。此时又会出现两种情况:
- 3.2.1 PD立即开始枚举,建立连接。通过配置决定充电电流大小。这种情况比较少。
- 3.2.2 PD开始做二次检测,PD在D-上施加电压VDM_SRC(0.5~0.7v),然后检测D+上的电压:
- 3.2.2.1 如果D+大于VDAT_REF(Data Detect Voltage 0.25~0.4 v),则认为是连接的是DCP。DCP是专用充电头,这种充电头内部的IC会再首次和二次检测的时候,短路D+D-。低端仅支持BC1.2的充电头,其内部直接用电阻短路了D+D-。
- 3.2.2.2 如果D+小于VDAT_REF(Data Detect Voltage 0.25~0.4 v),则认为是连接了CDP。充电能力强的USB口CDP,在首次检测的时候会短路D+D-,但是在完成首次检测后,就断开D+D-。
3 常见的异常情况
3.1 十分缓慢的插入USB A口
当PD的Vbus线接触DCP的Vbus后,USB A口仍然非常缓慢的在插入,PD在做完首次检测后,USB的D+ D-线才接触。PD会认为连接到了SDP端口,之后进行枚举,但又枚举不成功,这种情况PD只能汲取ISUSP(2.5mA)。
3.2 数据PIN断开
如果数据线的D+或者D-线断了,插入了任何一种类型的充电口,会在首次检测是,认为检测到了SDP,之后出现枚举不成功,PD只能汲取ISUSP(2.5mA)。
3.3 D+或者D-与GND短路
如果数据线的D+或者D-线对GND短路,插入了任何一种类型的充电口,会在首次检测时,认为检测到了SDP,之后出现枚举不成功,PD只能汲取ISUSP(2.5mA)。
3.4 D+和Vbus短路了
如果插入的是SDP,会在首次检测时,认为检测到了SDP,之后出现枚举不成功,PD只能汲取ISUSP(2.5mA)。
如果插入的是CDP或者DCP,在首次检测时,PD检测到D-上电压大于VLGC,PD认为不在充电口上,只能是在SDP上,此时汲取ISUSP(2.5mA)。
3.5 D-和Vbus短路了
如果插入的是SDP,会在首次检测时,PD检测到D-上电压大于VLGC,PD认为不在充电口上,只能是在SDP上,此时汲取ISUSP(2.5mA)。
如果插入的是CDP或者DCP,在首次检测时,PD检测到D-上电压大于VLGC,PD认为不在充电口上,只能是在SDP上,此时汲取ISUSP(2.5mA)。
3.6 PD的电池电压过低
PD会自动强制汲取IUNIT=100mA,一直到PD电池电压正常。低电压时,PD还会有别的算法,不只是一个简单的100mA。
4 常见的USB接口
5 补充说明
本文仅介绍BC1.2的精髓判断逻辑,针对每一步判断,没有详细展开。另一盘文章《Battery Charging Specification 1.2协议详解》有更加详细的介绍以及实测波形。