
手机
以前
手机仅具备作为从设备的能力,而如今
手机的USB已能同时支持主模式与从模式了。USB属于非对称通信协议,只有一端作为主设备,另一端作为从设备时才可以正常通信(所以公对公的线是不符合USB规范的,用它连接两台
电脑是没有用的)。早期的
手机,USB没有连接外设的能力,只是从设备,必须连接在主设备之下,而
电脑只能是主设备,所以一连接就能顺利进行握手通信。后来
手机想要通过USB连接外设,可又没有地方再设置第二个USB接口,于是只能依靠一个USB接口来切换主从模式。在micro USB时代,micro USB有五个引脚,但标准的USB2.0只需要4个引脚,就是因为第五个引脚通过与不同引脚的导通可以标识主从设备,接地时
手机就作为主设备,否则就是从设备。由于普通数据线的第五引脚都不接地,所以此时
手机连接
电脑仍然能够正常进行主从握手,而OTG线的第五引脚是接地的。到了Type - C时代,情况就变得复杂起来了。因为Type - C线的两端是一样的,像micro USB时代那样对第五引脚做下拉处理就行不通了,不然两个一样的接口还分主从的话肯定会被诟病。所以Type - C引入了设备声明机制,设备能够声明自己是主设备、从设备或者两者都可以。如果恰好一端是主设备,一端是从设备,那就没有问题。但现在
手机声明都是两者皆可。不巧的是,有些
电脑由于驱动编写不合理或者接口有其他需求(比如支持C口充电),也声明两者皆可。这样问题就来了,两端都表示自己都行,并且都不愿意先做出决定,于是就陷入僵局。有时候一端先妥协做出决定了,那就可以继续握手通信,但有时候
电脑先妥协成为从设备了,就会出现
手机给
电脑充电这种违背常理的情况。所以像
三星等一些
手机,允许用户强制切换
手机的主从模式,这样就解决了问题。而一些
手机没有这个功能,连接
电脑时就会出现问题。只能说USB - IF的设想很美好,怎么连接都能用,但实际情况却很糟糕,太过开放的东西往往在大家实现的时候就会出现各种各样奇怪的兼容问题,和HDMI CEC的困境如出一辙。