《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于AOA協(xié)議實(shí)現(xiàn)Android設(shè)備的USB通信
基于AOA協(xié)議實(shí)現(xiàn)Android設(shè)備的USB通信
來源:電子技術(shù)應(yīng)用2013年第9期
位恒曦,段晉軍,韓曉紅,常曉明
太原理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原030024
摘要: AOA協(xié)議是Google公司推出的用于實(shí)現(xiàn)Android設(shè)備與外圍設(shè)備之間USB通信的協(xié)議。該協(xié)議拓展了Android設(shè)備USB接口的功能,為基于Android系統(tǒng)的智能設(shè)備應(yīng)用于數(shù)據(jù)采集和設(shè)備控制領(lǐng)域提供了條件。介紹了Android系統(tǒng)下USB通信的兩種模式,并給出了USB配件模式下基于AOA協(xié)議實(shí)現(xiàn)Android手機(jī)控制步進(jìn)電機(jī)的實(shí)例。
關(guān)鍵詞: 軟件 Android AOA USB通信
中圖分類號(hào): TP273
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)09-0031-03
Realization of USB communication on Android-powered device based on AOA protocol
Wei Hengxi,Duan Jinjun,Han Xiaohong,Chang Xiaoming
School of Computer Science and Technology,Taiyuan University of Technology,Taiyuan 030024,China
Abstract: AOA protocol, which is launched by Google, is a protocol used for communication between Android-powered devices and peripheral equipments via USB. The protocol expands the function of USB on Android-powered devices and provides a condition for the data acquisition and equipment control system based on Android-powered devices. In this paper, two kinds of Android USB communication model are introduced firstly. And an example about how to realize Android mobile phone controlling stepping motor based on AOA protocol in USB accessory mode is presented.
Key words : Android;AOA;USB communication

    最近業(yè)界的統(tǒng)計(jì)數(shù)據(jù)顯示,智能手機(jī)與自動(dòng)化及機(jī)械系統(tǒng)之間存在著很大的市場(chǎng)潛力。2011年Google推出Android開放配件協(xié)議AOA(Android Open Accessory Protocol)及配件開發(fā)工具包ADK(Accessory Development Kit)提供了Android設(shè)備與Android配件通過USB或藍(lán)牙進(jìn)行通信的API,為基于Android系統(tǒng)的智能設(shè)備控制外設(shè)提供了條件。利用Android,系統(tǒng)可以連接從家用電器到重型機(jī)械、機(jī)器人等多種設(shè)備。

    Android作為一種基于開源Linux的智能手機(jī)操作系統(tǒng),廣泛應(yīng)用于手機(jī)、平板電腦等移動(dòng)設(shè)備中。在各種Android設(shè)備提供的接口中,USB接口是常見接口,該接口的作用是為Android設(shè)備充電并通過PC端的驅(qū)動(dòng)程序?qū)崿F(xiàn)Android設(shè)備與PC的交互。如何拓展Android設(shè)備的USB接口功能是當(dāng)前的研究熱點(diǎn)之一。針對(duì)該問題,本文介紹了一種基于AOA協(xié)議實(shí)現(xiàn)Android設(shè)備USB通信的方案,并通過Android手機(jī)控制步進(jìn)電機(jī)的案例給出了方案的實(shí)現(xiàn)方法。
1 Android USB通信模式
    Android系統(tǒng)支持多種USB外圍設(shè)備。根據(jù)Android設(shè)備在USB通信中充當(dāng)?shù)慕巧?,可以將Android USB通信分為主機(jī)模式(Host Mode)和配件模式(Accessory Mode)[1]兩種模式。
