新聞中心

EEPW首頁(yè) > 網(wǎng)絡(luò)與存儲(chǔ) > 設(shè)計(jì)應(yīng)用 > 利用Android智能手機(jī)及USB接口與1-Wire從設(shè)備通信

利用Android智能手機(jī)及USB接口與1-Wire從設(shè)備通信

作者:Wilson Tang 時(shí)間:2014-05-04 來源:電子產(chǎn)品世界 收藏

  引言

本文引用地址:http://www.butianyuan.cn/article/246299.htm

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

  系統(tǒng)布局

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

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

  該應(yīng)用為主/從系統(tǒng),Android智能手機(jī)作為主機(jī),數(shù)據(jù)記錄器作為從機(jī)。系統(tǒng)采用一個(gè)USB和一個(gè)/iButton把智能手機(jī)和數(shù)據(jù)記錄器橋接起來。利用網(wǎng)線中的一根數(shù)據(jù)線和接頭作為總線。數(shù)據(jù)記錄器為iButton Thermochron。

  1-Wire總線的重要角色

  1-Wire總線是單主和多從系統(tǒng)之間的接口。1-Wire為開漏輸出,采用類似于I2C的上拉電阻工作。有些1-Wire從機(jī)可利用1-Wire總線進(jìn)行寄生供電,在總線不通信時(shí)對(duì)從器件中的內(nèi)部電容充電。每個(gè)1-Wire從機(jī)也具有工廠激光刻制的唯一64位編號(hào),所以很容易識(shí)別和監(jiān)測(cè)總線上的從機(jī)。

  1-Wire傳輸時(shí)序(圖2)包括一個(gè)給從機(jī)的復(fù)位脈沖(trst)。復(fù)位脈沖通將1-Wire總線拉低預(yù)定的時(shí)間周期,將全部從機(jī)置位成已知的確定狀態(tài)。接著,從機(jī)在主機(jī)釋放總線后,利用將總線拉低的在位檢測(cè)脈沖(tpd)對(duì)主機(jī)進(jìn)行應(yīng)答。

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

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

  1-Wire接口沒有時(shí)鐘線,所以通信分為時(shí)隙(tslot),每個(gè)時(shí)隙承載一個(gè)信息位。在時(shí)隙開始,主機(jī)將總線短暫拉低,預(yù)示數(shù)據(jù)位將開始。當(dāng)傳輸?shù)氖且粋€(gè)0時(shí),主機(jī)或從機(jī)會(huì)使總線繼續(xù)保持為低電平;傳輸是一個(gè)1時(shí),主機(jī)或從機(jī)將釋放總線。主機(jī)或從機(jī)將在主機(jī)指示時(shí)隙開始后的規(guī)定時(shí)間(tsample)讀取總線。

  USB與1-Wire通信

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

  用Android作為USB主設(shè)

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

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

  現(xiàn)在,我們演示如何利用Android去實(shí)現(xiàn)讓Thermochron進(jìn)行溫度轉(zhuǎn)換,并讀取溫度結(jié)果。每個(gè)步驟(表1)均以1-Wire復(fù)位開始,然后利用Match ROM命令選擇從機(jī),最后為給它的執(zhí)行命令。

  由USB傳輸控制執(zhí)行1-Wire復(fù)位,Android API的控制傳輸函數(shù)原代碼如下所示。

  // 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)

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

  批數(shù)據(jù)傳輸用于Match ROM以及讀/寫存儲(chǔ)器。此處,端點(diǎn)應(yīng)為epIN或epOUT,取決于我們讀數(shù)據(jù)還是寫數(shù)據(jù)。端點(diǎn)緩沖器儲(chǔ)存要發(fā)送的數(shù)據(jù),或者為空以儲(chǔ)存要接收來的數(shù)據(jù),長(zhǎng)度為接收或發(fā)送的字節(jié)數(shù)。超時(shí)為USB的超時(shí)設(shè)置,單位為毫秒。

  // Performs a bulk transaction on the given endpoint.

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

數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理


上拉電阻相關(guān)文章:上拉電阻原理

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