RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

接口1-Wire USB適配器與安卓

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-02-20 09:29 ? 次閱讀

本應(yīng)用筆記詳細介紹了如何連接DS9490R、溫度記錄儀iButton器件和AndroidUSB On-the-Go(OTG)。審查每個部分之間的通信協(xié)議。我們回顧數(shù)據(jù)手冊信息以及如何將其應(yīng)用于終端系統(tǒng)。演示示例代碼的示例 Android 應(yīng)用程序也可供下載。

介紹

睤。智能手機無處不在。智能手機不僅僅是一部電話,而是一臺功能強大的計算機,可以放在口袋里。由于智能手機中可用的計算能力和傳感器不斷增加,現(xiàn)在使用該手機作為其他設(shè)備的接口是切實可行的。本文介紹如何使用 Android 智能手機上的 USB 端口與沒有計算機系統(tǒng)的從屬設(shè)備進行通信。此處的示例使用1-Wire總線通過USB從Android到Thermochron iButton溫度記錄器進行通信。????

系統(tǒng)布局

此應(yīng)用程序的關(guān)鍵是智能手機上的USB端口。當智能手機使用USB移動(OTG)收發(fā)器時,USB主機功能可以通過其他從設(shè)備實現(xiàn),例如鼠標,閃存驅(qū)動器,鍵盤或此處的Thermochron。最新版本的 Android 應(yīng)用程序編程接口 (API) 在應(yīng)用程序級別支持 USB 主機模式。此功能允許最終用戶安裝與 USB 外圍設(shè)備“對話”的應(yīng)用程序,而無需在用戶的智能手機上生根或安裝特殊驅(qū)動程序。

系統(tǒng)框圖如圖1所示。安卓智能手機必須使用 USB OTG 收發(fā)器。通常,手機連接到計算機并充當USB從站,但USB OTG收發(fā)器允許將手機轉(zhuǎn)換為USB主站。這種角色轉(zhuǎn)換需要一根特殊的OTG電纜來提供USB A型端口,并發(fā)出USB從站連接到智能手機的信號。

此應(yīng)用程序是一個主從系統(tǒng),以Android智能手機為主,Thermochron數(shù)據(jù)記錄器作為從機。系統(tǒng)使用USB轉(zhuǎn)1線/iButton(DS9490R)適配器將智能手機與數(shù)據(jù)記錄器橋接。使用網(wǎng)絡(luò)電纜/插座DS1402D-DR8作為1-Wire總線,只需要一條數(shù)據(jù)線。數(shù)據(jù)記錄器是iButton溫度記錄器(DS1921G)。

poYBAGPyzPuAPpDZAAA6xRetAkY441.png?imgver=1


圖1.系統(tǒng)框圖使用DS9490R 1-Wire適配器作為智能手機和應(yīng)用器件之間的接口;DS1402D-DR8總線電纜連接到應(yīng)用器件,此處為DS1921G溫度時線iButton。

1-Wire總線的重要作用

1-Wire總線是單主系統(tǒng)與多從系統(tǒng)之間的接口。1-Wire輸出為漏極開路,采用類似于I2C. 一些1-Wire從機可以由1-Wire總線寄生供電,當不發(fā)生通信時,該總線為從器件中的內(nèi)部電容器充電。每個1-Wire從器件還具有一個工廠光刻的、唯一的64位注冊號,因此每個從器件都可以在總線上輕松識別和監(jiān)控。

1-Wire交易序列(圖2)由復(fù)位脈沖(trst) 發(fā)送給奴隸。復(fù)位脈沖通過按住1-Wire總線預(yù)定的時間段,使所有從機進入已知狀態(tài)。接下來,從機通過存在檢測脈沖(tPD),在主站釋放總線后將其拉下。

pYYBAGPyzPyABPEdAAAIhEOg45o245.png?imgver=1


圖2.1線時序圖。

復(fù)位后,從設(shè)備可以接受針對每個從設(shè)備的各種ROM命令,這些命令由其注冊號標識。匹配ROM的命令僅激活具有正確標識注冊的單個從設(shè)備。搜索ROM用于發(fā)現(xiàn)總線上所有從站的注冊號。因此,盡管我們在這里只顯示一個從器件,但該應(yīng)用可以有多個1-Wire兼容的從器件。

一旦選擇了特定的ROM命令,那么設(shè)備特定的命令就可以由主節(jié)點發(fā)出,在我們的例子中是Android。使用像Thermochron這樣的溫度記錄器作為從站,主機的命令可能涉及寫入或讀取其暫存器或存儲器,或轉(zhuǎn)換溫度。

1-Wire接口沒有時鐘線,因此通信被分成多個時隙(t槽),每個都攜帶一點信息。在時隙開始時,主站會短暫地拉下總線以指示位的開始。傳輸零點時,主站或從站繼續(xù)保持總線低電平。傳輸一個時,主站或從站釋放總線。主站或從站按規(guī)定的時間讀取總線(t樣本) 之后,母版指示時隙的開始。