1.1 主機(jī)模式
    主機(jī)模式是指Android設(shè)備充當(dāng)USB主機(jī)并為總線供電。此模式下,Android設(shè)備需支持USB主機(jī)功能或OTG功能,此時(shí)Android設(shè)備的USB主機(jī)稱為USB嵌入式主機(jī)EH(Embedded Host)[2]。與PC上的USB主機(jī)相比,EH設(shè)備可能無法為連接到其總線上的未識(shí)別外圍設(shè)備加載驅(qū)動(dòng)程序,因此它們對(duì)其目標(biāo)外圍設(shè)備列表TPL(Target Peripheral List)進(jìn)行了定義[3]。這些外圍USB設(shè)備大部分為HID設(shè)備(Human Interface Device)、BOMS設(shè)備(Bulk Only Mass Storage,如U盤)和CDC設(shè)備(Comm-
unication Device Class,USB通信設(shè)備類,如打印機(jī)),其驅(qū)動(dòng)程序已存在于Android平臺(tái)的系統(tǒng)中(Linux Kernel),因此Android設(shè)備可以與其直接通信。
    主機(jī)模式示意圖如圖1所示。
1.2 配件模式
    配件模式是指Android設(shè)備充當(dāng)USB從機(jī),外部設(shè)備充當(dāng)主機(jī)并為總線供電。此模式下,外部USB設(shè)備稱為Android配件。該模式為不具備主機(jī)功能的Android設(shè)備提供與USB設(shè)備交互的能力。Android設(shè)備和Android配件都必須支持AOA協(xié)議。不支持AOA協(xié)議的設(shè)備可以通過Android配件開發(fā)板(ADK板)與Android設(shè)備連接,成為Android設(shè)備的間接配件。
    配件模式示意圖如圖2所示。

    本文介紹的基于AOA協(xié)議的Android設(shè)備USB通信方案即采用配件模式。主機(jī)模式和配件模式在Android 3.1(API level 12)及更高的平臺(tái)中直接支持。配件模式作為一個(gè)附加庫也被Android 2.3.4(API level 10)支持。設(shè)備廠商可以選擇是否在設(shè)備的Linux系統(tǒng)鏡像中包含附加庫。對(duì)主機(jī)和配件模式的支持最終取決于設(shè)備的硬件,而不是Android平臺(tái)的等級(jí)(軟件)。
1.3 Android配件、ADK及AOA協(xié)議
    Android配件是指遵循AOA協(xié)議的硬件,是Android配件模式中的概念。從硬件角度講,Android配件具有實(shí)現(xiàn)USB EH功能和AOA協(xié)議的微處理器以及包括USB接口在內(nèi)的輸入/輸出接口。Android配件必須與Android平臺(tái)一起工作。
    ADK是開發(fā)Android配件的參考開發(fā)包,該開發(fā)包基于Arduino公司的開源電子成型平臺(tái)[4]。ADK開發(fā)包包括Android配件硬件設(shè)計(jì)文檔、Android配件固件源碼、Android設(shè)備程序源碼。
    AOA協(xié)議是Android設(shè)備與Android配件之間進(jìn)行USB通信需遵循的連接協(xié)議,該協(xié)議規(guī)定了Android配件如何檢測(cè)Android設(shè)備并與其建立通信。AOA協(xié)議規(guī)定配件需具備以下4項(xiàng)功能[5]:
    (1)偵聽自身的USB接口,等待與其連接的Android設(shè)備。
    (2)檢測(cè)Android設(shè)備是否支持AOA協(xié)議。
    (3)如果需要,啟動(dòng)Android設(shè)備的USB配件模式。
    (4)與Android設(shè)備建立USB通信。
2 USB配件模式開發(fā)
    Android配件模式開發(fā)需要在Android設(shè)備端和Android配件端分別進(jìn)行開發(fā)。
