前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

作者头像
全栈程序员站长
发布于 2022-07-05 11:00:59
发布于 2022-07-05 11:00:59
12.1K01
代码可运行
举报
运行总次数:1
代码可运行

大家好,又见面了,我是你们的朋友全栈君。


目录


针对手机与外部设备通信,仅有USB与音频接口可以使用,而由于iOS手机不支持OTG功能。因此,本文主要对Android手机通过USB接口与外设通信进行介绍。音频接口部分可参考文档http://blog.csdn.net/howiexue/article/details/79145048 。


0背景

– 随着移动互联网技术的迅猛发展,两大主流智能移动设备iOS 和Android占据了绝对的市场,除了基本的通话、娱乐功能之外,这些移动设备已经成为新时代中重要的信息终端设备节点。 – 通用串行总线(USB)目前已经成为了最标准的接口,用于提供系统一个可靠且低成本的数字连接,目前在使用方面已经超越了电脑的范畴,并已广泛应用在工业、医疗、消费电子、通信网络等等。 – RS232接口长期广泛存在于在各种应用领域,随着安卓手机平板的大量上市,安卓系统下通过USB转RS232接口接入外设的应用需求也开始变得强烈起来。

市面上现有的手机USB接口与外设通信实例:

图1 手机U盘

图2 手机USB摄像头


1.手机USB接口通信特点

1.1 使用方便

即插即用,可热插拔,具有自动配置能力,用户只要简单地将外设插人到手机就能自动识别和配置uSB设备。

1.2 通用性强

目前安卓手机、平板都具备USB接口,连 接灵活,易扩展。

1.3 速度快

  • USB2.0 :理论速度是每秒480Mbps(约每秒60MB)
  • USB3.0 :理论速度能够达到每秒5Gbps(约为每秒625MB)

1.4 可采用总线供电

USB2.0总线提供最大达5v电压、500mA电流,USB3.0 可达1A。大部分USB外设无需单独的供电系统。

由于 USB 的诸多特点,在PC的外围设备中,取代了大部分传统的接口。但在智能仪器仪表中,还大量地使用RS一232C接口。随着智能仪器仪表控制系统的日益复杂,数据采集量的增大,迫切需要寻求一种更高速、安全、方便的通信形式。USB接口的特点,恰好满足这种应用要求,USB产品进人智能仪器仪表和工业控制领域将是必然的。


2. 手机USB接口通信原理

USB通讯协议十分复杂,这里不赘述,只简要介绍基本知识。

2.1 常见手机USB接口

图3 常用USB接口图 如上图,包括常见的Standard Type-A、Type-B、Micro等接口 其中Micro USB接口是USB 2.0标准的一个便携版本,支持OTG,目前除苹果公司产品之外,先进市面上几乎所有的移动设备都采用了Micro-USB接口。

图4 Micro USB接口图

图5 各USB 版本传输速率与输出电流对比

2.2 USB通信过程

图5 USB通信过程 一般的USB主机和设备之间遵循主从通信的原理,每一次的数据传输都是又主机发起。如果主机要输出数据,则先发一个握手包,通知设备。然后发送数据,设备接收到数据后,再发送一个确认包。如果主机要输入数据,也是先发一个握手包,通知设备。设备然后将准备好的数据发送给主机。主机再给设备一个确认包。

2.3 体系架构

从物理结构上,USB系统是一个星形结构。其包含三类硬件设备: USB主机(USB HOST)、 USB设备(USB DEVICE)和USB集线器(USB HUB)。 USB总线上的物理连接是一个分层的星形拓扑,处于每个星形拓扑中央的是HUB集线器,在主机与HUB之间,HUB与HUB之间,HUB与设备之间都是点对点的连接。

图6 USB整体架构

USB HOST对USB系统进行管理、每毫秒产生一帧数据、发送配置请求对USB设备进行配置、管理和恢复总线上的错误。 USB HUB用于设备扩展连接,所有USB DEVICE都连接在USB HUB的端口上。 USB DEVICE接收USB总线上的所有数据包,通过数据包的地址域来判断是不是发给自己的数据包:若地址不符,则简单地丢弃该数据包;若地址相符,则通过响应USB HOST的数据包与USB HOST进行数据传输。

