《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于單片機串口實現(xiàn)1-Wire總線通信的方法
基于單片機串口實現(xiàn)1-Wire總線通信的方法
來源:微型機與應(yīng)用2012年第11期
李 多,,陳 軍
(東南大學 自動化學院,,江蘇 南京 211189)
摘要: 主要介紹了一種借助單片機串口實現(xiàn)1-Wire總線通信的方法,,并以集成數(shù)字溫度傳感器DS18B20為例,,基于有限狀態(tài)機采用該方法完成了通信程序的設(shè)計,。
Abstract:
Key words :

摘  要: 主要介紹了一種借助單片機串口實現(xiàn)1-Wire總線通信的方法,,并以集成數(shù)字溫度傳感器DS18B20為例,,基于有限狀態(tài)機采用該方法完成了通信程序的設(shè)計,。
關(guān)鍵詞: 1-Wire總線,;串口,;有限狀態(tài)機;DS18B20

 1-Wire總線是Dallas半導體公司推出的一種半雙工串行總線,,它采用單根信號線實現(xiàn)微控制器(主機)與接口器件(從機)之間的雙向通信,,每個從機具有唯一的工廠光刻ID作為地址。
 1-Wire總線的優(yōu)勢在于結(jié)構(gòu)簡單,、便于總線擴展,,可以通過總線為器件供電。1-Wire器件種類豐富,,典型器件包括溫度傳感器,、存儲器、實時時鐘,、電池管理等,。在低功耗儀表、工業(yè)控制及家庭監(jiān)控網(wǎng)絡(luò)等領(lǐng)域,,1-Wire總線獲得了廣泛應(yīng)用,。
 1-Wire總線協(xié)議通常采用軟件延時實現(xiàn),對于實時性高且無操作系統(tǒng)的單片機,,該方式難以提高單片機效率,,同時極大地降低了系統(tǒng)實時性。本文提出了一種基于單片機串口的1-Wire總線協(xié)議的軟硬件設(shè)計,,該設(shè)計實現(xiàn)了1-Wire總線通信和單片機效率,、實時性的兼顧。
1 1-Wire總線協(xié)議簡析
 1-Wire總線的單根信號線兼有地址總線,、數(shù)據(jù)總線和控制總線的功能,,因此,訪問1-Wire器件要嚴格遵循總線協(xié)議以保證數(shù)據(jù)完整性,。
 1-Wire總線協(xié)議定義了初始化脈沖,、寫脈沖和讀脈沖3類總線信號,其主要區(qū)別在于,,總線上高低電平時間不同,,下面分別對它們進行簡析。


2.2 通信協(xié)議接口
 單片機串口采用1 bit起始位,、8 bit數(shù)據(jù)位,、1 bit停止位的工作方式,發(fā)送時由LSB至MSB逐位發(fā)送,。
?。?)初始化脈沖
設(shè)置波特率為9 600 b/s,即每1 bit的寬度為104.2 μs,發(fā)送數(shù)據(jù)0xf0,,則起始位和低4 bit構(gòu)成復位信號,,高4 bit為1,即釋放總線,。如總線上無應(yīng)答信號,,則串口接收的數(shù)據(jù)等于0xf0,否則說明總線上有應(yīng)答信號,。
 (2)讀寫脈沖
 設(shè)置波特率為115 200 b/s,,即每1 bit的寬度為8.7 μs,,完整的發(fā)送過程持續(xù)87 μs,滿足讀寫脈沖至少60 μs的協(xié)議要求,。起始位,、停止位分別用來啟動、終止讀寫脈沖,。寫脈沖中,,根據(jù)串口發(fā)送不同數(shù)據(jù)區(qū)分別實現(xiàn)寫0時序和寫1時序;讀脈沖中,,串口發(fā)送數(shù)據(jù)0xff,,起始位實現(xiàn)讀脈沖時序的啟動,LSB為1,,此時,,主機釋放并采樣總線,起始位與LSB共維持17.4 μs,,滿足協(xié)議對讀時序的要求,。根據(jù)串口接收的數(shù)據(jù)最低位即可區(qū)分從機發(fā)送至總線的數(shù)據(jù)。
 采用串口實現(xiàn)1-Wire總線通信的本質(zhì)在于將3類總線信號與不同波特率下不同數(shù)據(jù)的串口收發(fā)過程建立聯(lián)系,,初始化脈沖對應(yīng)2次串口收發(fā)的過程,,讀寫脈沖則對應(yīng)1次串口收發(fā)的過程[4]。具體對應(yīng)關(guān)系如表1所示,。

