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

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

3天內不再提示

深入理解單總線協(xié)議

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-15 00:46 ? 次閱讀

1 單總線簡介

目前常用的微機與外設之間進行數(shù)據(jù)傳輸?shù)拇锌偩€主要有I2C總線、SPI總線和SCI總線。其中I2C總線以同步串行2線方式進行通信(一條時鐘線,一條數(shù)據(jù)線),SPI總線則以同步串行3線方式進行通信(一條時鐘線,一條數(shù)據(jù)輸入線,一條數(shù)據(jù)輸出線),而SCI總線是以異步方式進行通信(一條數(shù)據(jù)輸入線,一條數(shù)據(jù)輸出線)的。這些總線至少需要兩條或兩條以上的信號線。本文要介紹的總線協(xié)議和以上總線都不同,只有一根線,也就是單總線。

總線技術(1-Wire Bus)是美國的達拉斯半導體公司Maxim全資子公司Dallas)推出了一項特有的技術,它采用單根信號線,既可傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單總線技術具有線路簡單,硬件開銷少,成本低廉,便于總線擴展和維護等優(yōu)點。單總線的數(shù)據(jù)傳輸速率一般為16.3Kbit/s,最大可達142 Kbit/s,通常情況下采用100Kbit/s以下的速率傳輸數(shù)據(jù)。

單總線適用于單個主機系統(tǒng),能夠控制一個或多個從機設備。當只有一個從機位于總線上時,系統(tǒng)可按照單節(jié)點系統(tǒng)操作;而當多個從機位于總線上時,則系統(tǒng)按照多節(jié)點系統(tǒng)操作。主機可以是微控制器,從機可以是單總線器件,如下圖所示。

1686760887837nibxskuo8o

圖1單總線多節(jié)點示意圖

本文將從三個方面介紹單總線: 硬件結構、時序控制、實際應用 。

2 單總線硬件結構

單總線只有一根數(shù)據(jù)線系統(tǒng)中的數(shù)據(jù)交換、控制都在這根線上完成。設備(主機或從機)通過__一個漏極開路或三態(tài)端口連至該數(shù)據(jù)線__,這樣允許設備不發(fā)送數(shù)據(jù)時釋放總線,以便其他設備使用總線,其內部等效電路如圖所示。

1686760889037zq02ltu4qz

圖2單總線硬件接口

單總線要求外接一個約4.7K的上拉電阻,這樣當總線閑置時,狀態(tài)為高電平。主機和從機之間的通信通過以下三個步驟完成: 初始化1-wire器件,識別1-wire器件,交換數(shù)據(jù)

另外,在寄生方式供電時,為了保證單總線器件在某些工作狀態(tài)下(如溫度轉換期間、EEPROM寫入等)具有足夠的電源電流,必須在總線上提供強上拉,也就是在處理器與總線之間增加一個MOS管。

3 單總線時序控制

由于單總線是主從結構,只有主機呼叫從機時,從機才能答應,因此主機訪問1-wire器件都必須嚴格遵循單總線命令序列: 初始化、ROM命令、功能命令 。如果出現(xiàn)序列混亂,1-wire器件不會響應主機(搜索ROM命令,報警搜索命令除外)。因此,器件需要要求遵循嚴格的通信協(xié)議,以保證數(shù)據(jù)的完整性。

根據(jù)單總線的協(xié)議要求,需嚴格遵循以下命令序列:

(1)初始化:單總線上所有傳輸過程都需要以初始化開始

(2)ROM命令:在主機檢測到從機的應答脈沖后,就可以發(fā)出ROM命令

(3)功能命令:每個單總線器件都有自己的專用指令,需要參照各自的數(shù)據(jù)手冊這些信號,

初始化時序包括主機發(fā)送的復位脈沖和從機發(fā)出的應答脈沖。主機通過拉低單總線至少480us,以產生TX復位脈沖;然后主機釋放總線,并進入RX接收模式,當主機釋放總線時,總線由低電平跳變?yōu)楦唠娖綍r產生一上升沿,單總線器件檢測到這上升沿后,延時1560us,接著單總線器件通過拉低總線60240us,以產生應答脈沖。主機接收到從機應答脈沖后,說明有單總線器件在線,然后主機就開始對從機進行ROM命令和功能命令操作。