从逻辑结构上看,每个USB逻辑设备都直接与USB HOST进行数据传输。与传统接口以硬件手段实现握手的方法不同,USB接口使用“软握手”方法。

USB的软握手机制是透过三个层次的驱动程序实现的,在这中间起到关键作用的是设备驱动程序,该程序在主机与设备之间建立起至少一个管道。管道有两种类型:流管道和消息管道。其中有一个最重要的消息管道是“缺省控制管道”,这个管道在设备一加电的时候就存在了,它提供设备的配置和状态等信息。主机与设备之间的联络就是通过消息管道实现的。

2.4软件层次

图7 USB软件结构

USB协议栈驱动程序的主要作用是将设备与相应的设备驱动程序连接起来。因为USB支持的设备很多,而每个具体的设备都有自己对应的设备驱动程序。对于某一具体设备来说,使用哪个驱动来管理,就要由协议栈驱动程序通过读取设备描述符进行挑选。选择好驱动程序之后,协议栈驱动程序还要给USB设备分配地址。

管道建立起来之后,数据的传输控制则由USB接口驱动程序负责完成了。在这里,主机占有绝对主导权。设备发生事件时通过消息管道报告给主机,主机伺机向设备发送命令,开通流管道,发送或接收数据包。主机与设备之间以数据数据包的形式进行传送,显然这与网络上数据传输的方式相同,是一种异步数据传输模式。


3. 手机USB接口与外设通信方案

3.1 USB(手机)<–>USB(外设)

该方案手机与外设均通过USB口进行通讯。

图8 USB-USB方案结构图 考虑外设主控模块为单片机,因此选用的单片机必须具备驱动USB的能力。之间通讯都是走的标准USB通讯协议。

3.1.1 USB Host简述

USB Host,中文意思是USB主模式,是相对于USB Accessory(USB副模式)来说的。如果Android工作在USB Host模式下,则连接到Android上的USB设备把Android类似的看作是一台主机,例如将鼠标、键盘插入则可以使用键盘、鼠标来操作Android系统。

而USB Accessory模式表示将Android设备类似当作一个USB的键盘、鼠标、U盘插入到电脑主机上一样使用,这两种模式在Android API level-12以上才支持,即Android3.1及更高的版本支持这两种模式。

3.2 USB(手机)<–>UART(外设)

即手机与外设之间利用USB-UART转接器,实现手机与外设的串口通信。 USB-UART转换器是实现USB与RS-232/RS-485/RS-422等串口设备相互通讯的一种协议转换装置(USB协议-串行通信协议)。在通信主机(USB)和RS-232/RS-485/RS-422串口设备之间可以实现数据的双向传输。

图9 USB-UART方案结构图 该方案只需外设单片机进行串口编程,然后利用安卓USB Host编程。串口编程一般单片机开发都已熟悉,这里主要介绍一下USB Host开发。

需要硬件要求:手机必须支持OTG功能。OTG(On The Go)是一种新型的USB,能够在没有电脑的情行下,实现设备间的数据及图像的传送,在手机中加入传感器,同时将运行程序载入开发板中,通过OTG接口与手机相接,能够让手机拥有更强大的功能。

3.2.1 Android手机通过USB接口进行串口通信

Android手机通过USB接口实现串口通信,主要借助外部USB转串口芯片实现。在这里外设是一个UART串口设备,转换芯片已经转换成USB,帮助安卓上层应用屏蔽了串口。但串口参数还是需要上层应用配置。

其步骤一般包括:发现设备->连接设备->数据双向传输->关闭设备。

其中调用原理是基于安卓软件架构,Android SDK并没有在Framework层实现封装关于串口通信的类库,但是Android是基于Linux kernel 2.6上的,所以我们可以像在Linux系统上一样来使用串口。因为Framework层中并没有封装关于串口通信的类库,所以我们需要通过Android NDK来实现打开、读写串口,然后提供接口供Java本地调用。

4.现有解决方案:

4.1 FTDI方案(免驱动)

