單總線(1-Wire)是DALLAS公司推出的一種單線雙向串行總線,僅用一根線即可實(shí)現(xiàn)多個(gè)器件間的數(shù)據(jù)傳輸。目前,常用的單總線接口芯片有數(shù)字溫度傳感器DS18B20、單總線控制器DSIWM和D-A轉(zhuǎn)換器DS2450等。本節(jié)將以單總線溫度傳感器DS18B20為例,介紹單總線接口器件的引腳功能、時(shí)序及使用方法;最后,給出AT89C52單片機(jī)擴(kuò)展DS18B20的例子。
單總線的引腳功能和時(shí)序
1.單總線的引腳功能
在單總線接口擴(kuò)展中,一根線DQ將所有器件連接在一起,如圖6-19所示。DQ是雙向傳輸線,可以傳送時(shí)鐘信號(hào)和數(shù)據(jù)。為保證總線空閑時(shí)該引腳為高電平,DQ引腳必須經(jīng)過(guò)一個(gè)約5kΩ的電阻與正電源相連,如圖6-20所示。另外,在圖6-20中,主機(jī)是指單片機(jī)等控制器。沒(méi)有專用單總線引腳的單片機(jī)可以用I/O口引腳模擬單總線引腳。
圖6-19單總線接口擴(kuò)展示意圖
圖6-20 DS18B20單總線引腳硬件結(jié)構(gòu)示意圖
使用單總線接口器件時(shí)要注意:
1)在單總線通信中,只能有一個(gè)主機(jī)(只有含CPU的器件可以做主機(jī)),并且從機(jī)只能被動(dòng)地與主機(jī)通信。
2)單總線接口器件都具有唯一、不能更改,且與其他器件不同的64位ROM序列號(hào),主機(jī)可以通過(guò)該序列號(hào)尋址單總線上掛接的從機(jī)。
3)單總線的數(shù)據(jù)傳輸順序是“先低位,后高位”。
4)單總線接口器件采用寄生電源的供電方式時(shí),不需要外接電源。
2.單總線的引腳時(shí)序
為保證數(shù)據(jù)傳輸?shù)恼_性,單總線接口器件通信過(guò)程中必須按照通信協(xié)議要求產(chǎn)生總線信號(hào)。單總線協(xié)議中的信號(hào)類型有以下幾種,分別是復(fù)位脈沖、存在脈沖、寫0信號(hào)、寫1信號(hào)、讀0信號(hào)和讀1信號(hào)。上述信號(hào)中,除了存在脈沖,所有信號(hào)均由主機(jī)產(chǎn)生。這些信號(hào)的時(shí)序如圖6-21所示,下面分別介紹。
圖6-21 DS18B20的DQ引腳時(shí)序
(1)復(fù)位脈沖
單總線的數(shù)據(jù)傳輸開(kāi)始于主機(jī)發(fā)出復(fù)位脈沖,這是總線初始化操作。如圖6-21所示,主機(jī)(即控制器)將DQ引腳置為低電平,即將總線的電平拉低,并保持480~960μs,以產(chǎn)生“復(fù)位脈沖”。復(fù)位脈沖發(fā)出后,主機(jī)重新將DQ置為高電平(即釋放總線)并等待15~60μs,之后檢測(cè)從機(jī)是否發(fā)出了“存在脈沖”。若檢測(cè)到“存在脈沖”則開(kāi)始通信,否則不通信。
(2)存在脈沖
主機(jī)發(fā)出復(fù)位脈沖并釋放總線時(shí),總線上產(chǎn)生上升沿。從機(jī)(此處指DS18B20)檢測(cè)到該上升沿后,等待15~60μs再將總線DQ引腳置為低電平,并保持60~240μs。如圖6-21所示,這個(gè)持續(xù)60~240μs的低電平即是從機(jī)發(fā)出的“存在脈沖”。
(3)主機(jī)的寫時(shí)隙
主機(jī)通過(guò)寫“0”時(shí)隙向從機(jī)發(fā)送邏輯0,通過(guò)寫“1”時(shí)隙向從機(jī)發(fā)送邏輯1。寫“0”時(shí)隙和寫“1”時(shí)隙都必須維持至少60μs。兩次寫時(shí)隙之間至少需要1μs的恢復(fù)時(shí)間。產(chǎn)生寫“0”時(shí)隙和寫“1”時(shí)隙的方法分別如下:
1)產(chǎn)生寫“0”時(shí)隙的方法是,主機(jī)拉低總線電平,并保持60~120μs,然后釋放總線(即向總線寫1)。
2)產(chǎn)生寫“1”時(shí)隙的方法是,主機(jī)拉低總線電平,并在15μs內(nèi)釋放總線,
寫“0”時(shí)隙和寫“1”時(shí)隙都以拉低總線開(kāi)始,從機(jī)檢測(cè)到由此產(chǎn)生的下降沿后,將在15~60μs內(nèi)讀取數(shù)據(jù),即檢測(cè)總線上的電平,低電平為0,高電平為1。
(4)主機(jī)的讀時(shí)隙
主機(jī)產(chǎn)生讀時(shí)隙后,從機(jī)才能向主機(jī)發(fā)送數(shù)據(jù)。主機(jī)產(chǎn)生讀時(shí)隙的方法是將總線拉底,并保持至少1μs,然后釋放總線。從機(jī)檢測(cè)到總線上的這個(gè)上升沿信號(hào)后,將數(shù)據(jù)送到總線上、發(fā)給主機(jī)。若從機(jī)發(fā)給主機(jī)的是0,則總線上產(chǎn)生主機(jī)讀“0”時(shí)隙,若發(fā)給的是1,則產(chǎn)生讀“1”時(shí)隙。需要注意的是,從機(jī)的數(shù)據(jù)只能保持15μs,因此主機(jī)必須在產(chǎn)生讀時(shí)隙后的15μs內(nèi)完成讀數(shù)據(jù)的操作。