一文看懂单总线协议(1-wire)
文章目錄
- 一、什么是單總線協議?
- 1、單總線協議概念及特點
- 2、硬件結構
- 3、單總線協議應用
- 二、單總線協議時序(以DS18B20為例)
- 1、初始化(復位脈沖 + 存在脈沖)
- 2、讀/寫時序
- (1)寫時序
- (2)讀時序
- 三、DS18B20訪問執行步驟
- 1、初始化
- 2、ROM操作指令
- (1)Search ROM [F0h] (搜索 ROM 指令)
- (2)READ ROM [33h] (讀取 ROM 指令)
- (3)MATH ROM [55h] (匹配 ROM 指令)
- (4)SKIP ROM [CCh] (忽略 ROM 指令)
- (5)ALARM SEARCH [ECH] (報警搜索指令)
- 3、DS18B20功能指令
- (1)CONVERT T [44h] (溫度轉換指令)
- (2)WRITE SCRATCHPAD [4Eh] (寫暫存器指令)
- (3)READ SCRATCHPAD [BEh] (讀暫存器指令)
- (4)COPY SCRATCHPAD [48h] (拷貝暫存器指令)
- (5)RECALL E2 [B8H] (召回 EEPROM 指令)
- (6)READ POWER SUPPLY [B4h] (讀電源模式指令)
一、什么是單總線協議?
1、單總線協議概念及特點
單總線(1-wire)是美國DALLAS公司推出的外圍串行擴展總線技術。與SPI、I2C串行數據通信方式不同,它采用單根信號線傳輸。 這種協議由一個總線主節點、或多個從節點組成系統,通過根信號線對從芯片進行數據的讀取。每一個符合單總線協議的從芯片都有一個唯一的地址,包括48位的序列號、8位的家族代碼和8位的CRC代碼。主芯片根據64位尋址對各個芯片進行雙向通信,因此其協議對時序的要求較嚴格,初始化、寫bit或讀bit都有嚴格的時序要求,但是位于位之間沒有嚴格要求。
單總線的數據傳輸速率一般為16.3Kbit/s,最大可達142 Kbit/s,通常情況下采用100Kbit/s以下的速率傳輸數據。主設備I/O口可直接驅動200m范圍內的從設備,經過擴展后可達1km范圍。
這種傳輸方式信號線上既傳輸時鐘又傳輸數據,而且數據傳輸是雙向的,具有節省I/O口線、資源結構簡單、成本低廉、便于總線擴展和維護等諸多優點。
2、硬件結構
單總線只有一根數據線,設備(主機或從機)通過一個漏極開路或三態端口,連接至該數據線,這樣允許設備在不發送數據時釋放數據總線,以便總線被其它設各所使用。單總線端口為漏極開路,其內部等效電路下圖所示:
單總線電路外接一個約5K的上拉電阻,當單總線處于空閑狀態時為高電平,如果總線保持低電平超過480us,總線上的所有器件將復位。另外,在寄生方式供電時,為了保證單總線器件在某些工作狀態下(如溫度轉換期間、EEPROM寫入等)具有足夠的電源電流,必須在總線上提供強上拉。
3、單總線協議應用
單總線器件主要有數字溫度傳感器(如DS18B20)、DHT11、A/D轉換器(如DS2450)、門標、身份識別器(如DS1990A)、單總線控制器(如DS1WM)等。
二、單總線協議時序(以DS18B20為例)
DS18B20 需要嚴格的單總線協議以確保數據的完整性。協議包括集中單總線信號類型:復位脈沖、存在脈沖、寫 0、寫 1、讀 0 和讀 1。所有這些信號,除存在脈沖外,都是由總線控制器發出的。
由于單總線是主從結構,只有主機呼叫從機時,從機才能應答,因此主機訪問器件都必須嚴格遵循單總線命令序列,即初始化、ROM命令和功能命令。如果出現序列混亂,器件將不響應主機(搜索ROM命令、報警搜索命令除外)。
1、初始化(復位脈沖 + 存在脈沖)
復位序列:復位脈沖和存在脈沖
在初始化序列期間,總線控制器拉低總線并保持 480us 以發出(TX)一個復位脈沖,然后釋放總線,進入接收狀態(RX)。單總線由 5K 上拉電阻拉到高電平。當DS18B20 探測到 I/O 引腳上的上升沿后,等待 15-60us,然后發出一個由 60-240us低電平信號構成的存在脈沖。
2、讀/寫時序
(1)寫時序
寫時序分為寫 1 時序和寫 0 時序,總線控制器通過寫 1 時序寫邏輯 1 到
DS18B20,寫 0 時序寫邏輯 0 到 DS18B20。所有寫時序必須最少持續 60us,包括兩個寫周期之間至少 1us 的恢復時間。當總線控制器把數據線從邏輯高電平拉到低電平的時候,寫時序開始,如下圖所示:
總線控制器要生產一個寫時序,必須把數據線拉到低電平然后釋放,在寫時序開始后的 15us 釋放總線。當總線被釋放的時候,5K 的上拉電阻將拉高總線。總控制器要生成一個寫 0 時序,必須把數據線拉到低電平并持續保持(至少 60us)。
總線控制器初始化寫時序后,DS18B20 在一個 15us 到 60us 的窗口內對 I/O 線采樣。如果線上是高電平,就是寫 1。如果線上是低電平,就是寫 0。
(2)讀時序
總線控制器發起讀時序時,DS18B20 僅被用來傳輸數據給控制器。因此,總線控制器在發出讀暫存器指令[BEh]或讀電源模式指令[B4H]后必須立刻開始讀時序,DS18B20可以提供請求信息。除此之外,總線控制器在發出發送溫度轉換指令[44h]或召回 EEPROM 指令[B8h]之后讀時序。
所有讀時序必須最少 60us,包括兩個讀周期間至少 1us 的恢復時間。當總線控制器把數據線從高電平拉到低電平時,讀時序開始,數據線必須至少保持 1us,然后總線被釋放。在總線控制器發出讀時序后,DS18B20 通過拉高或拉低總線上來傳輸 1 或 0。當傳輸邏輯 0 結束后,總線將被釋放,通過上拉電阻回到上升沿狀態。從 DS18B20 輸出的數據在讀時序的下降沿出現后 15us 內有效。因此,總線控制器在讀時序開始后必須停止把 I/O 腳驅動為低電平 15us,以讀取I/O 腳狀態。
三、DS18B20訪問執行步驟
每一次 DS18B20 的操作都必須滿足以下步驟,若是缺少步驟或是順序混亂,器件將不會返回值。例如這樣的順序:發起 ROM 搜索指令[F0h]和報警搜索指令[ECh]之后,總線控制器必須返回步驟 1。
1、初始化
通過單總線的所有執行操作處理都從一個初始化序列開始。初始化序列包括一個由總線控制器發出的復位脈沖和其后由從機發出的存在脈沖。存在脈沖讓總線控制器知道 DS18B20 在總線上且已準備好操作。
2、ROM操作指令
一旦總線控制器探測到一個存在脈沖,它就發出一條 ROM 指令。如果總線上掛有多只 DS18B20,這些指令將基于器件獨有的 64 位 ROM 片序列碼使得總線控制器選出特定要進行操作的器件。這些指令同樣也可以使總線控制器識別有多少只,什么型號的器件掛在總線上,同樣,它們也可以識別哪些器件已經符合報警條件。ROM 指令有 5 條,都是 8 位長度。總線控制器在發起一條 DS18B20 功能指令之前必須先發出一條 ROM 指令。ROM指令流程圖如下:
(1)Search ROM [F0h] (搜索 ROM 指令)
當系統上電初始化的時候,總線控制器必須通過識別總線上所有 ROM 片序列碼去得到從機的數目和型號。總線控制器通過搜索 ROM 指令多次循環搜索 ROM 編碼,以確認所有從機器件。如果總線上只有一只從機,那么可以用較為簡單的讀取ROM 指令代替搜索 ROM 指令。在每次搜索 ROM 指令之后,總線控制器必須返回步驟 1。
(2)READ ROM [33h] (讀取 ROM 指令)
只有在總線上存在單只 DS18B20 的時候才能使用這條命令。該命令允許總線控制器在不使用搜索 ROM 指令的情況下讀取從機的 64 位片序列碼。如果總線上有不止一只從機,當所有從機試圖同時傳送信號時就會發生數據沖突。
(3)MATH ROM [55h] (匹配 ROM 指令)
匹配 ROM 指令,后跟 64 位 ROM 編碼序列,讓總線控制器在多點總線上定位一只特定的 DS18B20。只有和 64 位 ROM 片序列碼完全匹配的 DS18B20 才能響應隨后的存儲器操作指令;所有和 64 位 ROM 片序列碼不匹配的從機都將等待復位脈沖。
(4)SKIP ROM [CCh] (忽略 ROM 指令)
這條指令允許總線控制器不用提供 64 位 ROM 編碼就使用功能指令。例如,總線控制器可以先發出一條忽略 ROM 指令,然后發出溫度轉換指令[44h],從而完成溫度轉換操作。注意:當只有一只從機在總線上時,無論如何,忽略 ROM 指令之后只能跟著發出一條讀取暫存器指令[BEh]。在單點總線情況下使用該命令,器件無需發回 64 位 ROM 編碼,從而節省了時間。如果總線上有不止一只從機,若發出忽略 ROM 指令,由于多只從機同時傳送信號,總線上就會發生數據沖突。
(5)ALARM SEARCH [ECH] (報警搜索指令)
這條命令的流程和搜索 ROM 指令相同,然而,只有滿足報警條件的從機才對該命令作出響應。只有在最近一次測溫后遇到符合報警條件的情,DS18B20 才會響應這條命令。在每次報警搜索指令周期之后,總線控制器必須返回步驟 1。
3、DS18B20功能指令
在總線控制器發給欲連接的DS18B20一條ROM命令后,跟著可以發送一條DS18B20功能指令。這些命令允許總線控制器讀寫 DS18B20 的暫存器,發起溫度轉換和識別電源模式。功能指令流程圖如下:
(1)CONVERT T [44h] (溫度轉換指令)
這條命令用以啟動一次溫度轉換。溫度轉換指令被執行,產生的溫度轉換結果數據以 2 個字節的形式被存儲在高速暫存器中,而后 DS18B20 保持等待狀態。如果寄生電源模式下發出該命令后,在溫度轉換期間(tconv),必須在 10us(最多),內給單總線一個強上拉,見 DS18B20 供電節。如果DS18B20 以外部電源供電,總線控制器在發出該命令后跟著發出讀時序,DS18B20 如處于轉換中,將在總線上返回 0,若溫度轉換完成,則返回 1。
(2)WRITE SCRATCHPAD [4Eh] (寫暫存器指令)
這條命令向 DS18B20 的暫存器寫入數據,開始位置在 TH 寄存器(暫存器的第 2個字節),接下來寫入 TL 寄存器(暫存器的第 3 個字節),最后寫入配置寄存器(暫存器的第 4 個字節)。數據以最低有效位開始傳送。上述三個字節的寫入必須發生在總線控制器發出復位命令前,否則會中止寫入。
(3)READ SCRATCHPAD [BEh] (讀暫存器指令)
這條命令讀取暫存器的內容。讀取將從字節 0 開始,一只進行下去,知道第 9 字節(字節 8,CRC)讀完,如果不想讀完所有字節,控制器可以在任何時間發出復位命令來中止讀取。
(4)COPY SCRATCHPAD [48h] (拷貝暫存器指令)
這條命令把 TH,TL 和配置寄存器(第 2、3、4 字節)的內容拷貝到 EEPROM 中。如果使用寄生電源總線控制器必須在發出這條命令的 10us 內啟動強上拉并最少保持 10ms。
(5)RECALL E2 [B8H] (召回 EEPROM 指令)
這條命令把報警觸發器的值(TH 和 TL)以及配置數據從 EEPROM 拷回暫存器。總線控制器在發出該命令后讀時序,DS18B20 會輸出拷回標識:0 標識正在拷回,1標識拷回結束。這種拷回操作在 DS18B20 上電時自動執行,這樣器件一上電暫存器里馬上就存在有效的數據了。
(6)READ POWER SUPPLY [B4h] (讀電源模式指令)
總線控制器在這條命令發給 DS18B20 后發出讀時序,若是寄生電源模式,DS18B20將拉低總線,若是外部電源模式,DS18B20 將會把總線拉高。
注意:
1.對于寄生電源模式下的 DS18B20,在溫度轉換和拷貝數據到 EEPROM 期間,必須給單總線一個強上拉。總線上在這段時間內不能有其它活動。
2.總線控制器在任何時刻都可以通過發出復位信號中止數據傳輸。
總結
以上是生活随笔為你收集整理的一文看懂单总线协议(1-wire)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无人机刚体动力学方程
- 下一篇: Universal adversaria