999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2014-04-29 00:00:00
電子產(chǎn)品世界 2014年5期

引言

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

系統(tǒng)布局

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

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

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

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適配器和Termochron代替。

本項(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[] bufer, 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ǔ)存要接收來(lái)的數(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)

以下為發(fā)送至Thermochron的轉(zhuǎn)換溫度命令(0x44)。在第1行中,如上所述(表1),首先由控制傳輸發(fā)送1-Wire復(fù)位。這是1-Wire Reset、Match ROM及轉(zhuǎn)換溫度序列。

// 1-Wire Reset

1 conn.controlTransfer(0x40, 0x01, 0x0C4B, 0x0001, 1, 0x0000, 0);

// Match ROM, where romid is the iButon’s registration number

2 romid = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

3 conn.bulkTransfer(epOUT, romid, 8, 0);

4 conn.controlTransfer(0x40, 0x01, 0x0065, 0x55, 1, 0, 0);

// Convert Temperature for DS1921G

5 data = new byte[]{0x44};

6 conn.bulkTransfer(epOUT, data, data.length, 0);

7 conn.controlTransfer(0x40, 0x01, 0x1075, data.length, 1, 0, 0);

上面第4行中,匹配訪問傳輸控制發(fā)送一個(gè)1-Wire Reset,0x55,匹配訪問ROM命令在1-Wire總線上,接著是相應(yīng)從機(jī)的ROM編號(hào)2。檢索參數(shù)設(shè)置為0x55。這個(gè)匹配訪問命令希望用戶把編號(hào)預(yù)裝載至epOUT,如第2行和第3行代碼所示。函數(shù)參數(shù)的說明請(qǐng)參考DS2490數(shù)據(jù)資料。

Termochron的數(shù)據(jù)資料將0x44作為開始溫度轉(zhuǎn)換的代碼。表2. 溫度轉(zhuǎn)換命令0x44的寫通過I/O塊操作來(lái)執(zhí)行。I/O塊功能是向epOUT寫輸出數(shù)據(jù),如上面第6行代碼所示。然后第7行為控制傳輸為執(zhí)行I/O塊命令。

以下代碼為利用USB的 I/O模塊讀取溫度寄存器數(shù)據(jù)的步驟。Thermochron讀存儲(chǔ)器的命令碼為0xF0(見表2)。在此之后為目標(biāo)寄存器地址(TA) 為0x0211,只讀,分為兩個(gè)字節(jié)(第8行)。由于1-Wire總線只有單根數(shù)據(jù)線,所以總線上寫及發(fā)送的數(shù)據(jù)將全部環(huán)回到主機(jī)。然后主機(jī)需要向總線寫假數(shù)據(jù)(0xf)。如之前所述,由于1-Wire為開漏總線,所以從機(jī)將對(duì)0xff進(jìn)行響應(yīng)并修改該數(shù)據(jù)。最終效果就是數(shù)據(jù)和0xf的“與”的結(jié)果。

這些命令被送至epOUT,傳輸控制函數(shù)將執(zhí)行發(fā)送至1-Wire總線的命令 (第9行和第10行)。讀回的數(shù)據(jù)將位于USB端點(diǎn)epIN,利用第12行的批傳輸命令復(fù)制到tempdata。然后在第13行中,將最終的原始溫度編碼轉(zhuǎn)換為對(duì)應(yīng)的溫度值。

// 1-Wire Reset and Match ROM

// (omited) ...

// Read Temperature Register/ Memory Command

// Read Memory, TA2, TA1, dummy data

8 command = new byte[]{(byte)0xf0, 0x11, 0x02, (byte)0xff,(byte)0xf};

9 conn.bulkTransfer(epOUT, command, command.length, 0);

10 conn.controlTransfer(0x40, 0x01, 0x1075, command.length, 1, 0, 0);

// Return Data from input endpoint

11 byte[] tempdata = new byte[5];

12 conn.bulkTransfer(epIN, tempdata, 5, 0);

// Temperature calculation

13 t e m p e r a t u r e = ( i n t )(tempdata[4] 0xf)/2.0 – 40;

結(jié)論

