USB Battery Charging V1.2 Specification 定义了USB充电器的类型或者叫做充电源。
1. 支持的充电器类型
1.1 Standard Downstream Port(SDP)
这种USB端口存在于主机PC中,这个是与USB的规格书一致的。
当一个USB外设接到SDP端口上的时候,有下列几种情况:
- 当总线挂起的时候电流应该小于2.5mA.
- 如果总线没有挂起并且没有配置,或者连接到一个总线供电的hub上,电流应该小于100ma
- 如果总线没有挂起且配置好了,电流应该小于等于200ma。
1.2 DCP 或者叫做wall charger
这些充电端口可以供应高达1500ma的电流给移动设备充电。
然而这些DCP端口不支持通过USB接口进行数据传输。
电池充电规格书定义了数据线应该被短接在这种DCP情况下。
充电类型的检查依赖于这些数据线。
1.3 charging Dedicated Port (CDP)
CDP端口是一个在主机端的特殊端口,能够提供高达1500ma的电流,与此同时,可以枚举设备以供正常的USB使用。
1.4 Proprietary charger (专有的充电器)
这些适配器不像正常的标准充电器那样,短接数据线。他们有自己的组合,上拉或者下拉数据线。
1.5 Floated charger
这种类型的充电器被看做是不兼容的充电器类型。USB数据线没有短接并且是悬空的。
因此,与标准类型的充电器相比,当充电检测上拉或者下拉的时候,电压的范围将决定了,他不会
被识别成是DCP.
2 USB充电的架构
下面有几种配置给USB充电和充电器类型的检测。
- 基于外部充电芯片的充电器检测(SMB充电器检测)
- 内部的USB PHY充电器检测逻辑
基于USB PHY的充电子系统有以下一些基本模块:
- USB core负责让OTG driver知道充电器的连接。
- 高通平台的电池充电是被PMIC或者外部的充电芯片所控制。它必须知到充电器类型和最大充电电流。
- 原生的电池驱动直接与PMIC进行交互。这个驱动通知PMIC开始使用USB VBUS进行充电并且指明可以获取的最大的电流。
PS:这里的电池驱动估计说的不对,或者我自己理解有误,从代码上看应该是USB的驱动检测到充电器类型之后,把这一信息通知给PMIC.
3 充电检测算法
在通用的充电器检测模型中,提到了几个阶段:
- Data Contact Detect(DCD)—— 这个是硬件块使用的,用来帮助检测当USB数据线与pin脚连接起来。
- Primary detection - 这个阶段用来区分是连接在了主机上面还是或者是一个大电流的设备上面。(SDP VS DCP/CDP)
- Secondary detection - 这个最终阶段,决定了是连接到了DCP 还是CDP。