3 1-Wire總線應(yīng)用——DS18B20
 DS18B20是1-Wire總線的集成數(shù)字

 

溫度傳感器,,其精度高、體積小,,在智能儀器儀表,、工業(yè)控制等領(lǐng)域中廣泛應(yīng)用。
 傳統(tǒng)應(yīng)用方式是采用一根I/O引腳配合軟件延時的方式實現(xiàn)相關(guān)協(xié)議,,1-Wire總線協(xié)議需要微秒級時間分辨率,,在通信過程中必須關(guān)閉系統(tǒng)所有中斷,否則極容易因為中斷服務(wù)程序的執(zhí)行而造成通信數(shù)據(jù)錯誤,。但是關(guān)閉中斷降低了系統(tǒng)實時性,,使得系統(tǒng)不能及時響應(yīng)外部請求,。對于任務(wù)少、實時性要求不高的系統(tǒng),,這種做法是可行的,,但是對于任務(wù)多且無操作系統(tǒng)的單片機,以初始化脈沖為例,,在至少960 μs的時間內(nèi),,單片機都會被1-Wire總線占用,效率大為降低,,實時性難以保證,。
 基于單片機串口中斷實現(xiàn)1-Wire協(xié)議,并配合狀態(tài)機實現(xiàn)與DS18B20通信,,為上述問題提出了解決方案,。由于串口的收發(fā)都是通過硬件完成,因此數(shù)據(jù)收發(fā)過程中單片機可以處理其他任務(wù),,在實現(xiàn)1-Wire通信的同時,,兼顧了實時性和效率。
 通信程序包括中斷服務(wù)程序和通信狀態(tài)機,。中斷服務(wù)程序為物理層,,完成數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)收發(fā),并通過全局變量標識總線的狀態(tài),;通信狀態(tài)機為DS18B20協(xié)議層,,將對DS18B20的訪問劃分為子狀態(tài),根據(jù)表1將對DS18B20的不同操作轉(zhuǎn)化為相應(yīng)數(shù)據(jù)并存入數(shù)據(jù)緩沖區(qū),,在總線處于空閑狀態(tài)時,,依次完成狀態(tài)轉(zhuǎn)移。通信狀態(tài)轉(zhuǎn)換圖如圖5所示[4],。

 本文提出了一種基于單片機串口的1-Wire總線通信方式,,結(jié)合1-Wire器件DS18B20詳細介紹了其軟硬件設(shè)計。相比于傳統(tǒng)1-Wire通信方式,,本文提出的方式提高了單片機效率,,兼顧了1-Wire通信和系統(tǒng)的實時性,為多任務(wù)且無操作系統(tǒng)的單片機應(yīng)用1-Wire器件提供了新的解決方案,。
參考文獻
[1] 馬潮.AVR單片機嵌入式系統(tǒng)原理與應(yīng)用實踐(第二版)[M].北京:北京航空航天大學出版社,,2011.
[2] Maxim. DS18B20 datasheet[Z]. 2008.
[3] Maxim. Application note 214: using a UART to implement a 1-Wire bus master[Z]. 2002.
[4] ATMEL. AVR318: Dallas 1-Wire master [Z]. 2004.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。