Android設備的USB通訊

摘 要: AOA協議是Google公司推出的用於實現Android設備與外圍設備之間USB通信的協議。該協議拓展了Android設備USB接口的功能,爲基於Android系統的智能設備應用於數據採集和設備控制領域提供了條件。介紹了Android系統下USB通信的兩種模式,並給出了USB配件模式下基於AOA協議實現Android手機控制步進電機的實例。
關鍵詞: Android;AOA;USB通信

最近業界的統計數據顯示,智能手機與自動化及機械系統之間存在着很大的市場潛力。2011年Google推出Android開放配件協議AOA(Android Open Accessory Protocol)及配件開發工具包ADK(Accessory Development Kit)提供了Android設備與Android配件通過USB或藍牙進行通信的API,爲基於Android系統的智能設備控制外設提供了條件。利用Android,系統可以連接從家用電器到重型機械、機器人等多種設備。
Android作爲一種基於開源Linux的智能手機操作系統,廣泛應用於手機、平板電腦等移動設備中。在各種Android設備提供的接口中,USB接口是常見接口,該接口的作用是爲Android設備充電並通過PC端的驅動程序實現Android設備與PC的交互。如何拓展Android設備的USB接口功能是當前的研究熱點之一。針對該問題,本文介紹了一種基於AOA協議實現Android設備USB通信的方案,並通過Android手機控制步進電機的案例給出了方案的實現方法。

1 Android USB通信模式
Android系統支持多種USB外圍設備。根據Android設備在USB通信中充當的角色,可以將Android USB通信分爲主機模式(Host Mode)和配件模式(Accessory Mode)[1]兩種模式。
1.1 主機模式
主機模式是指Android設備充當USB主機併爲總線供電。此模式下,Android設備需支持USB主機功能或OTG功能,此時Android設備的USB主機稱爲USB嵌入式主機EH(Embedded Host)[2]。與PC上的USB主機相比,EH設備可能無法爲連接到其總線上的未識別外圍設備加載驅動程序,因此它們對其目標外圍設備列表TPL(Target Peripheral List)進行了定義[3]。這些外圍USB設備大部分爲HID設備(Human Interface Device)、BOMS設備(Bulk Only Mass Storage,如U盤)和CDC設備(Comm-
unication Device Class,USB通信設備類,如打印機),其驅動程序已存在於Android平臺的系統中(Linux Kernel),因此Android設備可以與其直接通信。
主機模式示意圖如圖1所示。
1.2 配件模式
配件模式是指Android設備充當USB從機,外部設備充當主機併爲總線供電。此模式下,外部USB設備稱爲Android配件。該模式爲不具備主機功能的Android設備提供與USB設備交互的能力。Android設備和Android配件都必須支持AOA協議。不支持AOA協議的設備可以通過Android配件開發板(ADK板)與Android設備連接,成爲Android設備的間接配件。
配件模式示意圖如圖2所示。

本文介紹的基於AOA協議的Android設備USB通信方案即採用配件模式。主機模式和配件模式在Android 3.1(API level 12)及更高的平臺中直接支持。配件模式作爲一個附加庫也被Android 2.3.4(API level 10)支持。設備廠商可以選擇是否在設備的Linux系統鏡像中包含附加庫。對主機和配件模式的支持最終取決於設備的硬件,而不是Android平臺的等級(軟件)。