寫1、寫0和讀時序。在每一個時序中,總線只能傳輸一位數(shù)據(jù)。所有的讀寫時序至少需要60us,且每兩個獨立的時序之間至少需要1us的恢復時間。讀寫時序均起始于主機拉低總線。在寫時序中,主機拉低總線后保持至少60us的低電平則向單總線器件寫0。單總線器件又在主機發(fā)發(fā)出讀時序時才向主機傳送數(shù)據(jù),所以當主機向單總線器件發(fā)出數(shù)據(jù)命令后,必須馬上產生讀時序,以便單總線能傳輸數(shù)據(jù)。在主機發(fā)出讀時序之后,單總線器件才開始在總線上發(fā)送0或1,若單總線器件發(fā)送1,則保持總線高電平,若發(fā)送0,則拉低總線。單總線器件發(fā)送之后,保持有效時間,因而,主機在讀時序期間必須釋放總線,并且必須在15us之中采樣總線狀態(tài),從而接收到從機發(fā)送的數(shù)據(jù)。

除了應答脈沖外都是由主機發(fā)出同步信號,并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的__低位在前__。

【注】不管是ROM命令還是功能命令,最終都是通過控制時序來完成的,換句話說,命令只是對一些列時序控制分別命名罷了。

4 單總線應用(DS18B20)

目前,單總線器件的主要有數(shù)字溫度傳感器(如DS18B20));A/D轉換器(如DS2450)門禁、身份識別器(如DS1990A);單總線控制器(如DSIWM)等等。

前面講解了單總線的時序控制,下面將結合DS18B20來具體講解單總線的指令操作與時序控制過程。

4.1 DS18B20的硬件連接方式

DS18B20有兩種連接方式:外部電源供電和寄生電源供電。

1.外電電源供電方式

在外部電源供電方式下,DS18B20的工作電源由VCC引腳引入,不存在電源電流不足的問題,可以保證轉換的精度,在單總線上還可以掛在任意多個設備。值得注意的是,在外部供電的方式下,GND引腳不能懸空,懸空會導致溫度讀取失敗。

采用外部電源供電是DS18B20的最佳方式,工作穩(wěn)定,抗干擾強,電路簡單,可以開發(fā)多點測溫系統(tǒng)。

C:\\Users\\BruceOu\\Desktop\\1.png

圖3外部供電方式

2.寄生電源供電方式

在寄生電源供電方式下,DS18B20只需要一個線就可正常工作,無需外部供電,值得注意的,此種供電方式,需要使用一個MOS管將單總線強上拉以此提供充足的電流,在發(fā)出任何涉及到拷貝EEPROM存儲器或啟動溫度轉換的指令后,必須最多10us把I/O強上拉。

這種供電方式也可適用于多點測溫,但需要多一根I/O線來進行強上拉切換。

1686760890413niyp871uxm

圖4寄生電源供電方式

另外,如果只有一個從機設備,也可不需要增加MOS管,但是當I/O提供的電能不夠,則會導致無法轉換溫度或溫度誤差大。

4.2 DS18B20的指令

DS18B20的指令整體上分為兩類: ROM指令和存儲器操作指令

1.ROM指令

在主機檢測到應答脈沖后,就可以發(fā)出 ROM 命令。這些命令與各個從機設備的唯一64位 ROM代碼相關,允許主機在單總線上連接多個從機設備時,指定操作某個從機設備。這些命令還允許主機能夠檢測到總線上有多少個從機設備以及其設備類型,或者有沒有設備處于報警狀態(tài)。

從機設備可能支持5種 ROM 命令(實際情況與具體型號有關),每種命令長度為8位。主機在發(fā)出功能命令之前,必須送出合適的 ROM 命令。ROM命令的操作流程圖如下圖所示。

1686760891347rdrvvcf8iq

圖5 DS18B20 ROM指令流程

下面將簡要地介紹各個 ROM 指令的功能,以及在何種情況下使用。

(1) READ ROM [33h](僅適合于單節(jié)點)

這條指令__用于讀取DS18B20的64位序列號__。值得注意的是,該指令__僅適用于總線上只有一個從機設備__。它允許主機直接讀出從機的64位 ROM 代碼,無須執(zhí)行搜索 ROM 過程。如果該命令用于多節(jié)點系統(tǒng),則必然發(fā)生數(shù)據(jù)沖突,因為每個從機設備都會響應該命令。

(2) MATCH ROM [55h]