與1線適配器的USB通信

DS9490R是1線轉(zhuǎn)USB適配器,具有四個USB端點:控制、中斷、批量輸入()和批量輸出()。通常,控制端點用于向1-Wire適配器發(fā)送命令并設(shè)置傳輸類型。批量輸入/輸出用于數(shù)據(jù)傳輸,中斷終結(jié)點用于接收狀態(tài)寄存器和返回消息等時間敏感信息。epINepOUT

使用安卓作為 USB 主機

這里提出的設(shè)計是有先例的。Android API 從版本 3.1 開始,支持 USB 主機模式。曼努埃爾·迪·塞爾博1通過USB將Arduino微控制器板與Android手機連接。我們的應(yīng)用修改了DiCerbo的工作,將基本概念擴展到DS9490R USB轉(zhuǎn)1-Wire適配器,并將1-Wire適配器與Thermochron配合使用,而不是微控制器

DiCerbo示例代碼是該項目的基礎(chǔ)。該代碼首先請求用戶允許訪問連接到Android智能手機的USB設(shè)備。然后,程序搜索供應(yīng)商和設(shè)備 ID,并設(shè)置 USB 終結(jié)點以進行通信。該代碼提供 ,用于執(zhí)行批量和控制傳輸?shù)?USB 設(shè)備連接;它為批量輸入和 .這與所有系統(tǒng)用于初始化USB并將低級USB命令寫入從站的基本設(shè)置相同。

現(xiàn)在我們將演示如何使用Android在溫度上執(zhí)行溫度轉(zhuǎn)換并讀取溫度結(jié)果。每個事務(wù)步驟(表 1)都以 開頭,后跟選擇從設(shè)備,然后是最終特定于設(shè)備的命令。

表 1.1-Wire主機對溫度數(shù)據(jù)記錄器執(zhí)行的命令

1線復(fù)位 匹配光盤 轉(zhuǎn)換溫度
1線復(fù)位 匹配光盤 讀存儲器/寄存器

1-Wire復(fù)位通過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)

控制傳輸用于啟動 、 或 。參數(shù)在數(shù)據(jù)手冊中描述。稍后,我們將說明如何使用此函數(shù)。

批量傳輸用于讀/寫內(nèi)存。這里的端點將是 或 ,取決于我們是讀取數(shù)據(jù)還是寫入數(shù)據(jù)。終結(jié)點緩沖區(qū)存儲要發(fā)送的數(shù)據(jù),或者為空以存儲接收的數(shù)據(jù)。長度是接收或發(fā)送的字節(jié)數(shù)。超時是以毫秒為單位的 USB 超時設(shè)置。

// Performs a bulk transaction on the given endpoint.
int bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

此處顯示了將轉(zhuǎn)換溫度命令 (0x44) 發(fā)送到溫度時線的代碼。如前所述,第一行1-Wire復(fù)位通過控制傳輸發(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行中,匹配訪問控制傳輸在0-Wire總線上發(fā)送一個、55x1、匹配訪問ROM命令,后跟所需從站的ROM注冊號。1-Wire Reset2索引參數(shù)設(shè)置為 0x55。match 訪問命令要求用戶將注冊號預(yù)加載到 ,如代碼的第 2 行和第 3 行所示。功能參數(shù)在DS2490數(shù)據(jù)資料中描述。

溫度小時管的數(shù)據(jù)表將0x44標識為開始溫度轉(zhuǎn)換的代碼。(表2)。轉(zhuǎn)換溫度命令通過使用塊 I/O 操作寫入0x44來執(zhí)行。對于塊 I/O 操作,將輸出數(shù)據(jù)寫入,如上面的第 6 行所示。然后,第 7 行中的控制傳輸執(zhí)行塊 I/O 命令。epOUT

表 2.溫度存儲器和控制命令(使用批量 I/O)

內(nèi)存/控制命令 命令代碼 描述
讀內(nèi)存 0xF0 從內(nèi)部寄存器讀取數(shù)據(jù)。按照寄存器地址的命令進行操作,首先使用 LSb。繼續(xù)為每個字節(jié)讀取0xff虛擬數(shù)據(jù)。
轉(zhuǎn)換溫度 0x44 開始溫度轉(zhuǎn)換。

下面的代碼顯示了通過USB批量I/O傳輸讀取溫度寄存器數(shù)據(jù)的順序。溫度時線的讀取存儲器命令代碼0xF0(請參閱表 2)。接下來是 0x0211 的目標寄存器地址 (TA),該地址具有只讀訪問權(quán)限,并分為兩個字節(jié)(第 8 行)。在1-Wire總線上寫入和發(fā)送的數(shù)據(jù)全部環(huán)回主機,因為總線僅由一根線組成。然后,主站需要將虛擬數(shù)據(jù)(0xff)寫入總線。從機響應(yīng)并覆蓋0xff數(shù)據(jù),因為如前所述,1-Wire是一條漏極開路總線。凈效應(yīng)是數(shù)據(jù)與0xff的 AND。

這一系列命令被放到1-Wire總線(第9行和第10行)上,控制傳輸通過發(fā)送命令來執(zhí)行命令?;刈x數(shù)據(jù)位于 USB 終結(jié)點 中。這是在第 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 所示。當用戶運行程序并按“枚舉”按鈕時,將顯示一個屏幕,詢問訪問 USB 設(shè)備的權(quán)限。用戶點擊確定后,應(yīng)用程序?qū)?zhí)行搜索并在下拉菜單中列出所有從站的64位注冊號。當用戶選擇特定的注冊號時,應(yīng)用程序?qū)?zhí)行上述例程,并顯示來自溫度時線的實時溫度。枚舉按鈕和注冊號的選擇連接到生成一個 .這些任務(wù)是完成請求的操作并在完成后更新用戶界面 (UI) 的線程。這些任務(wù)不會在 UI 線程中執(zhí)行,以防止它在等待 iButton 響應(yīng)時凍結(jié)。

