基于Linux的FTDI Android界面解决方案

描述

到了90年代末,一种新的连接方案旨在为连接计算设备创建一个标准。该标准是通用串行总线(USB)。顾名思义,USB已经成为计算设备中事实上的标准。 USB规范定义了严格的主机到外设的安排。它还允许多个外围设备通过一个或多个集线器连接到给定的USB主机。在所有情况下,主机PC最终控制所有外围设备。外围设备采用多种形式,如数码相机,生物识别设备,传感器和打印机。使用所有这些外设,USB的控制权留给主机PC。 2007年,谷歌与开放手机联盟一起公开推出了Android操作系统,这是一个基于Linux的操作系统。大约一年后,推出了第一款带有运行操作系统的ARM CPU的商用手机。该平台在过去几年中不断发展,现已成为移动电话,平板电脑和众多其他嵌入式应用程序的一部分,如图1所示。

图1:应用示例

FTDI提供以下三种不同的选项,通过USB连接到Android平台。

在Android平台上使用Android开放附件模式

利用Android的USB主机功能和FTDI的Android Java驱动程序

利用Android的USB主机功能和FTDI的传统驱动程序

这些选项中的每一个都包含优点和缺点,在决定使用哪个接口选项时需要考虑三个主要因素。 Android平台是否支持USB主机或设备? Android平台或外围设备是否会提供USB电源?该平台使用的是哪个版本的Android?

要考虑的第一个界面因素是Android平台是否支持USB主机。 Android智能手机始终提供USB设备端口,但有些Android平板电脑同时提供USB主机和USB设备端口,如图2所示.USB设备端口用于连接PC或嵌入式主机,以实现数据传输和电池充电。 USB主机端口用于连接USB外围设备硬件。

图2:USB主机和USB设备

许多Android平台如图3所示,现在提供On-The-Go(OTG)USB端口,允许USB端口为主机或设备。其中一些OTG端口仅为USB设备,有些将提供USB主机和设备功能。确定用户的Android平台是否支持USB主机和/或设备的一种方法是使用电缆类型。 Micro-AB电缆可能同时是USB主机和设备,而Micro-B电缆仅指示USB设备。

图3:USB On-The-Go

确定使用哪个接口选项的另一个因素是决定Android平台或外围设备是否提供USB电源。根据USB规范,USB主机需要为下游外设提供电源。重要的是要记住,即使Android平台可能提供USB主机支持,大多数Android设备都是便携式的,需要电池供电才能运行。利用Android平台上的USB客户端端口,无需Android平台提供电源以及复杂的USB主机连接和软件堆栈。这样可以减少Android平台上的电池尺寸和成本。 Android平台操作系统版本也在确定使用哪个界面选项时起作用,因为Android Open Accessories需要操作系统版本3.1以及Java驱动程序界面选项需要Android操作系统版本3.2以后。

一旦界面因素是确定后,可以使用三种界面选项之一。第一个界面选项是使用Android开放附件(AOA)模式(图4)。

Linux

图4:Android开放附件(AOA)模式

谷歌于2011年5月推出AOA,以解决想要使用USB设备端口从Android平台控制更简单的外围设备的困境。 AOA允许外围设备使用USB嵌入式主机作为Android平台的接口。在物理层并通过建立USB连接(又名Enumeration),可以实现传统的主机 - 外设连接。电力安排也得以维持。外围平台可以为Android设备提供完整的500 mA电流。可以将两个实体(Android主机和AOA外设)视为交换逻辑功能。 Android平台(USB设备)现在通过已安装的应用程序(APK)控制外围设备(USB主机)。使用AOA的唯一要求是Android平台正在运行操作系统版本3.1。

使用AOA连接外围设备的一个关键优势是许多Android平台只能充当USB设备而不是一个USB主机。 AOA利用所有Android平台拥有的Android的USB设备端口克服了这一局限。由于Android充当USB设备,因此无需提供电源即可节省电池尺寸(图5)。没有必要开发特殊的驱动程序来加载Android平台,也不需要Android平台的生根。此外,复杂的USB主机连接和软件堆栈不是Android平台的责任。

Linux

图5:使用AOA的好处

要在开放附件模式下连接到Android平台,平台必须首先支持该模式。从操作系统版本3.1开始也是如此,但如果用户已将该功能重新移植到此操作系统版本,则可能在早于2.3.4的操作系统版本上也可用。当Open Accessory设备连接到Android时,它必须向Android发送供应商请求以询问设备是否支持开放附件模式。