匹配 ROM 指令,后跟隨64位 ROM序列號 ,從而允許主機訪問多節(jié)點系統(tǒng)中某個指定的從機設備。僅當從機完全匹配64位 ROM 代碼時,才會響應主機隨后發(fā)出的功能命令;其它設備將處于等待復位脈沖狀態(tài)。這條指令適用于單個或者多個DS18B20。

(3) SKIP ROM [CCh](僅適合于單節(jié)點)

主機通過執(zhí)行該指令, 訪問總線上的從機設備,而無須發(fā)出任何 ROM 指令信息 。例如,主機通過在發(fā)出跳越 ROM 指令后跟隨轉換溫度指令 [44h] ,就可以同時命令總線上所有的 DS18B20 開始轉換溫度,這樣大大節(jié)省了主機的時間。值得注意,如果跳越 ROM指令跟隨的是讀暫存器 [BEh] 的指令(包括其它讀操作命令),則該命令只能應用于單節(jié)點系統(tǒng),否則將由于多個節(jié)點都響應該命令而引起數(shù)據(jù)沖突。

(4) SEARCH ROM [F0h]

當系統(tǒng)初始上電時,主機必須找出總線上所有從機設備,即__采用搜索指令來識別總線上的所有的從機64位序列號__,這樣主機就能夠判斷出從機的數(shù)目和類型。主機通過重復執(zhí)行搜索 ROM 循環(huán)(搜索ROM指令跟隨著位數(shù)據(jù)交換),以找出總線上所有的從機設備。如果總線只有一個從機設備,則可以采用讀 ROM 指令來替代搜索 ROM 指令。在每次執(zhí)行完搜索 ROM 循環(huán)后,主機必須返回至指令序列的第一步(初始化)。

(5) ALARM SEARCH ROM [ECh]

除那些設置了報警標志的從機響應外,該命令的工作方式完全等同于搜索 ROM 指令。該__指令允許主機設備判斷那些從機設備發(fā)生了報警__(如最近的測量溫度過高或過低等)。同搜索 ROM 指令一樣,在完成報警搜索循環(huán)后,主機必須返回至指令序列第一步。

【注】在溫度轉換和復制暫存器數(shù)據(jù)至 EEPROM 期間,主機必須在單總線上允許強上拉。并且在此期間,總線上不能進行其它數(shù)據(jù)傳輸。

2.存儲器操作指令

在主機發(fā)出 ROM 命令,以訪問某個指定的 DS18B20,接著就可以發(fā)出 DS18B20 支持的某個功能命令。這些命令允許主機寫入或讀出DS18B20暫存器、啟動溫度轉換以及判斷從機的供電方式。DS18B20的功能命令流程如下圖所示。

1686760897827cre64vxo18

圖6 DS18B20 功能指令流程

(1) CONVERT T [44h]

啟動溫度轉換指令,溫度轉換后存放在Byte0和Byte1中,如果使用寄生電源,總線控制必須在發(fā)出該條指令后的10us內強制上拉,以保證DS18B20的供電充足。

(2) WRITE SCRATCHPAD [4Eh]

在寫暫存器指令后可向DS18B20的暫存器TH和TL以及配置寄存器中寫入數(shù)據(jù)。

(3) READ SCRATCHPAD [BEh]

讀暫存器指令,發(fā)送該指令后DS18B20將從第一個字節(jié)開始,依次送出9個字節(jié)的內容,如果不想讀完所有的字節(jié), 控制器可以在任意時間發(fā)出復位指令來終止讀取數(shù)據(jù)

(4) COPY SCRATCHPAD [48h]

復制暫存器指令將TH和TL與配置寄存器的中的內容拷貝到EEPROM中。如果使用寄生電源??偩€控制器必須在這條指令發(fā)出后的10us內啟動強上拉,并保持至少10ms的時間。

(5) RECALL E2 [B8h]

復制EEPROM指令把TH和TL與配置寄存器的值拷貝會暫存器中,這種拷貝操作在DS18B20上電后自動執(zhí)行,上電后,暫存器中就存在有效的數(shù)據(jù)。

(6) READ POWER SUPPLY [B4h]

讀電源模式指令,發(fā)給DS18B20后,再發(fā)出讀時間隙,返回電源模式,0位寄生電源,1位外部電源。

4.3 DS18B20時序控制

單總線協(xié)議定義了幾種信號類型: 復位脈沖、答應脈沖、寫0、寫1、讀0和讀1時序 。下面針對DS18B20介紹其相應的時序控制圖。

1.初始化序列:復位和應答脈沖