图10 FTDI整体方案

4.1.1串口设备 <–>FT312X主(Host)<–> 安卓从(Slave)

Host 会向安卓供电,无需外接电源。这个方案是利用了谷歌(Google)开放的一个叫Android Open Accessory Mode 的协议而成的,此方案支持安卓3.1以的手机平板,但如果不是原生谷歌的系统有可能是不支持的,一般出现问题是国内一些山寨品牌。

  1. /com.android.future.usb.accessory.jar
  2. /android.hardware.usb.accessory.xml

如缺少以上其中之一都会导致安卓设备不支持安卓串口。

4.1.2串口设备 <–>FT231X从(Slave)<–> 安卓主(Host)

随着手持式设备的普及,平板电脑、手机和消费电子设备需要搭配可以与USB相连的主端支持变得非常重要。该方案中,FT311D芯片是专为安卓主控端设计,支持Android3.1以上版本,有32脚的QFN或LQFP封装可选。

设备不需要在安卓平台加载任何驱动,但要使用该方案Android手机要支持OTG 功能,并且要具备android.hardware.usb.host.xml

另外,相应的方案需要配合相应软件, 如方案4.1.1需要配合Passion AOA HyperTerminal apk。 方案4.1.2需要配合Android HyperTerminal apk。这两个安卓上的串口调试小助手, 是Passion technologies Limited 开发的免费软件。

4.2 PL2303/CH34X系列方案:

基本原理同FTDI相同,只不过芯片不同。 手机端app是PL2303/Ch34x的生产商公司提供的,有源代码与SDK: http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=230&pcid=41

图11 PL2303整体方案

PL2303 HXD芯片对Android系统要求Android(平板或手机)的OS版本需要在3.2以上。其优点如下:

• 不需要Root权限即可使用 • 不需要重新编译Kernel,免驱动方案 • 利用Android上的USB port供电,或者使用USBHub 以及外设自备电源 ##4.3 开源项目:usb-serial-for-android Github: https://github.com/mik3y/usb-serial-for-android (LGPL licence) 提供了Arduino等其他设备USB串口的安卓端硬件驱动代码,基于Android Host并且Android版本需在3.1版本之上 。 可供参考 ##4.4 其他(待补充,但原理都是基于3.1、3.2)

4.3 开源项目:usb-serial-for-android

Github: https://github.com/mik3y/usb-serial-for-android (LGPL licence) 提供了Arduino等其他设备USB串口的安卓端硬件驱动代码,基于Android Host并且Android版本需在3.1版本之上 。 可供参考


5.针对安卓应用USB-UART芯片比较与选型

  • 1、FT311/312芯片不需要安卓手机和平板支持OTG或USB HOST功能,就能完成USB转RS232的转换功能,兼容性好,必须外接电源,使得在某些应用场景非常不方便。但FT311/312依然是目前已知好用的USB HOST 芯片。
  • 2、FT231,PL2303不需要外接电源,但需要安卓手机和平板支持OTG或USB HOST等限制。由于手机和平板上的安卓系统的多样性,没有确定的标准知道某款手机平板是否支持OTG和USB HOST,且即使手机平板支持OTG功能的情况下,非原生安卓系统仍可能不能完成usb转RS232的功能。所有其兼容性要差一些。
  • 3、在工业应用环境,可考虑使用工业级模块FSTU2232FT。 因此,针对民用设备,综合考虑,较优越的方案为:使用FT311D和PL2303HXD做转换芯片,优点如下:

• FT311D不需要OTG支持,兼容性好,需要外接电源,价格较贵。 • PL2303HXD需要OTG支持,不需要外接电源,有兼容性问题,价格要便宜些。 • 用PL2303的模块还有一附加好处是同时支持安卓和WINDOWS平台,即可用于手机平板,也同时可用于普通的台式和笔记本电脑。


6.案例分析(待完善验证)

  • 1、USB转串口驱动 drivers/usb/serial/pl2303.c drivers/usb/serial/pl2303.h 驱动加载成功则当插入外设时会生成/dev/ttyUSB*设备节点,
  • 2、上层App应用,即读写串口,波特率设置等 源码下载http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=230&pcid=41 示意图:

7. 开发需要考虑的几点

  • 1、OTG支持问题:近年新出的绝大部分手机已支持OTG,一般Android系统版本在4.0以上也都会支持,但手机品牌、型号太多,一些低端手机和国产山寨机可能不支持该功能。
  • 2、不同手机厂商可能对USB协议栈进行了裁剪,对开发人员会有限制。
  • 3、USB供电问题、设备兼容性等问题
  • 4、如使用USB-UART方案,要考虑转换芯片的统一、效率等问题,都需验证
  • 5、目前在安卓系统下的串口终端程序,大多是由IC厂家免费提供,功能偏简单,不能发送中文,不能保存通信内容到文件。

8. 参考资料

[1] 赵春亭, 左小五. 基于Android系统的USB转串口的研究[J]. 工业控制计算机, 2014, 27(1):83-84. 参考链接: http://blog.csdn.net/ever_gz/article/details/49669729 https://github.com/mik3y/usb-serial-for-android http://blog.csdn.net/lindonghai/article/details/50717218 http://download.csdn.net/detail/u011130391/6638743 http://gqdy365.iteye.com/blog/2188906 http://blog.csdn.net/tangcheng_ok/article/details/7021470 http://www.jb51.net/article/110827.htm http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=230&pcid=41

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149880.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android USB转串口通信开发基本流程
好久没有写文章了,年前公司新开了一个项目,是和usb转串口通信相关的,需求是用安卓平板通过usb转接后与好几个外设进行通信,一直忙到最近,才慢慢闲下来,趁着这个周末不忙,记录下usb转串口通信开发的基本流程。 我们开发使用的是usb主机模式,即:安卓平板作为主机,usb外设作为从机进行数据通信。整个开发流程可以总结为以下几点: 1.发现设备 UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
coderZhen
2018/06/28
3.9K0
Android USB口通信开发基本流程,USB传输的4种模式
(1) 控制传输模式,控制传输用于在外设初次连接时对器件进行配置;对外设的状态进行实时检测;对控制命令的传送等;也可以在器件配置完成后被客户软件用于其它目的。Endpoint 0信道只可以采用控制传送的方式。 银行交互设备,密码键盘
zhangjiqun
2024/12/16
5630
Android USB口通信开发基本流程,USB传输的4种模式
USB HOST与 USB OTG的区别及工作原理
在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!! 零 USB背景知识 U
233333
2019/11/04
10.3K0
你不懂的这都有UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE
在单片机开发中,UART、I2C、RS485等普遍在用,对它们的认识可能模棱两可,今天我们就来好好的梳理一下。本文较长,同样干货满满,强烈建议收藏。
单片机技术宅
2021/11/02
6K0
全志V85x开源硬件PCB方案汇总(内附PCB文件获取链接~)
该参赛作品基于全志V853开发板制作的一款类似眼镜外挂的小产品,可以对场景进行辅助识别,并通过云端交互实现物联网控制,进一步实现物联网与人机交互的融合。
阿志小管家
2024/02/02
3620
全志V85x开源硬件PCB方案汇总(内附PCB文件获取链接~)
ANDROID OTG USB通信 读写 信息
github:https://github.com/mik3y/usb-serial-for-android
zhangjiqun
2024/12/16
2890
LDR6500:实现OTG边充电边数据的新利器
随着科技的飞速发展,移动设备已成为我们日常生活中不可或缺的一部分。无论是智能手机、平板电脑还是笔记本电脑,这些设备都以其强大的功能和便携性,赢得了用户的青睐。然而,随着技术的不断进步和设备的日益多样化,如何高效、便捷地连接和使用这些设备成为了一个亟待解决的问题。OTG(USB On-The-Go)技术的出现,为我们提供了一个解决方案,而LDR6500作为乐得瑞科技精心打造的一款USB-C DRP(Dual Role Port,双角色端口)接口USB PD(Power Delivery,功率传输)通信芯片,更是将OTG转接器的性能推向了一个新的高度。
legendary_163
2024/11/23
1310
单路USB转多路串口方案分享
如果需要多个串口时,就要占用多个USB口,再加上鼠标、调试器等,PC提供的USB口就不够用了。
单片机点灯小能手
2020/07/17
4.9K1
单路USB转多路串口方案分享
Android OTG之USB转串口模块通讯
我们公司开发了一款室内机平板APP应用,要求平板能去控制智能门锁、等其他智能设备,智能门锁不是我们公司开发的,与我们公司属于合作关系。
程序员飞飞
2020/02/27
3.4K0
Android OTG之USB转串口模块通讯
I2C接口与SPI和UART接口的区别
1、同步通信>异步通信; 2、同步通信时必须有一根时钟线连接传输的两端; 3、都是串行通信方式,并行通信用于内部存储间的通信,如flash; 4、适合传输的距离和通信速率成反比关系;
怪兽
2022/10/04
2.5K0
【嵌入式】搞懂外设接口:外设接口的分类、特点及最佳实践
外设接口(Peripheral Interfaces)可以根据不同的标准进行分类,包括数据传输方式、用途、通信距离等。以下是详细的分类依据和各分类中的具体接口类型:
LuckiBit
2024/12/11
5860
CP210x芯片(串口转USB接口)随记
说了也神奇,我自从玩TT小飞机开始就有个愿望,就是替换掉官方自带的扩展件换个MCU,比如一个ESP8266,STM8上去。为此我也做过很多的探索:
云深无际
2021/09/14
3K0
CP210x芯片(串口转USB接口)随记
工控板方案中,哪些功能可以通过USB扩展出来?
作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!
武汉万象奥科
2024/12/03
1500
工控板方案中,哪些功能可以通过USB扩展出来?
UART介绍「建议收藏」
UART, Universal Asynchronous Receiver-Transmitter, 通用异步收发器;
全栈程序员站长
2022/10/05
2.1K0
UART介绍「建议收藏」
第4章_USB 设备编程
USB 本身是一个很庞大、复杂的体系, 本课程的重点在于工业互联, USB 是其中的一个 小小知识点。本章课程的目的在于:能理解 USB 的一些概念,能使用 USB 传输数据。 4.2~4.5 节, 介绍 USB 概念;4.6~4.7 节,移植 USBX 实现 USB 串口功能。
韦东山
2024/06/29
3700
第4章_USB 设备编程
基于 FPGA 的 UART 控制器设计(VHDL)(上)
今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(上),由于篇幅较长,分三篇。今天带来第一篇,上篇,计算机接口技术简介RS-232 串口通信简介。话不多说,上货。
FPGA技术江湖
2020/12/30
1.2K0
rs232c高电平脉冲对应的ttl逻辑是(单片机串口是什么电平)
串口通讯 (Serial Communication)是一种设备间非常常用的串行通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。 通讯协议,我们以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
全栈程序员站长
2022/08/01
5910
rs232c高电平脉冲对应的ttl逻辑是(单片机串口是什么电平)
无人机wifi图传模块(手机远程控制)
首先你得会用APM或Pixhawk飞控、电机、电调、舵机、GPS、电池 装好一台多旋翼或固定翼无人机、或无人车/船,不会装的话就去百度,这个不在本贴的介绍范围。 至于图传、数传电台、增程设备、OSD这些 就不需要了,后面的方案就是 可以替代这些功能的。
全栈程序员站长
2022/08/01
4.6K1
无人机wifi图传模块(手机远程控制)
了解USB接口的类型与特点
在当今数字时代,无论是连接电脑、手机、平板还是其他各种外设,USB接口都发挥着重要作用,但USB接口类型和外观多样,导致出现很多错误叫法,像什么“华为口”、“安卓口”等,实际上每一款USB接口及其变体都有名称,每种类型也都具有其独特的特点和用途。
M.Talen
2024/05/22
7990
了解USB接口的类型与特点
认识UART接口[通俗易懂]
—————————————————————————————————————————-
全栈程序员站长
2022/10/05
4.9K0
认识UART接口[通俗易懂]
相关推荐
Android USB转串口通信开发基本流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验