1 單總線簡介
目前常用的微機(jī)與外設(shè)之間進(jìn)行數(shù)據(jù)傳輸?shù)拇锌偩€主要有I2C總線、SPI總線和SCI總線。其中I2C總線以同步串行2線方式進(jìn)行通信(一條時鐘線,一條數(shù)據(jù)線),SPI總線則以同步串行3線方式進(jìn)行通信(一條時鐘線,一條數(shù)據(jù)輸入線,一條數(shù)據(jù)輸出線),而SCI總線是以異步方式進(jìn)行通信(一條數(shù)據(jù)輸入線,一條數(shù)據(jù)輸出線)的。這些總線至少需要兩條或兩條以上的信號線。本文要介紹的總線協(xié)議和以上總線都不同,只有一根線,也就是單總線。
單總線技術(shù)(1-Wire Bus)是美國的達(dá)拉斯半導(dǎo)體公司(Maxim全資子公司Dallas)推出了一項(xiàng)特有的技術(shù),它采用單根信號線,既可傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單總線技術(shù)具有線路簡單,硬件開銷少,成本低廉,便于總線擴(kuò)展和維護(hù)等優(yōu)點(diǎn)。單總線的數(shù)據(jù)傳輸速率一般為16.3Kbit/s,最大可達(dá)142 Kbit/s,通常情況下采用100Kbit/s以下的速率傳輸數(shù)據(jù)。
單總線適用于單個主機(jī)系統(tǒng),能夠控制一個或多個從機(jī)設(shè)備。當(dāng)只有一個從機(jī)位于總線上時,系統(tǒng)可按照單節(jié)點(diǎn)系統(tǒng)操作;而當(dāng)多個從機(jī)位于總線上時,則系統(tǒng)按照多節(jié)點(diǎn)系統(tǒng)操作。主機(jī)可以是微控制器,從機(jī)可以是單總線器件,如下圖所示。
圖1單總線多節(jié)點(diǎn)示意圖
本文將從三個方面介紹單總線: 硬件結(jié)構(gòu)、時序控制、實(shí)際應(yīng)用 。
2 單總線硬件結(jié)構(gòu)
單總線只有一根數(shù)據(jù)線系統(tǒng)中的數(shù)據(jù)交換、控制都在這根線上完成。設(shè)備(主機(jī)或從機(jī))通過__一個漏極開路或三態(tài)端口連至該數(shù)據(jù)線__,這樣允許設(shè)備不發(fā)送數(shù)據(jù)時釋放總線,以便其他設(shè)備使用總線,其內(nèi)部等效電路如圖所示。
圖2單總線硬件接口圖
單總線要求外接一個約4.7K的上拉電阻,這樣當(dāng)總線閑置時,狀態(tài)為高電平。主機(jī)和從機(jī)之間的通信通過以下三個步驟完成: 初始化1-wire器件,識別1-wire器件,交換數(shù)據(jù) 。
另外,在寄生方式供電時,為了保證單總線器件在某些工作狀態(tài)下(如溫度轉(zhuǎn)換期間、EEPROM寫入等)具有足夠的電源電流,必須在總線上提供強(qiáng)上拉,也就是在處理器與總線之間增加一個MOS管。
3 單總線時序控制
由于單總線是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時,從機(jī)才能答應(yīng),因此主機(jī)訪問1-wire器件都必須嚴(yán)格遵循單總線命令序列: 初始化、ROM命令、功能命令 。如果出現(xiàn)序列混亂,1-wire器件不會響應(yīng)主機(jī)(搜索ROM命令,報(bào)警搜索命令除外)。因此,器件需要要求遵循嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。
根據(jù)單總線的協(xié)議要求,需嚴(yán)格遵循以下命令序列:
(1)初始化:單總線上所有傳輸過程都需要以初始化開始
(2)ROM命令:在主機(jī)檢測到從機(jī)的應(yīng)答脈沖后,就可以發(fā)出ROM命令
(3)功能命令:每個單總線器件都有自己的專用指令,需要參照各自的數(shù)據(jù)手冊這些信號,
初始化時序包括主機(jī)發(fā)送的復(fù)位脈沖和從機(jī)發(fā)出的應(yīng)答脈沖。主機(jī)通過拉低單總線至少480us,以產(chǎn)生TX復(fù)位脈沖;然后主機(jī)釋放總線,并進(jìn)入RX接收模式,當(dāng)主機(jī)釋放總線時,總線由低電平跳變?yōu)楦唠娖綍r產(chǎn)生一上升沿,單總線器件檢測到這上升沿后,延時1560us,接著單總線器件通過拉低總線60240us,以產(chǎn)生應(yīng)答脈沖。主機(jī)接收到從機(jī)應(yīng)答脈沖后,說明有單總線器件在線,然后主機(jī)就開始對從機(jī)進(jìn)行ROM命令和功能命令操作。
寫1、寫0和讀時序。在每一個時序中,總線只能傳輸一位數(shù)據(jù)。所有的讀寫時序至少需要60us,且每兩個獨(dú)立的時序之間至少需要1us的恢復(fù)時間。讀寫時序均起始于主機(jī)拉低總線。在寫時序中,主機(jī)拉低總線后保持至少60us的低電平則向單總線器件寫0。單總線器件又在主機(jī)發(fā)發(fā)出讀時序時才向主機(jī)傳送數(shù)據(jù),所以當(dāng)主機(jī)向單總線器件發(fā)出數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時序,以便單總線能傳輸數(shù)據(jù)。在主機(jī)發(fā)出讀時序之后,單總線器件才開始在總線上發(fā)送0或1,若單總線器件發(fā)送1,則保持總線高電平,若發(fā)送0,則拉低總線。單總線器件發(fā)送之后,保持有效時間,因而,主機(jī)在讀時序期間必須釋放總線,并且必須在15us之中采樣總線狀態(tài),從而接收到從機(jī)發(fā)送的數(shù)據(jù)。
除了應(yīng)答脈沖外都是由主機(jī)發(fā)出同步信號,并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的__低位在前__。
【注】不管是ROM命令還是功能命令,最終都是通過控制時序來完成的,換句話說,命令只是對一些列時序控制分別命名罷了。
4 單總線應(yīng)用(DS18B20)
目前,單總線器件的主要有數(shù)字溫度傳感器(如DS18B20));A/D轉(zhuǎn)換器(如DS2450)門禁、身份識別器(如DS1990A);單總線控制器(如DSIWM)等等。
前面講解了單總線的時序控制,下面將結(jié)合DS18B20來具體講解單總線的指令操作與時序控制過程。
4.1 DS18B20的硬件連接方式
DS18B20有兩種連接方式:外部電源供電和寄生電源供電。
1.外電電源供電方式
在外部電源供電方式下,DS18B20的工作電源由VCC引腳引入,不存在電源電流不足的問題,可以保證轉(zhuǎn)換的精度,在單總線上還可以掛在任意多個設(shè)備。值得注意的是,在外部供電的方式下,GND引腳不能懸空,懸空會導(dǎo)致溫度讀取失敗。
采用外部電源供電是DS18B20的最佳方式,工作穩(wěn)定,抗干擾強(qiáng),電路簡單,可以開發(fā)多點(diǎn)測溫系統(tǒng)。
圖3外部供電方式
2.寄生電源供電方式
在寄生電源供電方式下,DS18B20只需要一個線就可正常工作,無需外部供電,值得注意的,此種供電方式,需要使用一個MOS管將單總線強(qiáng)上拉以此提供充足的電流,在發(fā)出任何涉及到拷貝EEPROM存儲器或啟動溫度轉(zhuǎn)換的指令后,必須最多10us把I/O強(qiáng)上拉。
這種供電方式也可適用于多點(diǎn)測溫,但需要多一根I/O線來進(jìn)行強(qiáng)上拉切換。
圖4寄生電源供電方式
另外,如果只有一個從機(jī)設(shè)備,也可不需要增加MOS管,但是當(dāng)I/O提供的電能不夠,則會導(dǎo)致無法轉(zhuǎn)換溫度或溫度誤差大。
4.2 DS18B20的指令
DS18B20的指令整體上分為兩類: ROM指令和存儲器操作指令 。
1.ROM指令
在主機(jī)檢測到應(yīng)答脈沖后,就可以發(fā)出 ROM 命令。這些命令與各個從機(jī)設(shè)備的唯一64位 ROM代碼相關(guān),允許主機(jī)在單總線上連接多個從機(jī)設(shè)備時,指定操作某個從機(jī)設(shè)備。這些命令還允許主機(jī)能夠檢測到總線上有多少個從機(jī)設(shè)備以及其設(shè)備類型,或者有沒有設(shè)備處于報(bào)警狀態(tài)。
從機(jī)設(shè)備可能支持5種 ROM 命令(實(shí)際情況與具體型號有關(guān)),每種命令長度為8位。主機(jī)在發(fā)出功能命令之前,必須送出合適的 ROM 命令。ROM命令的操作流程圖如下圖所示。
圖5 DS18B20 ROM指令流程
下面將簡要地介紹各個 ROM 指令的功能,以及在何種情況下使用。
(1) READ ROM [33h](僅適合于單節(jié)點(diǎn))
這條指令__用于讀取DS18B20的64位序列號__。值得注意的是,該指令__僅適用于總線上只有一個從機(jī)設(shè)備__。它允許主機(jī)直接讀出從機(jī)的64位 ROM 代碼,無須執(zhí)行搜索 ROM 過程。如果該命令用于多節(jié)點(diǎn)系統(tǒng),則必然發(fā)生數(shù)據(jù)沖突,因?yàn)槊總€從機(jī)設(shè)備都會響應(yīng)該命令。
(2) MATCH ROM [55h]
匹配 ROM 指令,后跟隨64位 ROM序列號 ,從而允許主機(jī)訪問多節(jié)點(diǎn)系統(tǒng)中某個指定的從機(jī)設(shè)備。僅當(dāng)從機(jī)完全匹配64位 ROM 代碼時,才會響應(yīng)主機(jī)隨后發(fā)出的功能命令;其它設(shè)備將處于等待復(fù)位脈沖狀態(tài)。這條指令適用于單個或者多個DS18B20。
(3) SKIP ROM [CCh](僅適合于單節(jié)點(diǎn))
主機(jī)通過執(zhí)行該指令, 訪問總線上的從機(jī)設(shè)備,而無須發(fā)出任何 ROM 指令信息 。例如,主機(jī)通過在發(fā)出跳越 ROM 指令后跟隨轉(zhuǎn)換溫度指令 [44h] ,就可以同時命令總線上所有的 DS18B20 開始轉(zhuǎn)換溫度,這樣大大節(jié)省了主機(jī)的時間。值得注意,如果跳越 ROM指令跟隨的是讀暫存器 [BEh] 的指令(包括其它讀操作命令),則該命令只能應(yīng)用于單節(jié)點(diǎn)系統(tǒng),否則將由于多個節(jié)點(diǎn)都響應(yīng)該命令而引起數(shù)據(jù)沖突。
(4) SEARCH ROM [F0h]
當(dāng)系統(tǒng)初始上電時,主機(jī)必須找出總線上所有從機(jī)設(shè)備,即__采用搜索指令來識別總線上的所有的從機(jī)64位序列號__,這樣主機(jī)就能夠判斷出從機(jī)的數(shù)目和類型。主機(jī)通過重復(fù)執(zhí)行搜索 ROM 循環(huán)(搜索ROM指令跟隨著位數(shù)據(jù)交換),以找出總線上所有的從機(jī)設(shè)備。如果總線只有一個從機(jī)設(shè)備,則可以采用讀 ROM 指令來替代搜索 ROM 指令。在每次執(zhí)行完搜索 ROM 循環(huán)后,主機(jī)必須返回至指令序列的第一步(初始化)。
(5) ALARM SEARCH ROM [ECh]
除那些設(shè)置了報(bào)警標(biāo)志的從機(jī)響應(yīng)外,該命令的工作方式完全等同于搜索 ROM 指令。該__指令允許主機(jī)設(shè)備判斷那些從機(jī)設(shè)備發(fā)生了報(bào)警__(如最近的測量溫度過高或過低等)。同搜索 ROM 指令一樣,在完成報(bào)警搜索循環(huán)后,主機(jī)必須返回至指令序列第一步。
【注】在溫度轉(zhuǎn)換和復(fù)制暫存器數(shù)據(jù)至 EEPROM 期間,主機(jī)必須在單總線上允許強(qiáng)上拉。并且在此期間,總線上不能進(jìn)行其它數(shù)據(jù)傳輸。
2.存儲器操作指令
在主機(jī)發(fā)出 ROM 命令,以訪問某個指定的 DS18B20,接著就可以發(fā)出 DS18B20 支持的某個功能命令。這些命令允許主機(jī)寫入或讀出DS18B20暫存器、啟動溫度轉(zhuǎn)換以及判斷從機(jī)的供電方式。DS18B20的功能命令流程如下圖所示。
圖6 DS18B20 功能指令流程
(1) CONVERT T [44h]
啟動溫度轉(zhuǎn)換指令,溫度轉(zhuǎn)換后存放在Byte0和Byte1中,如果使用寄生電源,總線控制必須在發(fā)出該條指令后的10us內(nèi)強(qiáng)制上拉,以保證DS18B20的供電充足。
(2) WRITE SCRATCHPAD [4Eh]
在寫暫存器指令后可向DS18B20的暫存器TH和TL以及配置寄存器中寫入數(shù)據(jù)。
(3) READ SCRATCHPAD [BEh]
讀暫存器指令,發(fā)送該指令后DS18B20將從第一個字節(jié)開始,依次送出9個字節(jié)的內(nèi)容,如果不想讀完所有的字節(jié), 控制器可以在任意時間發(fā)出復(fù)位指令來終止讀取數(shù)據(jù) 。
(4) COPY SCRATCHPAD [48h]
復(fù)制暫存器指令將TH和TL與配置寄存器的中的內(nèi)容拷貝到EEPROM中。如果使用寄生電源。總線控制器必須在這條指令發(fā)出后的10us內(nèi)啟動強(qiáng)上拉,并保持至少10ms的時間。
(5) RECALL E2 [B8h]
復(fù)制EEPROM指令把TH和TL與配置寄存器的值拷貝會暫存器中,這種拷貝操作在DS18B20上電后自動執(zhí)行,上電后,暫存器中就存在有效的數(shù)據(jù)。
(6) READ POWER SUPPLY [B4h]
讀電源模式指令,發(fā)給DS18B20后,再發(fā)出讀時間隙,返回電源模式,0位寄生電源,1位外部電源。
4.3 DS18B20時序控制
單總線協(xié)議定義了幾種信號類型: 復(fù)位脈沖、答應(yīng)脈沖、寫0、寫1、讀0和讀1時序 。下面針對DS18B20介紹其相應(yīng)的時序控制圖。
1.初始化序列:復(fù)位和應(yīng)答脈沖
單總線上的所有通信都是以初始化序列開始,包括:主機(jī)發(fā)出的復(fù)位脈沖及從機(jī)的應(yīng)答脈沖,如下圖所示。
圖7初始化時序圖
在主機(jī)初始化過程,主機(jī)通過__拉低單總線至少480us__,當(dāng)然在480~960us的低電平都是可以的, 以產(chǎn)生 (Tx) 復(fù)位脈沖 。接著,主機(jī)釋放總線變?yōu)楦唠娖剑⑦M(jìn)入接收模式 (Rx)在,隨后的480us內(nèi),對總線進(jìn)行檢測,如果有低電平,則說明總線上有期間作出應(yīng)答,否則說明無設(shè)備在總線上。
作為從機(jī)的DS18B20會一直檢測總線上是否有480~960us的低電平信號,如果檢測到復(fù)位脈沖,則__延時15-60us,接著通過拉低總線60-240us,以產(chǎn)生應(yīng)答脈沖__。當(dāng)從機(jī)發(fā)出響應(yīng)主機(jī)的應(yīng)答脈沖時,即向主機(jī)表明它處于總線上,且工作準(zhǔn)備就緒。若檢測不到復(fù)位脈沖則一直處于檢測等待中。
2.主機(jī)讀寫時序
在寫時序期間,主機(jī)向單總線器件寫入數(shù)據(jù);而在讀時序期間,主機(jī)讀入來自從機(jī)的數(shù)據(jù)。在每一個時序,總線只能傳輸一位數(shù)據(jù)。
圖8讀寫時序圖
- 寫時序
寫時序有兩種:“寫1”和“寫0”。所有寫時序至少需要60us,且在兩次獨(dú)立的寫時隙之間至少需要1us的恢復(fù)時間。兩種寫時序均起始于主機(jī)拉低總線。
__寫0時序__的過程:在主機(jī)拉低總線后,只需在整個時序期間保持低電平即可(至少60us)。
__寫1時序__的過程:主機(jī)在拉低總線后,接著必須在15us之內(nèi)釋放總線,由5k上拉電阻將總線拉至高電平。一直到寫周期結(jié)束。
總的來說,在寫時序起始后15-60us期間,單總線器件采樣總線電平狀態(tài)。 如果在此期間采樣為高電平,則邏輯1被寫入該器件:如果為低電平,則寫入邏輯0 。
- 讀時序
單總線器件僅在主機(jī)發(fā)出讀時序時,才向主機(jī)傳輸數(shù)據(jù),所以,在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時序,以便從機(jī)能夠傳輸數(shù)據(jù)。
所有讀時序至少需要60us,且在兩次獨(dú)立的讀時序之間至少需要1us的恢復(fù)時間。每個讀時序都由主機(jī)發(fā)起,至少拉低總線1us。在主機(jī)發(fā)起讀時序之后,單總線器件才開始在總線上發(fā)送0或1。
若從機(jī)發(fā)送1,則保持總線為高電平;若發(fā)送0,則拉低總線。當(dāng)發(fā)送0時,從機(jī)在該時序結(jié)束后釋放總線,由上拉電阻將總線拉回至空閑高電平狀態(tài)。從機(jī)發(fā)出的數(shù)據(jù)在起始時隙之后,保持有效時間15us,因而,主機(jī)在讀時序期間必須釋放總線,并且在時序起始后的15us之內(nèi)采樣總線狀態(tài)。
【注】無論是讀是寫,都是以主機(jī)把總線至少拉低1us開始,無論是讀0還是寫0,都是以總線拉高至少1us結(jié)束。
4.4 DS18B20溫度讀取流程
當(dāng)主機(jī)對多個DS18B20的某一設(shè)備進(jìn)行操作時,主機(jī)首先逐個與掛在總線設(shè)備掛接,使用搜索ROM(FOh)指令,讀出其序列號(33H),然后發(fā)送匹配指令(55h),緊接著提供64位序列號,之后就是操作該DS18B20了。
如果只有一個DS18B20測溫,就不需要搜索ROM、讀ROM以及匹配ROM操作了,只需要指令跳過ROM(CCh)指令,就可指令溫度轉(zhuǎn)換(44h)和讀取溫度(BEh)操作了。
圖9DS18B20溫度獲取流程
總的來說,單線接口訪問DS18B20的流程如下:
1.ROM操作
A.主機(jī)復(fù)位操作,即對DS18B20初始化;
B.主機(jī)對DS18B20寫跳過ROM指令(CCh),單設(shè)備不需要其他操作;
C主機(jī)對DS18B20寫啟動溫度轉(zhuǎn)換(44h),啟動溫度轉(zhuǎn)換;
D.時等待溫度轉(zhuǎn)換值,當(dāng)然延時大小還由分辨率決定。
【注】每個指令在寫的時候都是__低位在前,高位在后__。
2.存儲器操作
A.主機(jī)復(fù)位操作;
B.主機(jī)對DS18B20寫跳過ROM指令(CCh);
C.主機(jī)發(fā)出讀取RAM指令(BEh),DS18B20依次發(fā)送9個字節(jié)數(shù)據(jù),在字節(jié)在前,高字節(jié)在后。如果只想讀取溫度值,在讀完前兩個字節(jié)就不在讀取后面的數(shù)據(jù)。
5 總結(jié)
單總線技術(shù)以其線路簡單、硬件開銷少、成本低廉、軟件設(shè)計(jì)簡單優(yōu)勢而有著無可比擬的應(yīng)用前景。基于單總線技術(shù)能較好地解決傳統(tǒng)識別器普遍存在的攜帶不便、易損壞、易受腐饋、易受電磁干擾等不足,可應(yīng)用于高度安全的門禁、身份識別等領(lǐng)域。其通信可靠簡單,很容易實(shí)現(xiàn)。因此單總線技術(shù)有著廣闊的應(yīng)用前景,是值得產(chǎn)注的一個發(fā)展領(lǐng)域。
審核編輯:湯梓紅
-
SPI
+關(guān)注
關(guān)注
17文章
1715瀏覽量
91830 -
I2C
+關(guān)注
關(guān)注
28文章
1491瀏覽量
124080 -
單總線
+關(guān)注
關(guān)注
1文章
36瀏覽量
12411 -
總線協(xié)議
+關(guān)注
關(guān)注
0文章
116瀏覽量
14864
發(fā)布評論請先 登錄
相關(guān)推薦
評論