张佳进,陈立畅,唐爱云
(1.云南农业大学基础与信息工程学院,昆明650201;2.云南农业大学工程技术学院;3.云南省招标采购局)
目前,移动市场已经急剧地改变了IT 行业的格局,市场正在向智能手机和平板电脑等移动计算设备倾斜。因此,很多传统的PC软件的开发也正在迅速地向移动平台迁移,Android智能手机和平板电脑移动设备逐步成为重要的计算应用平台。
由于考虑系统硬件体积、功耗、成本等因素,除了常用的USB接口外,基于Android的智能手机或平板电脑往往缺乏硬件拓展接口,这某种程度上限制了这些智能移动设备与物理世界的信息交互能力,例如外界传感器数据的获取,外部执行装置的控制和在车载系统、POS机、智能医疗保健仪器设备中的应用等[1-2]。
FT311D接口芯片能为Android手机或平板电脑提供USB转外部UART、GPIO、PWM、I2C、SPI等硬件接口,无需安装USB驱动,全面兼容USB2.0接口,不需要软件移植,不受Android操作系统升级的影响,只需安装对应的APK 就能实现数据通信,这有利于解决Android移动设备硬件接口的扩展难题[3]。
本文介绍了基于FT311D 的Android 移动设备的USB转外围硬件接口拓展方案,主要内容包括FT311D的硬件特点及其在Android平台下的软件开发方法。
FT311D芯片是由美国FTDI公司研制生产的面向Android移动设备的USB 转外部硬件接口解决方案。FT311D 芯片直接集成了USB 通信协议栈,它分别支持USB转UART、GPIO、PWM、I2C、SPI。FT311D 芯片系统功能如图1所示[4]。
图1 FT311D芯片系统功能示意图
当FT311D的外围接口配置为UART 串口模式时,该接口作为具有流控制的基本异步串行UART 端口使用。FT311D 的UART 支持的波特率为300~921 600 baud。其I2C总线主控端接口可以连接到支持125kbps的I2C总线从控端接口。另外通用接口GPIO 可以配置为提供多路脉冲宽度调制(PWM)输出信号,这些输出可用于控制电机、制动器、传感器、DC/DC转换器或AC/DC电源的PWM 信号以及玩具、照明应用、家用电器和工业设备等。
图2为FT311D芯片引脚定义,FT311D 系统原理框图如图3所示,主要引脚的功能略——编者注。
FT311D 分别支持UART、GPIO、PWM、I2C、SPI硬件接口,具体接口类型由CNFG2、CNFG1和CNFG0引脚决定。接口的类型定义及其对应引脚略——编者注。
图2 FT311D芯片引脚定义
图3 FT311D系统功能框图
基于Android开发平台的软件开发,FT311D 硬件接口应用程序主要包括两部分,即用户层User Layer和接口层Layer,详见图4。
图4 FT311D硬件接口驱动程序框架
用户层面向高层应用程序开发,程序员不需要过多考虑Android设备与FT311D接口芯片通信的具体细节,只需要借助相应的用户函数即可实现USB转GPIO/UART/I2C/SPI/PWM 接口的驱动程序设计。而接口层则具体来执行用户层提供的API函数功能,实现FT311D 与Android系统间的USB通信功能,涉及具体的通信协议和数据包格式等。FTDI公司提供了用户层和接口层的Java类文件,可以很方便地编译到用户的应用程序中[5]。
接下来主要介绍FT311D作为UART 串行通信接口时的驱动程序开发方法。在实际开发应用中,基于Android手机开发环境,FT311D硬件串口驱动软件开发的着力点是UART Layer的API函数的正确使用。与图4类似,图5是UART 串行通信驱动程序框图。图6为基于FT311D串行口,Android平板电脑与桌面PC串行通信实验实物图。
图5 UART串行通信驱动程序框图
图6 Android平板电脑与桌面PC串行通信实验
FT311-UART Layer 提供了UART 接口类的用户API函数。
3.1.1 SetConfig函数
函数SetConfig(int baudRate,byte dataBits,byte stopBits,byte parity,byte flowControl)的功能是设置串行通信帧格式包括通信波特率、停止位、校验位等,在使用串口前,必须先使用该函数来进行正确的设置。
baudRate波特率:最小是300,最大值是921 600,默认值是9 600。
dataBits数据位:7位或8位。
stopBits停止位:1或2位。
Parity校验位:0代表没有校验;1为奇校验;2为偶校验。
flowControl流控:0为没有,1代表有流控。
3.1.2 SendData函数功能
SendData(byte numBytes,char[]buffer)向FT311D UART 串行口发送数据。其中numBytes是发送的字节数,最大值是256;buffer是所发送数据的地址指针。
3.1.3 ReadData函数功能
ReadData(byte numBytes,byte[]buffer,byte[]actualNumBytes)从FT311D UART 串行口读取数据。
numBytes是接收的字节数;buffer是所发送数据的地址指针;actualNumBytes是实际接收到的数据个数。
基于上述API函数,示例代码主要包括FT311D串行口配置、数据发送与接收。
上述示例显示,基于FT311D接口芯片,面向Android移动设备的USB转外部UART、GPIO、PWM、I2C、SPI接口功能方案,具有硬件连接简单、软件开发方便易行的特点。
FT311D芯片通过USB转多种物理接口的方式拓展Android移动设备的应用领域,进一步增强Android移动系统与外部物理世界的信息交互能力。同时FT311D 硬件成本较低,开发方便,无需安装USB 驱动,全面兼容USB2.0接口,不需要进行软件移植,同时不受Android操作系统升级的影响,因此以FT311D 为核心的Android移动系统硬件接口拓展解决方案是值得推广应用的。
编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。
[1]Z Wang,A Stavrou.Exploiting smart-phone usb connectivity for fun and profit[C]//Proceedings of the Annual Computer Security and Applications Conference(ACSAC),2010.
[2]Cheng-Min Lin,Kuo-Chen Lang,Yi-Lun Chu,et al.An Implementation for Connecting Android Powered Device to External World[C]//The 2nd International Conference on Innovations in Bio-inspired Computing and Applications,2011:303-305.
[3]FT311D[EB/OL].[2013-09].http://www.ftdichip.com/Products/ICs/FT311D.html.
[4]FT311D Datasheet[EB/OL].[2013-09].http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT311D.pdf.
[5]L C Png.A fully integrated audio,video,and data VLC transceiver system for smartphones and tablets[C]//IEEE International Symposium on Consumer Electronics(ISCE 2013),2013:249-251.