本帖最后由 WCH@TECH39 于 2021-10-3 22:43 编辑
概述
安卓系统支持多种 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 转串口的设备的常用方式了,有问题欢迎大家随时交流~
|