1.3 Android配件、ADK及AOA協議
Android配件是指遵循AOA協議的硬件,是Android配件模式中的概念。從硬件角度講,Android配件具有實現USB EH功能和AOA協議的微處理器以及包括USB接口在內的輸入/輸出接口。Android配件必須與Android平臺一起工作。
ADK是開發Android配件的參考開發包,該開發包基於Arduino公司的開源電子成型平臺[4]。ADK開發包包括Android配件硬件設計文檔、Android配件固件源碼、Android設備程序源碼。
AOA協議是Android設備與Android配件之間進行USB通信需遵循的連接協議,該協議規定了Android配件如何檢測Android設備並與其建立通信。AOA協議規定配件需具備以下4項功能[5]:
(1)偵聽自身的USB接口,等待與其連接的Android設備。
(2)檢測Android設備是否支持AOA協議。
(3)如果需要,啓動Android設備的USB配件模式。
(4)與Android設備建立USB通信。
2 USB配件模式開發
Android配件模式開發需要在Android設備端和Android配件端分別進行開發。
2.1 Android設備端開發
Android設備端需進行以下兩項工作:
(1)確保設備支持AOA協議。設備對AOA協議是否支持由設備硬件和Android系統版本決定。
(2)調用ADK中的API開發USB應用程序。
ADK中與USB配件模式相關的兩個類是UsbManager和UsbAccessory。UsbManager用於枚舉連接的USB配件並與其通信,UsbAccessory代表Android配件幷包含獲取配件描述信息的方法。
在編寫程序前,需要爲Android工程做以下設置工作[6]:
(1)配置Android Mainfest文件,聲明使用配件模式,指定最低SDK版本,並設置配件過濾意圖。
(2)配置accessory_filter.xml文件。accessory_filter.xml文件用於描述希望Android設備檢測的USB配件的描述信息,包含manufacturer、model、version 3個屬性。在Android配件的固件程序中,同樣包含以上3個屬性值。根據AOA協議,當Android配件連接到Android設備上時,配件會發送該屬性值到Android設備。Android程序將唯一響應與其accessory_filter.xml中指定的屬性值匹配的Android配件。
Android設備端程序開發的流程如下:
(1)發現配件並過濾。
(2)獲取與配件通信的權限。通過廣播接收器(Broad-castReceiver)的方式以彈出授權對話框的形式詢問用戶是否允許與Android配件通信。
(3)開始與配件通信。創建文件輸入輸出流代表USB批量傳輸端點,通過獨立線程以流傳輸的方式實現USB通信。
(4)終止與配件通信。通過廣播接收器偵聽USB配件與Android設備的斷開操作,當事件發生時,關閉文件輸入/輸出流。
2.2 Android配件端開發
Android配件端需進行以下兩項工作:
(1)根據ADK中的硬件設計文檔設計具有USB主控制器的硬件電路,並支持USB協議。
(2)將AOA協議以固件代碼的形式下載至Android配件的主芯片中。
目前,已有多家公司爲Android設備的配件模式開發提供專門的ADK板,ADK板將AOA協議以程序的方式燒寫至芯片中,ADK板也即Android配件。目前常見的ADK板有Arduino的Arduino Mega ADK板、SparkFun的IOIO板,此外還有DIY Drones、Microchip、RT Corp、Seeed Studio、Troido等公司生產的ADK板。採用ADK板將可節省Android配件端的開發時間。
3 系統設計
3.1 總體設計
構建的系統框圖如圖3所示。

採用的ADK板是由英國飛特蒂亞FTDI(Future Technology Devices International Ltd.)公司生產的Android平臺USB主控模塊(USB Android Host Module)[7],型號爲UMFT311EV,於2012年7月31日推出。UMFT311EV板具有USB主控功能和USB接口橋接功能,其特性如下:
(1)採用USB Android主控芯片FT311D,單芯片內集成USB協議。
(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個接口類型選擇引腳選擇接口類型。
UMFT311EV板支持AOA協議,作爲Android配件無需用戶做配件端的開發,而且爲Android設備端的程序開發提供Java驅動包。因此採用UMFT311EV板能夠實現Android手機、平板與其他設備的通信,進行設備控制和數據採集,並能與現有系統快速集成,降低開發難度和開發時間。
在此,以Android手機小米MI2和步進電機28BYJ48爲例,通過UMFT311EV板的4路GPIO口實現Android手機USB控制步進電機。

3.2 軟件設計
在設計Android手機端軟件時,採用FTDI公司爲Android平臺提供的驅動包。根據該驅動包,架構如圖4所示的應用程序。

FT311驅動層提供驅動UMFT311EV板上接口的方法和實現Android應用程序與UMFT311EV板USB通信的方法。該層爲用戶層提供封裝的方法,爲用戶開發程序屏蔽底層編程細節。用戶層通過調用FT311驅動層的方法實現對UMFT311EV板上接口的控制。
本實驗編程採用FT311驅動層提供的配置GPIO、讀GPIO、寫GPIO、重置GPIO 4個方法實現對步進電機的控制,程序流程如圖5所示。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章