1-Wire器件與8051系列單片機的軟件接口
關鍵詞:1-Wire總線,軟件接口,CRC校驗
1 引言
現在,單片機應用系統的外圍擴展已逐漸從以并行方式為主過渡到以串行方式為主,許多新型外圍器件都帶有串行擴展接口。通常的串行擴展接口和串行擴展總線有:UART的移位寄存器方式,MOTOROLA公司的SPI,NS公司的Microwire,Philips公司的IIC和Dallas公司的1-Wire總線等。1-Wire總線是一種最簡單的總線形式,它通過單條連接線完成了全部的控制、通信和供電,節省了I/O口,降低了系統成本并簡化了設計。1-Wire器件家族包含多種功能的器件,如身份識別器、傳感器、控制和存儲器等。在應用系統中,需要將這些簡易實用的外圍器件與系統中的微控制器互連。常用的方法包括:簡單的軟件方案;串行接口芯片,如DS2480;或以VHDL方式整合1-Wire主控器于定制的ASIC中。本文結合以1-Wire溫度傳感器構成的溫度測控系統,詳細講述1-Wire器件與常用的8051系列單片機的軟件接口。
2 1-Wire總線簡述
2.1 硬件配置
1-Wire總線通常如圖1連接,構成一個簡捷的1-Wire網絡,它包括三個主要部分:帶有控制軟件的主控器(Master),連接上拉電阻和穩壓二極管的連接線,以及各種功能的1-Wire器件(Slave)。漏極開路的端口結構和上拉電阻Rpu使總線空閑時處于高電平狀態(3V至5.5V),從器件可直接從數據線上獲得工作電能(節省了電源線)。每一位讀寫時隙開始時,主控器把總線拉低(小于0.8V),結束時,釋放總線為高電平,這種按位自同步的數據傳輸方式節省了時鐘線。穩壓二極管將總線最高電平限定在5.6V,起保護端口的作用。
1-Wire器件內部結構如圖1所示,1-Wire接口實現供電和同步。ROM存儲一個由廠家光刻的、全球唯一的、且不可更改的64位序列號,內容如圖2所示。最低8位是器件的類型號(Family Code),功能相同的一類器件具有相同的類型號;然后是48位器件序列號(Serial Code);最后是8位CRC校驗位用于驗證數據傳輸的正確性,這樣,實際可用的256個序列號為器件或其附著的電路板或系統在1-Wire網絡中提供唯一的電子識別。外圍部件完成某一特定的功能,主控器通過對RAM的讀寫操作對器件進行控制。
2.2 通信規程
1-Wire總線采用主從式、位同步、半雙工串行方式通信,如圖3所示,分以下三步:


(1)總線初始化,主控器先復位脈沖,然后從器件發應答脈沖。
(2)ROM指令,主控器通過ROM指令來讀取各從器件的ROM識別碼,以選擇1-Wire總線上的某一器件,其余器件忽略主控器的后續指令。
(3)RAM指令,通過對從器件RAM的讀寫操作,讓外圍器件實現某一功能。
所有1-Wire器件與主控器之間的通信都符合上述規程,但不同類型的1-Wire器件的結構和功能不同,8比特的ROM指令和RAM指令會略有不同,系統設計時查器件數據手冊即可。
3 接口時序及軟件模擬
在所設計的溫度測控系統中,選用了達拉斯公司性能優良的1-Wire溫度傳感器DS1822,以一片常用的AT89C51作為系統主控器。89C51與1-Wire器件互連時,需要根據1-Wire總線協議,用軟件模擬1-Wire總線接口,89C51的P1和P3口都具有與1-Wire器件相同的集電極開路接上拉電阻的端口結構,根據管腳分配情況,選用P1.0模擬1-Wire總線接口。
如圖4所示,1-Wire總線上的數據傳輸是通過1-Wire總線協議最底層的操作時隙完成的。每個通信周期起始于主控器發出復位脈沖,然后,1-Wire器件以應答脈沖做出響應。當主控器將總線從空閑狀態的邏輯高拉為邏輯低時,即啟動了一個讀寫時隙。在寫“0”時隙中,主控器在整個時隙期間將總線拉低;而后在15us之內釋放總線為高。在讀時隙中,主控器將總線拉低1us,接頭釋放總線,這樣,1-Wire從器件就能夠接管總線,輸出有效數據。所有的讀寫時隙在60us至120us內完成,并且每個時隙之間至少需要1us的恢復時間。
按圖4的時序要求,先建立以下幾個關鍵的子函數,作為1-Wire器件與8051系列單片機的軟件接口的基礎(晶振頻率為12M,一個機器周期為1us)。



在上述時序模擬子函數的基礎上,建立讀、寫一個子節函數,根據1-Wire協議的要求,傳送數據時低位在前高位在后。

主控器讀入1-Wire器件數據后,會進行CRC校驗。1-Wire協議采用的8位CRC校驗的生成多項式為:
g(x)=x8+x5+x4+1
其硬件生成器如圖5所示。
評論