新聞中心

        EEPW首頁 > 網絡與存儲 > 設計應用 > 利用Android智能手機及USB接口與1-Wire從設備通信

        利用Android智能手機及USB接口與1-Wire從設備通信

        作者:Wilson Tang 時間:2014-05-04 來源:電子產品世界 收藏

          引言

        本文引用地址:http://www.104case.com/article/246299.htm

          本文介紹如何利用安卓®智能手機上的USB口與從設備通信,而無需計算機系統。文中給出的例子使用手機上的USB端口通過®總線與® iButton®溫度記錄器通信。

          系統布局

          這種應用的關鍵是智能手機上的USB接口。當智能手機使用USB OTG時,那么就可利用其作USB主設備來管理其他USB從設備,例如麥克風、閃存、鍵盤,或者本例中的。最新版本的應用程序接口(API)支持USB在應用層為主的模式。該功能使用戶能夠安裝與USB外設“對話”的應用程序,無需刷機(Root)或在用戶的智能手機上安裝特殊驅動。

          系統方框圖如圖1所示。Android智能手機必須使用USB OTG。一般情況下,電話連接至計算機是作為USB從設備,但USB OTG允許將其轉換為USB主設備。這種角色轉換要求特殊的OTG電纜提供A型USB端口,并指示USB從機已連接至智能手機。

          該應用為主/從系統,Android智能手機作為主機,數據記錄器作為從機。系統采用一個USB和一個/iButton把智能手機和數據記錄器橋接起來。利用網線中的一根數據線和接頭作為總線。數據記錄器為iButton Thermochron。

          1-Wire總線的重要角色

          1-Wire總線是單主和多從系統之間的接口。1-Wire為開漏輸出,采用類似于I2C的上拉電阻工作。有些1-Wire從機可利用1-Wire總線進行寄生供電,在總線不通信時對從器件中的內部電容充電。每個1-Wire從機也具有工廠激光刻制的唯一64位編號,所以很容易識別和監測總線上的從機。

          1-Wire傳輸時序(圖2)包括一個給從機的復位脈沖(trst)。復位脈沖通將1-Wire總線拉低預定的時間周期,將全部從機置位成已知的確定狀態。接著,從機在主機釋放總線后,利用將總線拉低的在位檢測脈沖(tpd)對主機進行應答。

          復位后,從器件根據唯一的自身編號,可接收發送至從機的各種ROM命令。命令Match ROM將只激活編號正確匹配的某個從器件。Search ROM命令用于檢測總線上所有從機的編號。因此,盡管這里我們只介紹一個從機,但可應用于具有多個兼容的1-Wire從器件。

          在我們這個Android例子中,某個ROM命令只要選定,主機即可向每個具體的從設發送該命令。將諸如Thermochron這樣的溫度記錄器作為從設備,主機的命令可能包括讀/寫其暫存器、存儲器、或轉換溫度。

          1-Wire接口沒有時鐘線,所以通信分為時隙(tslot),每個時隙承載一個信息位。在時隙開始,主機將總線短暫拉低,預示數據位將開始。當傳輸的是一個0時,主機或從機會使總線繼續保持為低電平;傳輸是一個1時,主機或從機將釋放總線。主機或從機將在主機指示時隙開始后的規定時間(tsample)讀取總線。

          USB與1-Wire通信

          DS9490R為1-Wire至USB,有四個USB端點:控制、中斷、批輸入(epIN)和批輸出(epOUT)。通常,控制端用于向1-Wire適配器發送命令,以及配置傳輸類型;批輸入/輸出用于數據傳輸;中斷端口接收實時敏感的信息,如狀態寄存器的信息和返回的消息。

          用Android作為USB主設

          此處介紹的設計已有先例。Android API從3.1版開始支持USB主模式,Manuel Di Cerbo1曾通過USB將Arduino®微控制器板與Android電話連接在一起。我們的應用在DiCerbo的設計上進行修改,將基本概念擴展至USB至1-Wire適配器,并且微控制器用1-Wire適配器和Thermochron代替。

          本項目以DiCerbo的示例代碼為基礎。代碼首先詢問用戶是否允許訪問連接至Android智能手記的USB設備。然后程序查詢制造商和設備ID,并設置用于通信的USB端點。代碼提供給conn,用于批傳輸和控制傳輸的USB設備連接;配置用于批輸入的USB端點epIN及epOUT。這和所有系統中USB初始化及向從機寫底層USB命令使用的基本配置沒什么區別。

          現在,我們演示如何利用Android去實現讓Thermochron進行溫度轉換,并讀取溫度結果。每個步驟(表1)均以1-Wire復位開始,然后利用Match ROM命令選擇從機,最后為給它的執行命令。

          由USB傳輸控制執行1-Wire復位,Android API的控制傳輸函數原代碼如下所示。

          // Performs a control transaction on endpoint zero for this device.

          int controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)

          傳輸控制用于啟動1-Wire Reset、Match ROM或Block I/O。參數說明請參見數據資料。隨后,我們將介紹如何使用該函數。

          批數據傳輸用于Match ROM以及讀/寫存儲器。此處,端點應為epIN或epOUT,取決于我們讀數據還是寫數據。端點緩沖器儲存要發送的數據,或者為空以儲存要接收來的數據,長度為接收或發送的字節數。超時為USB的超時設置,單位為毫秒。

          // Performs a bulk transaction on the given endpoint.

          int bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

        數字通信相關文章:數字通信原理


        通信相關文章:通信原理


        上拉電阻相關文章:上拉電阻原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 七台河市| 水城县| 南木林县| 涿州市| 宝丰县| 永康市| 涞水县| 金湖县| 茶陵县| 广元市| 陆良县| 永修县| 南丹县| 拉萨市| 松潘县| 毕节市| 民权县| 浮山县| 历史| 吉木乃县| 岳普湖县| 宾阳县| 郑州市| 肇州县| 嘉峪关市| 旬邑县| 光泽县| 石柱| 英德市| 永年县| 泸州市| 新绛县| 沂源县| 平安县| 衢州市| 博罗县| 永州市| 秭归县| 碌曲县| 乐都县| 两当县|