單總線上的所有通信都是以初始化序列開始,包括:主機發(fā)出的復位脈沖及從機的應答脈沖,如下圖所示。

1686760905611ubeh0hezzg

圖7初始化時序圖

在主機初始化過程,主機通過__拉低單總線至少480us__,當然在480~960us的低電平都是可以的, 以產生 (Tx) 復位脈沖 。接著,主機釋放總線變?yōu)楦唠娖剑⑦M入接收模式 (Rx)在,隨后的480us內,對總線進行檢測,如果有低電平,則說明總線上有期間作出應答,否則說明無設備在總線上。

作為從機的DS18B20會一直檢測總線上是否有480~960us的低電平信號,如果檢測到復位脈沖,則__延時15-60us,接著通過拉低總線60-240us,以產生應答脈沖__。當從機發(fā)出響應主機的應答脈沖時,即向主機表明它處于總線上,且工作準備就緒。若檢測不到復位脈沖則一直處于檢測等待中。

2.主機讀寫時序

在寫時序期間,主機向單總線器件寫入數(shù)據(jù);而在讀時序期間,主機讀入來自從機的數(shù)據(jù)。在每一個時序,總線只能傳輸一位數(shù)據(jù)。

1686760906642e8epe7sr0g

圖8讀寫時序圖

  • 寫時序

寫時序有兩種:“寫1”和“寫0”。所有寫時序至少需要60us,且在兩次獨立的寫時隙之間至少需要1us的恢復時間。兩種寫時序均起始于主機拉低總線。

__寫0時序__的過程:在主機拉低總線后,只需在整個時序期間保持低電平即可(至少60us)。

__寫1時序__的過程:主機在拉低總線后,接著必須在15us之內釋放總線,由5k上拉電阻將總線拉至高電平。一直到寫周期結束。

總的來說,在寫時序起始后15-60us期間,單總線器件采樣總線電平狀態(tài)。 如果在此期間采樣為高電平,則邏輯1被寫入該器件:如果為低電平,則寫入邏輯0 。

  • 讀時序

單總線器件僅在主機發(fā)出讀時序時,才向主機傳輸數(shù)據(jù),所以,在主機發(fā)出讀數(shù)據(jù)命令后,必須馬上產生讀時序,以便從機能夠傳輸數(shù)據(jù)。

所有讀時序至少需要60us,且在兩次獨立的讀時序之間至少需要1us的恢復時間。每個讀時序都由主機發(fā)起,至少拉低總線1us。在主機發(fā)起讀時序之后,單總線器件才開始在總線上發(fā)送0或1。

若從機發(fā)送1,則保持總線為高電平;若發(fā)送0,則拉低總線。當發(fā)送0時,從機在該時序結束后釋放總線,由上拉電阻將總線拉回至空閑高電平狀態(tài)。從機發(fā)出的數(shù)據(jù)在起始時隙之后,保持有效時間15us,因而,主機在讀時序期間必須釋放總線,并且在時序起始后的15us之內采樣總線狀態(tài)。

【注】無論是讀是寫,都是以主機把總線至少拉低1us開始,無論是讀0還是寫0,都是以總線拉高至少1us結束。

4.4 DS18B20溫度讀取流程

當主機對多個DS18B20的某一設備進行操作時,主機首先逐個與掛在總線設備掛接,使用搜索ROM(FOh)指令,讀出其序列號(33H),然后發(fā)送匹配指令(55h),緊接著提供64位序列號,之后就是操作該DS18B20了。

如果只有一個DS18B20測溫,就不需要搜索ROM、讀ROM以及匹配ROM操作了,只需要指令跳過ROM(CCh)指令,就可指令溫度轉換(44h)和讀取溫度(BEh)操作了。

C:\\Users\\BruceOu\\Desktop\\導圖1.png

圖9DS18B20溫度獲取流程

總的來說,單線接口訪問DS18B20的流程如下:

1.ROM操作

A.主機復位操作,即對DS18B20初始化;

B.主機對DS18B20寫跳過ROM指令(CCh),單設備不需要其他操作;

C主機對DS18B20寫啟動溫度轉換(44h),啟動溫度轉換;

D.時等待溫度轉換值,當然延時大小還由分辨率決定。

【注】每個指令在寫的時候都是__低位在前,高位在后__。

2.存儲器操作

A.主機復位操作;

B.主機對DS18B20寫跳過ROM指令(CCh);

