本應(yīng)用筆記詳細(xì)介紹了如何連接DS9490R、溫度記錄儀iButton器件和Android的USB On-the-Go(OTG)。審查每個(gè)部分之間的通信協(xié)議。我們回顧數(shù)據(jù)手冊(cè)信息以及如何將其應(yīng)用于終端系統(tǒng)。演示示例代碼的示例 Android 應(yīng)用程序也可供下載。
介紹
睤。智能手機(jī)無(wú)處不在。智能手機(jī)不僅僅是一部電話,而是一臺(tái)功能強(qiáng)大的計(jì)算機(jī),可以放在口袋里。由于智能手機(jī)中可用的計(jì)算能力和傳感器不斷增加,現(xiàn)在使用該手機(jī)作為其他設(shè)備的接口是切實(shí)可行的。本文介紹如何使用 Android 智能手機(jī)上的 USB 端口與沒(méi)有計(jì)算機(jī)系統(tǒng)的從屬設(shè)備進(jìn)行通信。此處的示例使用1-Wire總線通過(guò)USB從Android到Thermochron iButton溫度記錄器進(jìn)行通信。????
系統(tǒng)布局
此應(yīng)用程序的關(guān)鍵是智能手機(jī)上的USB端口。當(dāng)智能手機(jī)使用USB移動(dòng)(OTG)收發(fā)器時(shí),USB主機(jī)功能可以通過(guò)其他從設(shè)備實(shí)現(xiàn),例如鼠標(biāo),閃存驅(qū)動(dòng)器,鍵盤或此處的Thermochron。最新版本的 Android 應(yīng)用程序編程接口 (API) 在應(yīng)用程序級(jí)別支持 USB 主機(jī)模式。此功能允許最終用戶安裝與 USB 外圍設(shè)備“對(duì)話”的應(yīng)用程序,而無(wú)需在用戶的智能手機(jī)上生根或安裝特殊驅(qū)動(dòng)程序。
系統(tǒng)框圖如圖1所示。安卓智能手機(jī)必須使用 USB OTG 收發(fā)器。通常,手機(jī)連接到計(jì)算機(jī)并充當(dāng)USB從站,但USB OTG收發(fā)器允許將手機(jī)轉(zhuǎn)換為USB主站。這種角色轉(zhuǎn)換需要一根特殊的OTG電纜來(lái)提供USB A型端口,并發(fā)出USB從站連接到智能手機(jī)的信號(hào)。
此應(yīng)用程序是一個(gè)主從系統(tǒng),以Android智能手機(jī)為主,Thermochron數(shù)據(jù)記錄器作為從機(jī)。系統(tǒng)使用USB轉(zhuǎn)1線/iButton(DS9490R)適配器將智能手機(jī)與數(shù)據(jù)記錄器橋接。使用網(wǎng)絡(luò)電纜/插座DS1402D-DR8作為1-Wire總線,只需要一條數(shù)據(jù)線。數(shù)據(jù)記錄器是iButton溫度記錄器(DS1921G)。
圖1.系統(tǒng)框圖使用DS9490R 1-Wire適配器作為智能手機(jī)和應(yīng)用器件之間的接口;DS1402D-DR8總線電纜連接到應(yīng)用器件,此處為DS1921G溫度時(shí)線iButton。
1-Wire總線的重要作用
1-Wire總線是單主系統(tǒng)與多從系統(tǒng)之間的接口。1-Wire輸出為漏極開(kāi)路,采用類似于I2C. 一些1-Wire從機(jī)可以由1-Wire總線寄生供電,當(dāng)不發(fā)生通信時(shí),該總線為從器件中的內(nèi)部電容器充電。每個(gè)1-Wire從器件還具有一個(gè)工廠光刻的、唯一的64位注冊(cè)號(hào),因此每個(gè)從器件都可以在總線上輕松識(shí)別和監(jiān)控。
1-Wire交易序列(圖2)由復(fù)位脈沖(trst) 發(fā)送給奴隸。復(fù)位脈沖通過(guò)按住1-Wire總線預(yù)定的時(shí)間段,使所有從機(jī)進(jìn)入已知狀態(tài)。接下來(lái),從機(jī)通過(guò)存在檢測(cè)脈沖(tPD),在主站釋放總線后將其拉下。
圖2.1線時(shí)序圖。
復(fù)位后,從設(shè)備可以接受針對(duì)每個(gè)從設(shè)備的各種ROM命令,這些命令由其注冊(cè)號(hào)標(biāo)識(shí)。匹配ROM的命令僅激活具有正確標(biāo)識(shí)注冊(cè)的單個(gè)從設(shè)備。搜索ROM用于發(fā)現(xiàn)總線上所有從站的注冊(cè)號(hào)。因此,盡管我們?cè)谶@里只顯示一個(gè)從器件,但該應(yīng)用可以有多個(gè)1-Wire兼容的從器件。
一旦選擇了特定的ROM命令,那么設(shè)備特定的命令就可以由主節(jié)點(diǎn)發(fā)出,在我們的例子中是Android。使用像Thermochron這樣的溫度記錄器作為從站,主機(jī)的命令可能涉及寫入或讀取其暫存器或存儲(chǔ)器,或轉(zhuǎn)換溫度。
1-Wire接口沒(méi)有時(shí)鐘線,因此通信被分成多個(gè)時(shí)隙(t槽),每個(gè)都攜帶一點(diǎn)信息。在時(shí)隙開(kāi)始時(shí),主站會(huì)短暫地拉下總線以指示位的開(kāi)始。傳輸零點(diǎn)時(shí),主站或從站繼續(xù)保持總線低電平。傳輸一個(gè)時(shí),主站或從站釋放總線。主站或從站按規(guī)定的時(shí)間讀取總線(t樣本) 之后,母版指示時(shí)隙的開(kāi)始。
與1線適配器的USB通信
DS9490R是1線轉(zhuǎn)USB適配器,具有四個(gè)USB端點(diǎn):控制、中斷、批量輸入()和批量輸出()。通常,控制端點(diǎn)用于向1-Wire適配器發(fā)送命令并設(shè)置傳輸類型。批量輸入/輸出用于數(shù)據(jù)傳輸,中斷終結(jié)點(diǎn)用于接收狀態(tài)寄存器和返回消息等時(shí)間敏感信息。epINepOUT
使用安卓作為 USB 主機(jī)
這里提出的設(shè)計(jì)是有先例的。Android API 從版本 3.1 開(kāi)始,支持 USB 主機(jī)模式。曼努埃爾·迪·塞爾博1通過(guò)USB將Arduino微控制器板與Android手機(jī)連接。我們的應(yīng)用修改了DiCerbo的工作,將基本概念擴(kuò)展到DS9490R USB轉(zhuǎn)1-Wire適配器,并將1-Wire適配器與Thermochron配合使用,而不是微控制器。
DiCerbo示例代碼是該項(xiàng)目的基礎(chǔ)。該代碼首先請(qǐng)求用戶允許訪問(wèn)連接到Android智能手機(jī)的USB設(shè)備。然后,程序搜索供應(yīng)商和設(shè)備 ID,并設(shè)置 USB 終結(jié)點(diǎn)以進(jìn)行通信。該代碼提供 ,用于執(zhí)行批量和控制傳輸?shù)?USB 設(shè)備連接;它為批量輸入和 .這與所有系統(tǒng)用于初始化USB并將低級(jí)USB命令寫入從站的基本設(shè)置相同。
現(xiàn)在我們將演示如何使用Android在溫度上執(zhí)行溫度轉(zhuǎn)換并讀取溫度結(jié)果。每個(gè)事務(wù)步驟(表 1)都以 開(kāi)頭,后跟選擇從設(shè)備,然后是最終特定于設(shè)備的命令。
表 1.1-Wire主機(jī)對(duì)溫度數(shù)據(jù)記錄器執(zhí)行的命令
1線復(fù)位 | 匹配光盤 | 轉(zhuǎn)換溫度 |
1線復(fù)位 | 匹配光盤 | 讀存儲(chǔ)器/寄存器 |
1-Wire復(fù)位通過(guò)USB控制傳輸執(zhí)行,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) 、 或 。參數(shù)在數(shù)據(jù)手冊(cè)中描述。稍后,我們將說(shuō)明如何使用此函數(shù)。
批量傳輸用于讀/寫內(nèi)存。這里的端點(diǎn)將是 或 ,取決于我們是讀取數(shù)據(jù)還是寫入數(shù)據(jù)。終結(jié)點(diǎn)緩沖區(qū)存儲(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)
此處顯示了將轉(zhuǎn)換溫度命令 (0x44) 發(fā)送到溫度時(shí)線的代碼。如前所述,第一行1-Wire復(fù)位通過(guò)控制傳輸發(fā)送(表1)。這是 、 ,它轉(zhuǎn)換溫度序列。
// 1-Wire Reset 1 conn.controlTransfer(0x40, 0x01, 0x0C4B, 0x0001, null, 0x0000, 0); // Match ROM, where romid is the iButton'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, null, 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, null, 0, 0);
在上面的第4行中,匹配訪問(wèn)控制傳輸在0-Wire總線上發(fā)送一個(gè)、55x1、匹配訪問(wèn)ROM命令,后跟所需從站的ROM注冊(cè)號(hào)。1-Wire Reset2索引參數(shù)設(shè)置為 0x55。match 訪問(wèn)命令要求用戶將注冊(cè)號(hào)預(yù)加載到 ,如代碼的第 2 行和第 3 行所示。功能參數(shù)在DS2490數(shù)據(jù)資料中描述。
溫度小時(shí)管的數(shù)據(jù)表將0x44標(biāo)識(shí)為開(kāi)始溫度轉(zhuǎn)換的代碼。(表2)。轉(zhuǎn)換溫度命令通過(guò)使用塊 I/O 操作寫入0x44來(lái)執(zhí)行。對(duì)于塊 I/O 操作,將輸出數(shù)據(jù)寫入,如上面的第 6 行所示。然后,第 7 行中的控制傳輸執(zhí)行塊 I/O 命令。epOUT
表 2.溫度存儲(chǔ)器和控制命令(使用批量 I/O)
內(nèi)存/控制命令 | 命令代碼 | 描述 |
---|---|---|
讀內(nèi)存 | 0xF0 | 從內(nèi)部寄存器讀取數(shù)據(jù)。按照寄存器地址的命令進(jìn)行操作,首先使用 LSb。繼續(xù)為每個(gè)字節(jié)讀取0xff虛擬數(shù)據(jù)。 |
轉(zhuǎn)換溫度 | 0x44 | 開(kāi)始溫度轉(zhuǎn)換。 |
下面的代碼顯示了通過(guò)USB批量I/O傳輸讀取溫度寄存器數(shù)據(jù)的順序。溫度時(shí)線的讀取存儲(chǔ)器命令代碼0xF0(請(qǐng)參閱表 2)。接下來(lái)是 0x0211 的目標(biāo)寄存器地址 (TA),該地址具有只讀訪問(wèn)權(quán)限,并分為兩個(gè)字節(jié)(第 8 行)。在1-Wire總線上寫入和發(fā)送的數(shù)據(jù)全部環(huán)回主機(jī),因?yàn)榭偩€僅由一根線組成。然后,主站需要將虛擬數(shù)據(jù)(0xff)寫入總線。從機(jī)響應(yīng)并覆蓋0xff數(shù)據(jù),因?yàn)槿缜八觯?-Wire是一條漏極開(kāi)路總線。凈效應(yīng)是數(shù)據(jù)與0xff的 AND。
這一系列命令被放到1-Wire總線(第9行和第10行)上,控制傳輸通過(guò)發(fā)送命令來(lái)執(zhí)行命令。回讀數(shù)據(jù)位于 USB 終結(jié)點(diǎn) 中。這是在第 12 行的批量傳輸命令復(fù)制到的。然后將生成的原始溫度代碼轉(zhuǎn)換為第 13 行的相應(yīng)溫度值。epOUTepINtempdata
// 1-Wire Reset and Match ROM // (omitted) ... // Read Temperature Register/Memory Command // Read Memory, TA2, TA1, dummy data 8 command = new byte[] {(byte)0xf0, 0x11, 0x02, (byte)0xff, (byte)0xff}; 9 conn.bulkTransfer(epOUT, command, command.length, 0); 10 conn.controlTransfer(0x40, 0x01, 0x1075, command.length, null, 0, 0); // Return Data from input endpoint 11 byte[] tempdata = new byte[5]; 12 conn.bulkTransfer(epIN, tempdata, 5, 0); // Temperature calculation 13 temperature = (int)(tempdata[4] & 0xff)/2.0 – 40;
我們的安卓應(yīng)用程序示例
示例 Android 應(yīng)用程序如圖 3 所示。當(dāng)用戶運(yùn)行程序并按“枚舉”按鈕時(shí),將顯示一個(gè)屏幕,詢問(wèn)訪問(wèn) USB 設(shè)備的權(quán)限。用戶點(diǎn)擊確定后,應(yīng)用程序?qū)?zhí)行搜索并在下拉菜單中列出所有從站的64位注冊(cè)號(hào)。當(dāng)用戶選擇特定的注冊(cè)號(hào)時(shí),應(yīng)用程序?qū)?zhí)行上述例程,并顯示來(lái)自溫度時(shí)線的實(shí)時(shí)溫度。枚舉按鈕和注冊(cè)號(hào)的選擇連接到生成一個(gè) .這些任務(wù)是完成請(qǐng)求的操作并在完成后更新用戶界面 (UI) 的線程。這些任務(wù)不會(huì)在 UI 線程中執(zhí)行,以防止它在等待 iButton 響應(yīng)時(shí)凍結(jié)。
在最終應(yīng)用中,代碼被抽象為一般的1-Wire操作,如、、、、和。此外,這些命令一起可以進(jìn)一步抽象為 iButton 函數(shù),例如 和 。這允許調(diào)用正確的函數(shù)。
圖3.Android 應(yīng)用程序,USB 權(quán)限(左)。特定溫度時(shí)線iButton的溫度測(cè)量由其注冊(cè)號(hào)(右)標(biāo)識(shí)。
示例應(yīng)用包含用于將用戶交互(如按下按鈕)鏈接到1-Wire從機(jī)執(zhí)行命令的UI代碼。除DS1921G溫度時(shí)線外,該應(yīng)用還支持iButton溫度記錄儀(DS1922L/DS1922T)和iButton濕度記錄器(DS1923)。如圖3所示,每個(gè)器件的注冊(cè)號(hào)分為三個(gè)字段:家族代碼、序列號(hào)和循環(huán)冗余校驗(yàn)(CRC)。可以從每個(gè)注冊(cè)號(hào)讀取家族代碼,以確定確切的設(shè)備型號(hào)。
結(jié)論
此示例應(yīng)用程序的代碼是使用 Eclipse 編程的,可供下載。訪問(wèn)整個(gè)項(xiàng)目文件后,可以輕松瀏覽和修改源代碼。項(xiàng)目代碼使用抽象函數(shù)間接使用低級(jí) USB 命令。本文末尾的一般參考資料有助于理解Android USB API和1-Wire命令。這些資源廣泛用于開(kāi)發(fā)此示例應(yīng)用程序。可能的修改可能會(huì)改變應(yīng)用,使其可與其他5V 1-Wire從器件(如存儲(chǔ)器)配合使用,或啟用其他iButton功能。可定制的選項(xiàng)很多,最終結(jié)果取決于設(shè)計(jì)人員的系統(tǒng)要求。
審核編輯:郭婷
-
智能手機(jī)
+關(guān)注
關(guān)注
66文章
18612瀏覽量
183340 -
usb
+關(guān)注
關(guān)注
60文章
8152瀏覽量
271404 -
適配器
+關(guān)注
關(guān)注
9文章
2043瀏覽量
69438
發(fā)布評(píng)論請(qǐng)先 登錄
基于DS2432的USB口1-Wire總線適配器的設(shè)計(jì)
Ginkgo USB-CAN接口適配器
可編程USB轉(zhuǎn)串口適配器UART
DS9097U RS232至1-Wire接口適配器

可編程開(kāi)發(fā)板USB轉(zhuǎn)串口適配器USB2S用戶手冊(cè)
可編程USB轉(zhuǎn)串口適配器UART/USB2S用戶手冊(cè)
可編程 USB 轉(zhuǎn)串口適配器開(kāi)發(fā)板的詳細(xì)接口與功能

可編程USB轉(zhuǎn)串口適配器開(kāi)發(fā)板介紹 UART轉(zhuǎn)SPI應(yīng)用

可編程USB轉(zhuǎn)串口適配器接口與功能介紹
基于LPC2292的CAN總線USB接口適配器的設(shè)計(jì)

請(qǐng)問(wèn)1-Wire網(wǎng)線如何連接USB適配器?

USB接口適配器評(píng)估模塊用戶指南

DS9490 USB至1-Wire/iButton適配器技術(shù)手冊(cè)

評(píng)論