背景
想要用手机,通过USB接口去连接一个外设。
后来记得了,其实USB技术中,是分Host和Device的,且功能是固定的。
除非有OTG的硬件,则可以通过软件(驱动)去配置,可以支持作为Host,或者Device。
所以,如果安卓手机支持USB Host,那么可以确定其手机的USB模块是OTG的。
关于安卓(Android)手机是否支持USB主机(USB Host)功能
参考了一些资料:
1.之前这位:
解释的也还是有点混乱的。
2.这里也解释了:
Determine Your Phone’s USB Host Capabilities With USB Host Diagnostics
3.官网的解释更清楚:
总结安卓Android手机能够使用USB Host的必备条件
参考之前别人的解释,和后来看到的官网的解释,总结如下:
Android中,USB方面,分两种模式:
- USB accessory== USB Device == Android手机作为一个Device设备
- 把手机连到电脑上,电脑就是Host,手机就是Device,手机就是类似于U盘,可以从主机电脑中操作U盘,拷贝U盘资料了
- 此种模式,可以说所有手机都支持,就像都可以当做一个U盘接到电脑上一样
- USB host == Android手机作为一个Host主机
- Android手机就是主控制器,可以外接/外挂,USB鼠标,USB键盘,U盘,USB摄像头,游戏手柄等被控制的设备
- 此种USB Host模式,需要软硬件都支持才能工作:
- 硬件:确保手机本身的USB模块是OTG的,即USB的硬件是那种,既可以被配置为Device的,也可以被配置为Host的
- 与此相对应的是,有些USB的硬件模块,是固定的USB Device,或者是USB Host
- 比如普通的U盘中的USB模块,就是固定的USB Device
- 比如你把U盘接到电脑上的那个USB接口,就是主板上的USB Host的接口,可以挂载你的U盘
- 与此类似的是,有些数码相机,就是USB OTG的
- 即可以当做U盘接到电脑上,电脑上就可以把相机里面照片拷贝出来了
- 也可以当做USB 主机,连接USB的打印机,把照片传输到打印机上,打印出来
- 软件
- Android系统,必须是Android 3.1(API Level 12)
- 本身手机常见给你预装的Android系统,本身是有对应的USB(OTG)的驱动
结论
所以,换句话说:
1.如果只是手机的USB硬件是OTG,支持USB Host
但是手机中android系统是低于3.1版本,或者里面没有对应的USB驱动的
则都无法使用USB Host功能,都无法外接USB 键盘之类的USB设备。
2。本身手机的USB硬件就不是OTG的,就不支持USB Host
即使你手机中Android版本再高,比如是4.1,那也是白搭,也没法用USB Host的。
3.只有当你的手机本身的USB硬件是OTG的,且Android系统是3.1版本之上的,且系统的固件(ROM镜像)里面是有对应的驱动的,才能真正使用上USB Host。
举例:
此处,我的手机就是Samsung的I9100G,
根据:
[经验] I9100 Galaxy S II USB Host(OTG)功能测试,多图高清
就可以确定,至少,I9100的硬件,肯定是OTG的了。
只不过我当前手机上的Android系统是2.3.6的,低于3.1,所以也是没法用USB Host的,没法外挂USB设备的。
如何确定我的手机是否支持USB Host
同样的参考之前的解释,可知,有些手机声称支持USB Host,结果实际不支持,或者使用有问题。
而对于一款安卓手机是否支持USB Host,就有人弄出了:
提供了相关工具下载:
以及,对应的有人专门总结了,目前N多款手机,声称是否支持,和实际上是否支持等信息:
里面,应该可以找到你的手机。
需要的可以去看看。
总结
USB Host,一般人,用不到。
需要用到的人,是需要一些背景知识,才能大概搞懂是怎么回事。
以及如何使用的。
提示:
关于USB Host的开发,有空可以参考:
Android USB Host + Arduino: How to communicate without rooting your Android Tablet or Phone