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

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

2014-04-29 00:00:00
電子產品世界 2014年5期

引言

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

系統布局

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

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

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

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

本項目以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[] bufer, 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)

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

// 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行中,匹配訪問傳輸控制發送一個1-Wire Reset,0x55,匹配訪問ROM命令在1-Wire總線上,接著是相應從機的ROM編號2。檢索參數設置為0x55。這個匹配訪問命令希望用戶把編號預裝載至epOUT,如第2行和第3行代碼所示。函數參數的說明請參考DS2490數據資料。

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

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

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

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

結論

本示例的應用程序代碼采用Eclipse編寫,可供下載。提供所有的文件,源代碼查看和修改容易。這個程序的代碼利用抽象函數間接使用底層的USB命令。本文最后的一般性參考有助于理解Android USB API和1-Wire命令。這些資源開發類似的產品廣泛使用。經過適當的修改,可使該應用程序支持其它5V 1-Wire從設,例如存儲器,或支持附加iButton特性。可定制的選項很多,最終取決于設計者的系統要求。

參考文獻:

[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應用筆記187:《1-Wire Search Algorithm》,http://www.maximintegrated.com/an187。

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

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

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

Android是Google Inc的注冊商標。

Arduino是Arduino, LLC的注冊商標。

1-Wire、iButton和Thermochron是Maxim Integrated Products, Inc的注冊商標,Hygrochron是Maxim Integrated Products, Inc的商標。

主站蜘蛛池模板: 九九免费观看全部免费视频| 蜜臀AVWWW国产天堂| 国产一级毛片yw| 精品人妻AV区| 亚洲AV无码久久精品色欲| 97在线免费| 性激烈欧美三级在线播放| 午夜一级做a爰片久久毛片| 欧美成人综合视频| 四虎精品国产AV二区| 国产不卡国语在线| 国产精品亚洲一区二区三区z | 国产无码高清视频不卡| 喷潮白浆直流在线播放| 九色综合伊人久久富二代| 超清无码一区二区三区| 亚洲人成色77777在线观看| 波多野结衣的av一区二区三区| 免费国产不卡午夜福在线观看| 中日无码在线观看| 久久香蕉国产线看观| 91精品久久久久久无码人妻| 国产精品视频第一专区| 国产91小视频在线观看| 成人小视频网| 日本免费新一区视频| 国产精品亚洲天堂| 日韩中文无码av超清| 无码久看视频| 青青草原国产精品啪啪视频| 亚洲欧美日本国产专区一区| 国产成本人片免费a∨短片| 国产SUV精品一区二区| www.亚洲色图.com| 国产亚洲精品无码专| 国产成熟女人性满足视频| 找国产毛片看| 九九热在线视频| 久久情精品国产品免费| 极品国产一区二区三区| 国产日本欧美在线观看| 婷婷中文在线| 欧美一级99在线观看国产| 欧美19综合中文字幕| 国产精品视频白浆免费视频| 国产精品浪潮Av| 欧美亚洲综合免费精品高清在线观看| 狠狠色香婷婷久久亚洲精品| 欧美三级视频网站| 亚洲最黄视频| 欧美不卡二区| 一本色道久久88亚洲综合| 麻豆精品在线| 国产精品自拍合集| 日韩精品一区二区三区大桥未久| 91蝌蚪视频在线观看| 色欲国产一区二区日韩欧美| 亚洲福利视频网址| 色综合久久88色综合天天提莫 | 欧美日韩另类国产| 中文字幕在线永久在线视频2020| 日韩精品亚洲精品第一页| 午夜福利视频一区| 日本免费精品| 中美日韩在线网免费毛片视频| 亚洲中文字幕av无码区| 亚洲女同一区二区| 久久综合干| 国产成人无码久久久久毛片| 国产剧情国内精品原创| 精品三级在线| 国产自产视频一区二区三区| 欧洲av毛片| 国产亚洲精品自在线| 97视频精品全国免费观看| 麻豆国产原创视频在线播放| 91精品国产麻豆国产自产在线| 国产精品3p视频| 日韩精品亚洲一区中文字幕| 青青青国产视频| 麻豆精品在线播放| 99久久国产精品无码|