2.1 Android設(shè)備端開發(fā)
    Android設(shè)備端需進(jìn)行以下兩項(xiàng)工作:
    (1)確保設(shè)備支持AOA協(xié)議。設(shè)備對(duì)AOA協(xié)議是否支持由設(shè)備硬件和Android系統(tǒng)版本決定。
    (2)調(diào)用ADK中的API開發(fā)USB應(yīng)用程序。
    ADK中與USB配件模式相關(guān)的兩個(gè)類是UsbManager和UsbAccessory。UsbManager用于枚舉連接的USB配件并與其通信,UsbAccessory代表Android配件并包含獲取配件描述信息的方法。
    在編寫程序前,需要為Android工程做以下設(shè)置工作[6]:
    (1)配置Android Mainfest文件,聲明使用配件模式,指定最低SDK版本,并設(shè)置配件過濾意圖。
    (2)配置accessory_filter.xml文件。accessory_filter.xml文件用于描述希望Android設(shè)備檢測(cè)的USB配件的描述信息,包含manufacturer、model、version 3個(gè)屬性。在Android配件的固件程序中,同樣包含以上3個(gè)屬性值。根據(jù)AOA協(xié)議,當(dāng)Android配件連接到Android設(shè)備上時(shí),配件會(huì)發(fā)送該屬性值到Android設(shè)備。Android程序?qū)⑽ㄒ豁憫?yīng)與其accessory_filter.xml中指定的屬性值匹配的Android配件。
    Android設(shè)備端程序開發(fā)的流程如下:
    (1)發(fā)現(xiàn)配件并過濾。
    (2)獲取與配件通信的權(quán)限。通過廣播接收器(Broad-castReceiver)的方式以彈出授權(quán)對(duì)話框的形式詢問用戶是否允許與Android配件通信。
    (3)開始與配件通信。創(chuàng)建文件輸入輸出流代表USB批量傳輸端點(diǎn),通過獨(dú)立線程以流傳輸?shù)姆绞綄?shí)現(xiàn)USB通信。
    (4)終止與配件通信。通過廣播接收器偵聽USB配件與Android設(shè)備的斷開操作,當(dāng)事件發(fā)生時(shí),關(guān)閉文件輸入/輸出流。
2.2 Android配件端開發(fā)
    Android配件端需進(jìn)行以下兩項(xiàng)工作:
    (1)根據(jù)ADK中的硬件設(shè)計(jì)文檔設(shè)計(jì)具有USB主控制器的硬件電路,并支持USB協(xié)議。
    (2)將AOA協(xié)議以固件代碼的形式下載至Android配件的主芯片中。
    目前,已有多家公司為Android設(shè)備的配件模式開發(fā)提供專門的ADK板,ADK板將AOA協(xié)議以程序的方式燒寫至芯片中,ADK板也即Android配件。目前常見的ADK板有Arduino的Arduino Mega ADK板、SparkFun的IOIO板,此外還有DIY Drones、Microchip、RT Corp、Seeed Studio、Troido等公司生產(chǎn)的ADK板。采用ADK板將可節(jié)省Android配件端的開發(fā)時(shí)間。
3 系統(tǒng)設(shè)計(jì)
3.1 總體設(shè)計(jì)

    構(gòu)建的系統(tǒng)框圖如圖3所示。

    采用的ADK板是由英國(guó)飛特蒂亞FTDI(Future Technology Devices International Ltd.)公司生產(chǎn)的Android平臺(tái)USB主控模塊(USB Android Host Module)[7],型號(hào)為UMFT311EV,于2012年7月31日推出。UMFT311EV板具有USB主控功能和USB接口橋接功能,其特性如下:
    (1)采用USB Android主控芯片F(xiàn)T311D,單芯片內(nèi)集成USB協(xié)議。
    (2)兼容USB 2.0全速模式(最大傳輸速率12 Mb/s,即1.5 MB/s,最大輸出電流500 mA)。
    (3)6種接口類型,即GPIO(7路)、UART、PWM(4路)、I2C Master、SPI Master、SPI Slave。
    (4)6種接口只能單一工作,通過跳線帽和3個(gè)接口類型選擇引腳選擇接口類型。
    UMFT311EV板支持AOA協(xié)議,作為Android配件無需用戶做配件端的開發(fā),而且為Android設(shè)備端的程序開發(fā)提供Java驅(qū)動(dòng)包。因此采用UMFT311EV板能夠?qū)崿F(xiàn)Android手機(jī)、平板與其他設(shè)備的通信,進(jìn)行設(shè)備控制和數(shù)據(jù)采集,并能與現(xiàn)有系統(tǒng)快速集成,降低開發(fā)難度和開發(fā)時(shí)間。
    在此,以Android手機(jī)小米MI2和步進(jìn)電機(jī)28BYJ48為例,通過UMFT311EV板的4路GPIO口實(shí)現(xiàn)Android手機(jī)USB控制步進(jìn)電機(jī)。
