基于單片機(jī)串口實(shí)現(xiàn)1-Wire總線通信的方法
摘 要: 主要介紹了一種借助單片機(jī)串口實(shí)現(xiàn)1-Wire總線通信的方法,并以集成數(shù)字溫度傳感器DS18B20為例,基于有限狀態(tài)機(jī)采用該方法完成了通信程序的設(shè)計(jì)。
關(guān)鍵詞: 1-Wire總線;串口;有限狀態(tài)機(jī);DS18B20
1-Wire總線是Dallas半導(dǎo)體公司推出的一種半雙工串行總線,它采用單根信號(hào)線實(shí)現(xiàn)微控制器(主機(jī))與接口器件(從機(jī))之間的雙向通信,每個(gè)從機(jī)具有唯一的工廠光刻ID作為地址。
1-Wire總線的優(yōu)勢(shì)在于結(jié)構(gòu)簡(jiǎn)單、便于總線擴(kuò)展,可以通過(guò)總線為器件供電。1-Wire器件種類豐富,典型器件包括溫度傳感器、存儲(chǔ)器、實(shí)時(shí)時(shí)鐘、電池管理等。在低功耗儀表、工業(yè)控制及家庭監(jiān)控網(wǎng)絡(luò)等領(lǐng)域,1-Wire總線獲得了廣泛應(yīng)用。
1-Wire總線協(xié)議通常采用軟件延時(shí)實(shí)現(xiàn),對(duì)于實(shí)時(shí)性高且無(wú)操作系統(tǒng)的單片機(jī),該方式難以提高單片機(jī)效率,同時(shí)極大地降低了系統(tǒng)實(shí)時(shí)性。本文提出了一種基于單片機(jī)串口的1-Wire總線協(xié)議的軟硬件設(shè)計(jì),該設(shè)計(jì)實(shí)現(xiàn)了1-Wire總線通信和單片機(jī)效率、實(shí)時(shí)性的兼顧。
1 1-Wire總線協(xié)議簡(jiǎn)析
1-Wire總線的單根信號(hào)線兼有地址總線、數(shù)據(jù)總線和控制總線的功能,因此,訪問(wèn)1-Wire器件要嚴(yán)格遵循總線協(xié)議以保證數(shù)據(jù)完整性。
1-Wire總線協(xié)議定義了初始化脈沖、寫脈沖和讀脈沖3類總線信號(hào),其主要區(qū)別在于,總線上高低電平時(shí)間不同,下面分別對(duì)它們進(jìn)行簡(jiǎn)析。
2.2 通信協(xié)議接口
單片機(jī)串口采用1 bit起始位、8 bit數(shù)據(jù)位、1 bit停止位的工作方式,發(fā)送時(shí)由LSB至MSB逐位發(fā)送。
?。?)初始化脈沖
設(shè)置波特率為9 600 b/s,即每1 bit的寬度為104.2 μs,發(fā)送數(shù)據(jù)0xf0,則起始位和低4 bit構(gòu)成復(fù)位信號(hào),高4 bit為1,即釋放總線。如總線上無(wú)應(yīng)答信號(hào),則串口接收的數(shù)據(jù)等于0xf0,否則說(shuō)明總線上有應(yīng)答信號(hào)。
(2)讀寫脈沖
設(shè)置波特率為115 200 b/s,即每1 bit的寬度為8.7 μs,完整的發(fā)送過(guò)程持續(xù)87 μs,滿足讀寫脈沖至少60 μs的協(xié)議要求。起始位、停止位分別用來(lái)啟動(dòng)、終止讀寫脈沖。寫脈沖中,根據(jù)串口發(fā)送不同數(shù)據(jù)區(qū)分別實(shí)現(xiàn)寫0時(shí)序和寫1時(shí)序;讀脈沖中,串口發(fā)送數(shù)據(jù)0xff,起始位實(shí)現(xiàn)讀脈沖時(shí)序的啟動(dòng),LSB為1,此時(shí),主機(jī)釋放并采樣總線,起始位與LSB共維持17.4 μs,滿足協(xié)議對(duì)讀時(shí)序的要求。根據(jù)串口接收的數(shù)據(jù)最低位即可區(qū)分從機(jī)發(fā)送至總線的數(shù)據(jù)。
采用串口實(shí)現(xiàn)1-Wire總線通信的本質(zhì)在于將3類總線信號(hào)與不同波特率下不同數(shù)據(jù)的串口收發(fā)過(guò)程建立聯(lián)系,初始化脈沖對(duì)應(yīng)2次串口收發(fā)的過(guò)程,讀寫脈沖則對(duì)應(yīng)1次串口收發(fā)的過(guò)程[4]。具體對(duì)應(yīng)關(guān)系如表1所示。
3 1-Wire總線應(yīng)用——DS18B20
DS18B20是1-Wire總線的集成數(shù)字