下面的图6显示了此Get_Protocol命令的示例。如果答复为否,通讯将在此处停止。如果答复为是,则外围设备发送其自己的唯一描述符字符串以标识自身。然后有另一个USB供应商请求启用开放附件模式并在此配置中重新枚举Android设备。当枚举为开放附件模式设备时,将有一个USB BULK IN端点和一个USB BULK OUT端点以及控制端点。该接口将是全速(12 Mbit/s)USB,允许数据传入和传出。

Linux

图6:Get_Protocol命令

为了利用Android Open Accessories,FTDI发布了FT311D。这是一款硬编码的USB Android主机IC,专用于访问Android平台上的AOA模式。该IC允许设计人员通过Android USB设备端口将其外围硬件上的接口桥接到Android平板电脑或智能手机平台。 FT311D将枚举Android平台,并通过客户的Android平台及其外围硬件之间的GPIO,UART,PWM,I 2 C Master,SPI Slave或SPI Master提供接口。只需在FT311D模式选择引脚上选择带上拉/下拉电阻的接口模式,然后插入Android(3.1或更高版本)平台,通过Androids的开放附件模式通过USB访问外围硬件。

FT311D系统允许提供商增强与移动生态系统的连接,能够创建利用Android平台资源的应用程序,如高性能处理,加速度计和触摸屏界面。

FT311D功能包括:接口通过三个模式选择引脚配置; Rx,Tx,RTS,CTS的基本UART功能,Tx有效;四个PWM通道;主机堆栈,类驱动程序,Open Accessory驱动程序和IP桥接功能; 3.3 V单电源,具有5 V容差I/O; 32引脚LQFP或QFN封装;延伸温度范围为-40 o C至+85 o C.此外,还提供广泛的FT311D开发支持,包括开发硬件,应用程序,白皮书和数据表。

UMFT311EV是FT311D的开发模块。该模块允许选择每个FT311D接口:GPIO,UART,PWM,I 2 C主机,SPI从机或SPI主机。该模块提供带有电源开关的USB A型连接器,用于控制USB端口的5 V电源。 UMFT311GP是一个带八个按钮和八个LED的PCB。它可以插入FT311D开发板以测试GPIO操作。该模块还有一个可接受5 VDC的电源插座,通过板载3.3 V稳压器和连接的Android设备为FT311D供电

另一种使用Android Open Accessory模式的FTDI解决方案是FTDI的Vinculum- II(VNC2)系列IC和模块。这是一个单芯片嵌入式主机,可以编程为包含AOA支持。除了FT311D IC提供的接口外,Vinculum-II还包括第二个USB端口,可配置为USB主机或USB设备。通过为主机配置的Vinculum-II的第二个USB端口,可以为传统的USB外设添加USB支持,例如已经使用FTDI外设IC或连接为HID外设的条形码扫描器。

Vinculum-II是基于FTDI USB体验和客户要求的第二代产品。它具有定制设计的CPU,与FTDI的第一代USB主机控制器Vinculum-I相比具有更高的处理能力。凭借提供完整解决方案的FTDI竞争优势,Vinculum-II通过降低设备成本,增强了Vinculum系列的初始成员Vinculum-I。 Vinculum-II支持全速和低速控制,批量,等时和中断模式数据传输。此外,IC支持三种电源模式,一种是挂起模式,有六种不同的封装。 FTDI的IDE设计工具免费提供给想要创建自己的固件的开发人员。

与FTDI的Vinculum-I IC一样,预编译固件可用于快速简便的开发。 IDE和预编译固件可从http://www.ftdichip.com/Products/ICs/VNC2.htm获得。

Vinculum-II也可以使用开发平台和模块。 V2-Eval板是一个完整的评估模块,可提供原型设计区域。 V2DIP模块结构紧凑,易于集成,并包含USB连接器。 Vinco开发平台与Arduino屏蔽兼容。

第二个FTDI接口是FTDI的Java D2xx驱动程序,支持USB主机类库。此界面要求Android平台支持USB主机并运行OS 3.2版。 Java驱动程序支持FTDI的全套USB桥接从芯片,包括R芯片(232R/245R),H系列(USB2.0高速)和X芯片系列。当其中一个USB设备端口配置为FT232仿真时,也支持Vinculum-II。此库不需要特殊的root访问权限来加载驱动程序,开发人员可以轻松地将其调整到应用程序中。

API打包在d2xx.jar中,并与在线提供的演示应用程序源代码一起分发,网址为http://www.ftdichip.com/Android.htm。使用此接口选项,Android平台负责提供USB电源。

使用FTDI的JAVA类驱动程序的主要好处是安装驱动程序不需要在Android平台上使用root权限。因此,可以在Google Play商店中提供应用程序和驱动程序。 Android平台不是通过使用FTDI的Java驱动程序来要求FTDI的基于USB主机的芯片(FT311D和Vinculum-II),而是可以与FTDI更广泛的现有“桥接”芯片集成。