3.2 軟件設(shè)計(jì)
    在設(shè)計(jì)Android手機(jī)端軟件時(shí),采用FTDI公司為Android平臺(tái)提供的驅(qū)動(dòng)包。根據(jù)該驅(qū)動(dòng)包,架構(gòu)如圖4所示的應(yīng)用程序。


    FT311驅(qū)動(dòng)層提供驅(qū)動(dòng)UMFT311EV板上接口的方法和實(shí)現(xiàn)Android應(yīng)用程序與UMFT311EV板USB通信的方法。該層為用戶層提供封裝的方法,為用戶開發(fā)程序屏蔽底層編程細(xì)節(jié)。用戶層通過調(diào)用FT311驅(qū)動(dòng)層的方法實(shí)現(xiàn)對(duì)UMFT311EV板上接口的控制。
    本實(shí)驗(yàn)編程采用FT311驅(qū)動(dòng)層提供的配置GPIO、讀GPIO、寫GPIO、重置GPIO 4個(gè)方法實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的控制,程序流程如圖5所示。

4 系統(tǒng)測(cè)試
    本設(shè)計(jì)中將Android手機(jī)作為脈沖信號(hào)源和脈沖分配器,通過軟件編程為步進(jìn)電機(jī)提供脈沖信號(hào),并通過驅(qū)動(dòng)芯片ULN2003驅(qū)動(dòng)步進(jìn)電機(jī)。系統(tǒng)測(cè)試過程如下:

 


    (1)用跳線帽設(shè)置ADK板的接口類型為GPIO,將步進(jìn)電機(jī)與其驅(qū)動(dòng)板連接,驅(qū)動(dòng)板與ADK板的GPIO口連接,并給ADK板上電。
    (2)將軟件安裝至手機(jī)上,然后通過USB線將ADK板與手機(jī)連接。
    (3)連接后,手機(jī)將彈出授權(quán)對(duì)話框,提示用戶打開(2)中安裝的軟件。
    (4)進(jìn)入軟件界面后,點(diǎn)擊“設(shè)定輸出”按鈕,設(shè)定GPIO口的數(shù)據(jù)傳輸方向;點(diǎn)擊“啟動(dòng)”、“停止”、“正轉(zhuǎn)”、“反轉(zhuǎn)”,拖動(dòng)速度調(diào)節(jié)滑塊,可實(shí)現(xiàn)對(duì)電機(jī)的控制。
    本文介紹了一種基于AOA協(xié)議實(shí)現(xiàn)Android設(shè)備USB通信的方案。該方案利用ADK開發(fā)板UMFT311EV實(shí)現(xiàn)外圍設(shè)備與Android設(shè)備的USB連接,通過Android USB配件模式編程實(shí)現(xiàn)了Android設(shè)備對(duì)外圍設(shè)備的控制。實(shí)際測(cè)試表明,該方案設(shè)計(jì)簡(jiǎn)單,能夠?qū)崿F(xiàn)Android設(shè)備對(duì)外設(shè)的控制。
參考文獻(xiàn)
[1] Google.USB host and accessory[EB/OL].[2013-03-02].http://developer.android.com/guide/topics/connectivity/usb/index.html.
[2] USB.USB On-The-Go and embedded host[EB/OL].[2013-03-02].http://www.usb.org/developers/onthego.
[3] HARMON D.哪種USB接口適合您的應(yīng)用[J].今日電子,2013(2):29-31.
[4] Google.Accessory development kit 2011 guide[EB/OL].[2013-03-02].http://developer.android.com/tools/adk/adk.html.
[5] Google.Android open accessory protocol 1.0[EB/OL].[2013-03-02].http://source.android.com/tech/accessories/aoap/aoa.html.
[6] Google.USB accessory[EB/OL].[2013-03-02].http://devel-oper.android.com/guide/topics/connectivity/usb/accessory.html.
[7] FTDI.FT311D development module(UMFT311EV)[EB/OL].(2012-07-31)[2013-03-02].http://www.ftdichip.com/Android.htm.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。