C.主機發(fā)出讀取RAM指令(BEh),DS18B20依次發(fā)送9個字節(jié)數(shù)據(jù),在字節(jié)在前,高字節(jié)在后。如果只想讀取溫度值,在讀完前兩個字節(jié)就不在讀取后面的數(shù)據(jù)。

5 總結

單總線技術以其線路簡單、硬件開銷少、成本低廉、軟件設計簡單優(yōu)勢而有著無可比擬的應用前景。基于單總線技術能較好地解決傳統(tǒng)識別器普遍存在的攜帶不便、易損壞、易受腐饋、易受電磁干擾等不足,可應用于高度安全的門禁、身份識別等領域。其通信可靠簡單,很容易實現(xiàn)。因此單總線技術有著廣闊的應用前景,是值得產注的一個發(fā)展領域。

審核編輯:湯梓紅

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

    關注

    17

    文章

    1666

    瀏覽量

    90718
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1452

    瀏覽量

    122238
  • 單總線
    +關注

    關注

    1

    文章

    36

    瀏覽量

    12368
  • 總線協(xié)議

    關注

    0

    文章

    111

    瀏覽量

    14811
收藏 人收藏

    評論

    相關推薦

    深入理解Android

    深入理解Android
    發(fā)表于 08-20 15:30

    深入理解和實現(xiàn)RTOS_連載

    和trcohili的帖子。深入理解和實現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第一篇,"RTOS的前生今世"。通過軟件系統(tǒng)結構的比對簡要的介紹rtos為何而生。如果讀者對RTOS
    發(fā)表于 05-29 11:20

    深入理解和實現(xiàn)RTOS_連載

    和trcohili的帖子。trochili rtos完全是作者興趣所在,且行且堅持,比沒有duo。深入理解和實現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第一篇,"RTOS的前生今世"
    發(fā)表于 05-30 01:02

    深入理解lte-a

    深入理解LTE-A
    發(fā)表于 02-26 10:21

    深入理解STM32

    時鐘系統(tǒng)是處理器的核心,所以在學習STM32所有外設之前,認真學習時鐘系統(tǒng)是必要的,有助于深入理解STM32。下面是從網上找的一個STM32時鐘框圖,比《STM32中文參考手冊》里面的是中途看起來清晰一些:重要的時鐘:PLLCLK,SYSCLK,HCKL,PCLK1,...
    發(fā)表于 08-12 07:46

    對棧的深入理解

    為什么要深入理解棧?做C語言開發(fā)如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法預測亂飛現(xiàn)象。所以對棧的深入理解是非常重要的。注:動畫如果看不清楚可以電腦看更清晰啥是棧先來看一段動畫:沒有
    發(fā)表于 02-15 07:01

    為什么要深入理解

    [導讀] 從這篇文章開始,將會不定期更新關于嵌入式C語言編程相關的個人認為比較重要的知識點,或者踩過的坑。為什么要深入理解棧?做C語言開發(fā)如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法
    發(fā)表于 02-15 06:09

    深入理解Android之資源文件

    深入理解Android之資源文件
    發(fā)表于 01-22 21:11 ?22次下載

    深入理解Android》文前

    深入理解Android》文前
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android:卷I》

    深入理解Android:卷I》
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android網絡編程

    深入理解Android網絡編程
    發(fā)表于 03-19 11:26 ?1次下載

    如何更加深入理解I2C總線、協(xié)議及應用

    更加深入理解I2C總線協(xié)議及應用
    的頭像 發(fā)表于 03-20 09:29 ?3213次閱讀
    如何更加<b class='flag-5'>深入理解</b>I2C<b class='flag-5'>總線</b>、<b class='flag-5'>協(xié)議</b>及應用

    深入理解MOS管電子版資源下載

    深入理解MOS管電子版資源下載
    發(fā)表于 07-09 09:43 ?0次下載

    基于ZigBee協(xié)議單總線測溫網絡的設計

    基于ZigBee協(xié)議單總線測溫網絡的設計(工控技術共享平臺)-文檔為基于ZigBee協(xié)議單總線測溫網絡的設計總結文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,,,
    發(fā)表于 09-30 12:49 ?10次下載
    基于ZigBee<b class='flag-5'>協(xié)議</b>的<b class='flag-5'>單總線</b>測溫網絡的設計

    LCS2110R-S的單總線協(xié)議分析

    LCS2110R-S的單總線為標準單總線協(xié)議,且支持單總線喚醒低功耗等功能。
    發(fā)表于 07-21 11:51 ?685次閱讀