在最終應(yīng)用中,代碼被抽象為一般的1-Wire操作,如、、、、和。此外,這些命令一起可以進一步抽象為 iButton 函數(shù),例如 和 。這允許調(diào)用正確的函數(shù)。

poYBAGPyzP-AK-o5AAG3MKeHbv4545.png?imgver=1

圖3.Android 應(yīng)用程序,USB 權(quán)限(左)。特定溫度時線iButton的溫度測量由其注冊號(右)標識。

示例應(yīng)用包含用于將用戶交互(如按下按鈕)鏈接到1-Wire從機執(zhí)行命令的UI代碼。除DS1921G溫度時線外,該應(yīng)用還支持iButton溫度記錄儀(DS1922L/DS1922T)和iButton濕度記錄器(DS1923)。如圖3所示,每個器件的注冊號分為三個字段:家族代碼、序列號和循環(huán)冗余校驗(CRC)??梢詮拿總€注冊號讀取家族代碼,以確定確切的設(shè)備型號。

結(jié)論

此示例應(yīng)用程序的代碼是使用 Eclipse 編程的,可供下載。訪問整個項目文件后,可以輕松瀏覽和修改源代碼。項目代碼使用抽象函數(shù)間接使用低級 USB 命令。本文末尾的一般參考資料有助于理解Android USB API和1-Wire命令。這些資源廣泛用于開發(fā)此示例應(yīng)用程序。可能的修改可能會改變應(yīng)用,使其可與其他5V 1-Wire從器件(如存儲器)配合使用,或啟用其他iButton功能??啥ㄖ频倪x項很多,最終結(jié)果取決于設(shè)計人員的系統(tǒng)要求。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 智能手機
    +關(guān)注

    關(guān)注

    66

    文章

    18477

    瀏覽量

    180107
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264474
  • 適配器
    +關(guān)注

    關(guān)注

    8

    文章

    1951

    瀏覽量

    67997
