概述

安卓系统支持多种 USB 外围设备,提供两种模式来支持实现 USB 外设接入系统:USB 配件模式和 USB 主机模式

在 USB 配件模式下,接入的 USB 设备充当 USB 主机,并为 USB 总线供电。USB 配件产品包括USB转接设备、诊断和音乐设备、读卡器等,遵循 Android 附件通信协议(Android Accessory Communication Protocol)。这种模式使不具备主机功能的 Android 设备具有了与 USB 硬件交互的能力。

在 USB 主机模式下,Android 设备扮演主机的角色。这种设备的例子包括键鼠、U盘和游戏手柄等。

下图展示了两种模式的异同。当 Android 设备处于主机模式时,它扮演 USB 主机的角色并为总线供电。当 Android 设备处于配件模式时,连接的 USB 外设扮演主机角色并给安卓设备供电。本博客主要介绍安卓设备通过USB扩展串口的应用场景。

安卓设备工作在主机模式

使用安卓免驱USB设备库

USB 主机模式仅在 Android 3.1 及其更高版本的系统中被支持。与 USB 相关的 API 都被保存在 android.hardware.usb 包中,开发者可以直接使用包中的类和方法直接与 USB 设备通讯。

通常情况下,开发者需要通过 UsbManager 实例去获取所需的 UsbDevice 实例,进而从 UsbDevice 实例中查找合适的 UsbInterface,并确定要用于通信的 UsbEndpoint,最后建立 UsbDeviceConnection 与 USB 设备的通信。

针对 USB 转串口芯片厂家一般都会提供配套的应用库和开发资料,工程师使用时无需了解 USB 协议,仅关注串口相关的配置和数据通讯即可。以 CH340/CH341 为例,可参考如下博客:《CH340/CH341安卓应用开发指南》。若客户的产品面向的是使用安卓手机的客户,则建议使用此种方式来,优点在于无需 root 权限和移植设备驱动,用户仅需要安装 APP 软件即可。

使用USB转串口Linux设备驱动

区别于以上方式,当使用 USB 转串口 Linux 设备驱动来访问其生成的虚拟串口时,对串口的操作和 Linux 系统下的操作没有差别,此种方式的适用于面向安卓平板或定制设备的客户,系统需要 root 权限来访问 ttyUSB 设备(也可以厂家修改系统中关于设备的权限)。关于 Linux 系统操作 USB 转串口设备和访问串口可以参考博客:《CH341/CH340Linux驱动使用教程》《Linux串口编程》

安卓设备工作在配件模式

USB 配件模式允许 Android 设备以配件形式连接到 USB 主机上,其必须遵循 Android AOA 协议。与 USB 相关的 API 都被保存在 android.hardware.usb 及 accessory 包中,开发者可以直接使用包中的类和方法直接与 USB 主机通讯。

采用支持配件模式的 USB 转串口产品的优势在于可以实现 USB 产品边充电边通讯的功能,且支持的安卓设备要比 USB 主机方式应用下更广泛。(因部分安卓设备厂商会关闭OTG功能)应用也无需移植设备驱动,仅需要设备上安装免驱的 APP 软件即可。可参考方案《USB Android AOA转接方案》

以上就是安卓系统访问 USB 转串口的设备的常用方式了,有问题欢迎大家随时交流~

最新文章

  1. flex实验总结
  2. android内部培训视频_第三节 常用控件(Button,TextView,EditText,AutocompleteTextView)
  3. Css-深入学习之弧形切角矩形
  4. 构建高可用集群Keepalived+Haproxy负载均衡
  5. Js变量定义——fn里 var与不var的区别
  6. python 杨辉三角
  7. 其他主流开源硬件简介BeagleBone Black快速入门
  8. jstl表达式使用方法
  9. 蜗牛爱课 - iOS7、8模态半透明弹出框
  10. 用户界面线程AfxBeginThread的使用
  11. js如何获取样式?
  12. Akka(39): Http:File streaming-文件交换
  13. git 使用方式
  14. 陪你解读Spring Batch(二)带你入手Spring Batch
  15. C#-委托delegate
  16. Linux下挂载iso文件和配置yum本地源
  17. ASP.NET Core 微服务初探[2]:熔断降级之Polly
  18. REST风格接口测试利器Wisdom rest-client
  19. charAt和String的用法
  20. tensorRT使用python进行网络定义

热门文章

  1. OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL
  2. 3┃音视频直播系统之浏览器中通过 WebRTC 直播视频实时录制回放下载
  3. 归约与分组 - 读《Java 8实战》
  4. JetBrains IDE全新UI预览版来了,要做简洁与强大兼顾的IDE
  5. MySQL - 锁的分类
  6. Caller 服务调用 - Dapr
  7. call apply bind的作用及区别? 应用场景?
  8. Django-使用nginx部署
  9. Mac安装Brew包管理系统
  10. SAP Smart Form 无法通过程序自定义默认打印机问题解决