DS18B20時序(上)
DS18B20的時序是其單總線(1-Wire)通信協(xié)議的核心,決定了傳感器與微控制器(MCU)之間數(shù)據(jù)交互的準(zhǔn)確性與可靠性。作為一款通過單根信號線實現(xiàn)雙向通信的數(shù)字溫度傳感器,DS18B20的所有操作——從初始化到命令傳輸,再到數(shù)據(jù)讀寫——都依賴于嚴(yán)格定義的時序規(guī)則,任何微小的時序偏差都可能導(dǎo)致通信失敗或數(shù)據(jù)錯誤。理解這些時序細(xì)節(jié),不僅是正確驅(qū)動DS18B20的基礎(chǔ),也是排查通信故障的關(guān)鍵,其設(shè)計的嚴(yán)謹(jǐn)性體現(xiàn)了單總線協(xié)議在簡化硬件的同時,對軟件時序控制的極致要求。
初始化時序是DS18B20通信的起點,其作用是建立主機(jī)(MCU)與從機(jī)(傳感器)之間的同步,并確認(rèn)從機(jī)是否在線。整個過程分為主機(jī)發(fā)送復(fù)位脈沖和從機(jī)返回應(yīng)答脈沖兩個階段。首先,主機(jī)通過將單總線(DQ線)拉低至少480μs來發(fā)送復(fù)位脈沖,這一持續(xù)時間必須足夠長,以確保從機(jī)能夠檢測到復(fù)位信號并進(jìn)入初始化狀態(tài)。隨后,主機(jī)釋放總線,此時總線通過外部上拉電阻(通常為4.7kΩ)恢復(fù)至高電平,主機(jī)進(jìn)入等待狀態(tài)。從機(jī)在檢測到總線釋放后,會在15~60μs內(nèi)做出響應(yīng):將DQ線拉低60~240μs,發(fā)送應(yīng)答脈沖。主機(jī)需要在釋放總線后的15~60μs窗口內(nèi)檢測總線電平,若檢測到低電平,則說明從機(jī)已正確響應(yīng),初始化成功;若未檢測到低電平,則可能是傳感器未連接、總線短路或時序錯誤,需重新嘗試初始化。這一時序的關(guān)鍵在于復(fù)位脈沖的最小時長(480μs)和應(yīng)答檢測的時間窗口,若復(fù)位脈沖過短,從機(jī)可能無法識別;若主機(jī)檢測應(yīng)答的時間過早或過晚,都會錯過從機(jī)的應(yīng)答信號,導(dǎo)致初始化失敗。
初始化完成后,主機(jī)需向從機(jī)發(fā)送ROM命令(用于多節(jié)點識別)和功能命令(用于控制傳感器操作),這兩類命令的傳輸依賴于寫時隙(Write Time Slot)時序。寫時隙是主機(jī)向從機(jī)傳輸單個二進(jìn)制位(0或1)的基本單位,每個寫時隙的時長至少為60μs,且相鄰兩個寫時隙之間需有至少1μs的恢復(fù)時間。寫“1”時,主機(jī)先將DQ線拉低1~15μs,隨后釋放總線,使總線在寫時隙剩余時間內(nèi)保持高電平;從機(jī)在寫時隙開始后的15~60μs內(nèi)采樣總線電平,此時檢測到高電平,即識別為“1”。寫“0”時,主機(jī)需將DQ線持續(xù)拉低至少60μs,確保從機(jī)在采樣窗口內(nèi)檢測到低電平;若拉低時間不足,從機(jī)可能誤判為“1”。寫命令的過程本質(zhì)是連續(xù)發(fā)送8個寫時隙,每個時隙對應(yīng)命令字節(jié)的一位(從最低位開始),因此發(fā)送一個8位命令的總時長至少為8×60μs + 7×1μs = 487μs,實際應(yīng)用中為保證可靠性,通常會適當(dāng)延長時隙間隔。
當(dāng)主機(jī)需要讀取從機(jī)返回的數(shù)據(jù)(如溫度測量結(jié)果)時,需遵循讀時隙(Read Time Slot)時序。讀時隙由主機(jī)發(fā)起,每個讀時隙的時長至少為60μs,且相鄰讀時隙之間需有至少1μs的恢復(fù)時間。讀操作開始時,主機(jī)先將DQ線拉低1~15μs,隨后釋放總線,為從機(jī)輸出數(shù)據(jù)做準(zhǔn)備。從機(jī)在檢測到總線釋放后,會根據(jù)要發(fā)送的位值控制DQ線電平:若發(fā)送“1”,則保持總線為高電平;若發(fā)送“0”,則將總線拉低,且這一電平狀態(tài)會持續(xù)15μs左右(從主機(jī)釋放總線開始計算)。主機(jī)必須在釋放總線后的15μs內(nèi)完成采樣,否則從機(jī)可能已釋放總線,導(dǎo)致采樣錯誤。與寫命令類似,讀數(shù)據(jù)時需連續(xù)發(fā)起8個讀時隙,依次讀取字節(jié)的每一位(從最低位開始),因此讀取一個8位數(shù)據(jù)的總時長與寫命令相當(dāng),且需嚴(yán)格控制每個采樣點的時間,確保在從機(jī)輸出有效的15μs窗口內(nèi)完成讀數(shù)。