收藏 人收藏

    評論

    相關(guān)推薦

    基于DS2432的USB1-Wire總線適配器的設(shè)計

    ?! ?Wire測量網(wǎng)絡(luò)的實現(xiàn)需要與PC主機相結(jié)合,所以在1-Wire總線組成的測量網(wǎng)絡(luò)中,網(wǎng)絡(luò)適配器是必不可少的,它擔負著主機監(jiān)控單元與網(wǎng)絡(luò)節(jié)點之間數(shù)據(jù)傳輸?shù)闹匾蝿?wù)。USB
    發(fā)表于 07-11 07:24

    Ginkgo USB-CAN接口適配器

    、OpenBSD、FreeBSD、Solaris產(chǎn)品包含:- Ginkgo USB-CAN接口適配器 x 1- USB數(shù)據(jù)線 x
    發(fā)表于 10-09 15:09

    可編程USB轉(zhuǎn)串口適配器UART

    /CAN/1-Wire 適配器 USB2S(USB To Serial ports)是多種數(shù)字接口物理層協(xié)議轉(zhuǎn)發(fā)器, 自帶強大靈活的 S2S
    發(fā)表于 08-06 06:35

    DS9097U RS232至1-Wire接口適配器

    DS9097U是一款成熟的RS232至1-Wire?的接口適配器,完成RS232電平轉(zhuǎn)換,有源產(chǎn)生1-Wire通信信號。配合對應(yīng)的TMEX軟件驅(qū)動器,該
    發(fā)表于 06-14 11:53 ?2608次閱讀
    DS9097U RS232至<b class='flag-5'>1-Wire</b><b class='flag-5'>接口</b><b class='flag-5'>適配器</b>

    USB充電用高效AC適配器USB充電用高效AC適配器

    USB充電用高效AC適配器USB充電用高效AC適配器
    發(fā)表于 09-15 14:29 ?23次下載
    <b class='flag-5'>USB</b>充電用高效AC<b class='flag-5'>適配器</b><b class='flag-5'>USB</b>充電用高效AC<b class='flag-5'>適配器</b>

    可編程開發(fā)板USB轉(zhuǎn)串口適配器USB2S用戶手冊

    可編程USB轉(zhuǎn)UART/I2C/SMBusS/SPI/CAN/1-Wire適配器USB2S(USB To Serial ports)是多種數(shù)
    發(fā)表于 05-30 16:51 ?2次下載

    可編程USB轉(zhuǎn)串口適配器UART/USB2S用戶手冊

    可編程 USB 轉(zhuǎn) UART/I2C/SMBus/SPI/CAN/1-Wire 適配器 USB2S(USB To Serial ports)
    發(fā)表于 06-22 15:01 ?0次下載

    I BUS適配器BMW音頻

    電子發(fā)燒友網(wǎng)站提供《I BUS適配器BMW音頻.zip》資料免費下載
    發(fā)表于 08-05 10:01 ?0次下載
    I BUS<b class='flag-5'>適配器</b>BMW<b class='flag-5'>安</b><b class='flag-5'>卓</b>音頻

    可編程USB轉(zhuǎn) Wire適配器USB2S結(jié)構(gòu)尺寸及電壓設(shè)置

    可編程USB轉(zhuǎn) UART/I2C /SMBusS/SPI/CAN/1 -Wire適配器USB2S結(jié)構(gòu)尺寸及電壓設(shè)置 1.1 外形尺寸 外形尺
    的頭像 發(fā)表于 08-24 09:21 ?1155次閱讀
    可編程<b class='flag-5'>USB</b>轉(zhuǎn)  <b class='flag-5'>Wire</b><b class='flag-5'>適配器</b><b class='flag-5'>USB</b>2S結(jié)構(gòu)尺寸及電壓設(shè)置

    可編程 USB 轉(zhuǎn)串口適配器開發(fā)板的詳細接口與功能

    可編程 USB 轉(zhuǎn)串口適配器開發(fā)板的詳細接口與功能 可編程 USB 轉(zhuǎn) UART/I2C/SMBus/SPI/CAN/1-Wire
    的頭像 發(fā)表于 08-25 09:31 ?1111次閱讀
    可編程 <b class='flag-5'>USB</b> 轉(zhuǎn)串口<b class='flag-5'>適配器</b>開發(fā)板的詳細<b class='flag-5'>接口</b>與功能

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

    USB 轉(zhuǎn)串口適配器開發(fā)板? 1.1 GD25QxxFLASH 芯片? 注意:1-Wire 接口與 SPI 接口不可同時連接被測芯片。?
    的頭像 發(fā)表于 09-08 13:16 ?1320次閱讀
    可編程<b class='flag-5'>USB</b>轉(zhuǎn)串口<b class='flag-5'>適配器</b>開發(fā)板介紹  UART轉(zhuǎn)SPI應(yīng)用

    可編程USB轉(zhuǎn)串口適配器接口與功能介紹

    可編程USB 轉(zhuǎn) UART/I2C/SMBus/SPI/CAN/1-Wire 適配器 USB2S(USB To Serial ports)是
    的頭像 發(fā)表于 11-18 14:42 ?1007次閱讀

    基于LPC2292的CAN總線USB接口適配器的設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于LPC2292的CAN總線USB接口適配器的設(shè)計.pdf》資料免費下載
    發(fā)表于 10-09 16:53 ?1次下載
    基于LPC2292的CAN總線<b class='flag-5'>USB</b><b class='flag-5'>接口</b><b class='flag-5'>適配器</b>的設(shè)計

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

    ADI/Maxim的 DS1402 系列1-Wire網(wǎng)絡(luò)電纜提供與任何USB、串行或并行端口1-Wire適配器的連接。經(jīng)常有客戶詢問DS1402如何連接
    的頭像 發(fā)表于 03-28 11:39 ?785次閱讀
    請問<b class='flag-5'>1-Wire</b>網(wǎng)線如何連接<b class='flag-5'>USB</b><b class='flag-5'>適配器</b>?

    USB接口適配器評估模塊用戶指南

    電子發(fā)燒友網(wǎng)站提供《USB接口適配器評估模塊用戶指南.pdf》資料免費下載
    發(fā)表于 11-20 11:49 ?0次下載
    <b class='flag-5'>USB</b><b class='flag-5'>接口</b><b class='flag-5'>適配器</b>評估模塊用戶指南
    RM新时代网站-首页