【整理】Android中的USB中的UsbAccessory和UsbDevice的区别

【背景】

之前折腾android中的USB相关的东西。

遇到两个东西:

UsbAccessory和UsbDevice

但是,不是完全明白其中区别。

所以去找找区别。

【解决过程】

1.看了:

android.hardware.usb | Android Developers

的解释,有点概念了:

UsbAccessory:一种外部硬件模块,该硬件模块,和Android设备通过USB进行通讯

UsbDevice:首先是要Android作为Host,然后外部连接一个USB的Device设备。

2.又看到:

USB  Hardware features

中的:

USB android.hardware.usb.host The application uses USB host mode features (behaves as the host and connects to USB devices).  
android.hardware.usb.accessory The application uses USB accessory features (behaves as the USB device and connects to USB hosts).

感觉清楚了,但是还是很疑惑:

usb.host:很明显,Android设备是Host。外接的是Device。

usb.accessory:Android设备是Device,外挂到USB的Host端,比如PC。

但是还是对于UsbAccessory和UsbDevice,两者的区别,不是很清楚。

因为:

不论是Accessory还是Device,在相对于Host来说,都是Device的概念。

3.看到:

A Bright Idea: Android Open Accessories

提到了:

Android’s USB port has in the past been curiously inaccessible to programmers. Last week at Google I/O we announced the Android Open Accessory APIs for Android. These APIs allow USB accessories to connect to Android devices running Android 3.1 or Android 2.3.4 without special licensing or fees. The new “accessory mode” does not require the Android device to support USB Host mode.

很明显,最重要的一点是:

USB Accessory,是,相对于USB的Host和USB的Device之外的,独立的概念。

其允许:

即使Android设备不支持USB Host,也可以使用USB Accessory。

 

具体的细节是:

先说正常情况:

比如USB键盘,那么:

之前都是PC端,作为USB的Host,USB键盘插到PC上,USB键盘是USB的Device;

而如今:

对于Android,考虑到,太多的Android的设备(平板,手机)等,不支持USB的Host,在此情况下,仍希望可以外接USB设备

所以:

Android的设计中,就加入了个Accessory,

其把之前的USB的Host和Device互换了:

Android设备是USB的Device;

插入到Android设备上的USB键盘,却作为USB的Host;

此时,Android设备,对于外挂的USB的设备来说,概念上,就是所谓的附件Accessory了。

 

但是此处:

由于外接的USB设备,作为USB的Host,所以其要负责:

给Android设备供电,负责USB的Host的其他事情(管理USB的bus总线)

 

所以:

我此处给的例子,把USB键盘直接挂到Android设备中,应该是不恰当的了。

估计只有其他的,USB接口的,查到Android设备中,可以给Android设备供电(而不是Android设备给USB设备供电)

才可以的。

 

【总结】

至此,基本算是明白了:

UsbAccessory和UsbDevice的区别

  • UsbDevice:正常的,USB的Host和USB的Device架构中的USB的Device
    • 所以,此时:Android设备是USB的Host,外接的USB设备是USB的Device
      • 此时,Android设备作为USB的Host,要做USB Host该干的事情:
        • 给USB外接设备供电
        • 负责管理USB总线
  • UsbAccessory:和标准的USB的概念相反
    • USB设备是USB的Host
      • 所以,此时USB设备,也要干其作为USB的Host的事情
        • USB设备,要给作为USB的Device的Android设备供电
        • USB设备要负责管理USB总线
    • 而Android设备是USB的Device
      • 此时,从概念上说,相当于把Android设备,当做Accessory附件,挂在USB设备上


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量