BCS v1.2的充电器探测原理如下:
当OTG驱动捕获到VBUS中断的时候,断开DP/DM与SIE接口的连接,然后等待数据线的连接(DCD)并设置超时,一般是750ms,如果超时,可启动usb gadget驱动做识别;否则在DP上加载0.6V的电压,检测DM上是否有0.6V的电压,这里有两种情况:
情况一:如果有0.6V电压,那么可能是DCP或者CDP充电器,接着在DP上撤销0.6V电压并加载0.8V电压,检测DM上的电压,如果是0.8V那么就是DCP充电器,否则由于CDP充电器对DP上的0.8V电压不做响应,得出是CDP充电器;
情况二:如果没有0.6V电压,那么就是SDP即是数据线连到了PC上。
探测完毕后,重新打开DP/DM和SIE的连接。
注:VDAT_REF=0.6V,数据线参考电压
VLGC=0.8V,逻辑电压
高通平台的USB 2.0的PHY框图如图1所示:
图1
高通平台的USB 2.0接口由于采用了ULPI Phy接口,所以将BCS V1.2的探测寄存器放到了ULPI寄存器空间,标准的ULPI寄存器空间地址范围0x00-0x2f,这部分是公规(地址偏移不允许芯片制造商更改),从而高通将充电器探测寄存器的地址放到了这些公规寄存器地址之外了。
高通平台USB 3.0的PHY框图如图2所示:
图2
由于USB3.0是双总线架构,既包含了USB 2.0的数据线也包含了USB 3.0的数据线,所以USB 3.0的物理层是有两个部分的。高通MSM8974的USB3 .0的物理层2.0用的是UTMI接口,3.0用的PIPE3接口(参看phy-interface-pci-express-sata3-usb30-archectures.pdf),并且这两种PHY接口是没有内置寄存器的,故而高通将BCS V1.2的充电探测寄存器放到了AHB地址空间(见图)。识别原理主要通过UTMI PHY控制寄存器,PIPE3 PHY接口是不用来做充电器识别的。