本示例的應(yīng)用程序代碼采用Eclipse編寫,可供下載。提供所有的文件,源代碼查看和修改容易。這個(gè)程序的代碼利用抽象函數(shù)間接使用底層的USB命令。本文最后的一般性參考有助于理解Android USB API和1-Wire命令。這些資源開發(fā)類似的產(chǎn)品廣泛使用。經(jīng)過適當(dāng)?shù)男薷模墒乖搼?yīng)用程序支持其它5V 1-Wire從設(shè),例如存儲(chǔ)器,或支持附加iButton特性。可定制的選項(xiàng)很多,最終取決于設(shè)計(jì)者的系統(tǒng)要求。

參考文獻(xiàn):

[1]Android API, Package Index, http://developer.android.com/ reference/packages.html

[2]Using Android in Industrial Automation, Android USB Host+ Arduino, http://android.serverbox.ch/?p=549.

[3]Maxim Integrated iButton:1-Wire Public Domain Kit, http:// www.maximintegrated.com/products/ibutton/software/1wire/ wirekit.cfm.

[4]Maxim Integrated應(yīng)用筆記187:《1-Wire Search Algorithm》,http://www.maximintegrated.com/an187。

[5]DS2490 USB至1-Wire橋接芯片的數(shù)據(jù)資料:http://www. maximintegrated.com/ds2490。

[6]DS9490R USB至1-Wire/iButton適配器的數(shù)據(jù)資料:http:// www.maximintegrated.com/ds9490r。

[7]DS1921G Thermochron iButton的數(shù)據(jù)資料:http://www. maximintegrated.com/ds1921g。

Android是Google Inc的注冊(cè)商標(biāo)。

Arduino是Arduino, LLC的注冊(cè)商標(biāo)。

1-Wire、iButton和Thermochron是Maxim Integrated Products, Inc的注冊(cè)商標(biāo),Hygrochron是Maxim Integrated Products, Inc的商標(biāo)。

主站蜘蛛池模板: 国产一二视频| 奇米影视狠狠精品7777| 亚洲成A人V欧美综合天堂| 亚洲精品无码不卡在线播放| 中文国产成人精品久久| 成人亚洲国产| 日本精品一在线观看视频| 中文字幕天无码久久精品视频免费| 亚洲欧美日韩综合二区三区| 人妻91无码色偷偷色噜噜噜| 久青草免费在线视频| 最新国产网站| 国产91色| 国产欧美在线视频免费| 国产XXXX做受性欧美88| 国产区成人精品视频| 亚洲视频免费在线看| 五月丁香伊人啪啪手机免费观看| 欧美亚洲另类在线观看| 国产在线一区二区视频| 国产色图在线观看| 国产免费久久精品99re丫丫一| 亚洲浓毛av| 国产爽歪歪免费视频在线观看| 亚洲无线一二三四区男男| 国产网站免费| 国产成人区在线观看视频| 久久精品只有这里有| 亚洲愉拍一区二区精品| 国产91精选在线观看| 欧美日韩另类国产| 亚洲香蕉在线| 手机看片1024久久精品你懂的| 91久久国产成人免费观看| 中文字幕一区二区视频| 专干老肥熟女视频网站| AV天堂资源福利在线观看| 91九色视频网| 亚洲国产系列| 99热这里只有精品在线播放| 国产91在线|中文| 欧美亚洲一二三区| 国产经典在线观看一区| 亚洲精品成人福利在线电影| 欧美区国产区| 热九九精品| 国产91久久久久久| 亚洲一级毛片在线观播放| 国产69精品久久| 狠狠色噜噜狠狠狠狠色综合久 | 蝴蝶伊人久久中文娱乐网| 国产美女叼嘿视频免费看| 欧美黑人欧美精品刺激| 综合久久久久久久综合网| 91成人在线免费观看| 色哟哟国产精品| 亚洲视频一区| 欧美三级视频网站| 久久这里只精品国产99热8| 亚洲AV无码乱码在线观看代蜜桃 | 成年看免费观看视频拍拍| 不卡色老大久久综合网| 欧美亚洲国产一区| 玖玖免费视频在线观看| 欧美性天天| 岛国精品一区免费视频在线观看 | 中文字幕在线观看日本| 亚洲香蕉在线| 欧美精品成人一区二区视频一| 中文无码伦av中文字幕| 欧美日韩北条麻妃一区二区| 国产91在线|中文| 国产成人无码久久久久毛片| 日韩经典精品无码一区二区| 亚洲美女视频一区| 国产麻豆永久视频| 国产精品成人一区二区不卡| 午夜国产精品视频| 亚洲最大福利视频网| 亚洲国产日韩欧美在线| 综合久久五月天| 青青青国产在线播放|