使用FTDI Java D2XX for Android驱动程序,开发机器需要Eclipse IDE和最新的Android SDK,包括ADB程序和Eclipse的ADT插件。 Android开发人员网站上概述了这些工具的安装和配置。请参阅(http://developer.android.com/sdk/index.html)。 Android设备还应启用USB调试以允许使用ADB实用程序进行访问。要在Android平台上完成此操作,请导航到设置>应用程序>开发,然后选择USB调试选项。

Linux

图7:使用FTDI开发应用程序Java D2xx驱动程序

为支持多功能平板电脑使用方案,Google自3.2版开始在Android中添加了USB Host API。在3.2版之前,Android应用程序无法在没有root访问权限的情况下自然访问连接到系统的USB设备。 Android USB Host API消除了这一限制,允许使用附加到Android主机或OTG端口的USB小工具。

FTDI提供适应应用程序的Java类库,因此开发人员可以专注于所需的输入和输出数据。类库的设计目标是提供对所有D2XX功能的访问,包括EEPROM功能。 D2xx库可以轻松地包含在Eclipse中的Android应用程序项目中。为此,首先将库文件(d2xx.jar)复制到项目的文件夹中,然后转到“项目” - “属性”添加它。

Linux

图8:添加Java D2xx库步骤1

接下来,从左侧列表中选择“Java Build Path”。然后,选择“Libraries”选项卡并单击“Add JARs ...”按钮(图9)。

图9:添加Java D2xx库步骤2

选择库文件“d2xx.jarr”。 D2xxManager类允许访问驱动程序范围的信息(如VID和PID组合)以匹配设备信息列表,并提供API以打开返回相应FT_Device对象的目标设备。 FT_Device对象可以执行UART,EEPROM和位模式相关操作,以控制器件状态或读/写数据。当不再需要该设备时,可以使用close()方法关闭FT_Device对象。使用Javadoc完整记录了D2xx Java库。有关D2xx Android库方法,常量和子类的信息,请参见示例项目的/doc目录中相应的Javadoc条目。

Linux

图10:添加Java D2xx库步骤3

FTDI的Java D2xx驱动程序可与FTDI的USB转串口桥接芯片一起使用,包括X芯片系列。 X芯片器件具有低功耗,低引脚数和功能集,可实现从USB端口桥接到UART,I 2 C,增强型SPI或FIFO接口,易于设计和实现。

主要功能包括:

电池充电器检测可实现更高电流和更快速充电

广泛的时钟功能,包括内部时钟生成和外部时钟输出

内部3.3 V稳压器

集成晶体和多时间可编程(MTP)存储器,以节省电路板空间并最大限度地提高灵活性

FTDI Java驱动程序还可以与FTDI的传统芯片一起使用,例如FTDI的FT2232D和R芯片系列。此外,还可以使用FTDI的USB Hi-Speed单通道,双通道和四通道芯片。这将为各种行业标准或并行接口提供USB。列出的所有IC都附带可用的开发模块。

除支持FTDI的IC和模块外,FTDI的Java D2xx驱动程序还可以与任何FTDI的Instant USB全速到串行电缆连接。这些包括USB转RS232,RS422,RS485和TTL电平UART电缆。所有这些都可用于大量配置,包括电源输出,电线长度和串行端接。

FTDI的高速USB转数字电缆也可用于与Java D2xx驱动程序一起使用。

由于Vinculum-II有两个可以为主机或设备独立配置的USB端口,因此可以将两个接口选项1和2通过单个芯片。 USB主机端口提供AOA支持。 Java D2xx可通过USB设备端口上的FT232仿真获得。此解决方案现在支持所有Android设备,无论USB端口类型或电源配置如何。 USB设备端口上的接口可以支持传统的PC环境,进一步增强了外设的实用性。

第三个集成选项是使用FTDI的传统驱动程序。 FTDI的VCP驱动程序提供虚拟COM端口,标准D2xx驱动程序通过DLL提供对USB设备的直接访问。这两个驱动程序是互斥的,不能同时使用。与Java D2xx驱动程序选项一样,Android平台必须具有USB主机,提供USB电源,并将与FTDI现有的桥接芯片,模块和电缆配合使用。与Java D2xx驱动程序选项不同,Android平台必须“root”才能安装VCP和传统D2xx驱动程序。虽然适用于所有Android版本,但仅在3.2版之前的Android平台操作系统中建议使用旧版驱动程序。当前的Android平台操作系统版本建议使用接口选项1,选项2,AOA和Java驱动程序。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分