核心驅動 w1_therm

支援的晶片

  • 基於 Maxim ds18*20 的溫度感測器。

  • 基於 Maxim ds1825 的溫度感測器。

  • GXCAS GX20MH01 溫度感測器。

  • Maxim MAX31850 熱電偶介面。

作者:Evgeniy Polyakov <johnpol@2ka.mipt.ru>

描述

w1_therm 為 ds18*20、ds28ea00、GX20MH01 和 MAX31850 裝置提供基本的溫度轉換功能。

支援的系列程式碼

W1_THERM_DS18S20

0x10

W1_THERM_DS1822

0x22

W1_THERM_DS18B20

0x28

W1_THERM_DS1825

0x3B

W1_THERM_DS28EA00

0x42

支援透過 sysfs 條目 w1_slave 提供。每次開啟和讀取序列將啟動一次溫度轉換,然後提供兩行 ASCII 輸出。第一行包含讀取的九個十六進位制位元組以及計算出的 CRC 值,並顯示是否匹配(YES 或 NO)。如果 CRC 匹配,則保留返回的值。第二行顯示保留的值以及以 t= 開頭的攝氏千分之一度溫度。

另外,可以使用 temperature sysfs 讀取溫度,它只返回攝氏千分之一度的溫度。

可以透過向 w1_bus_master 級別的 therm_bulk_read 條目寫入 trigger 來對總線上的所有裝置進行批次讀取。這將向總線上的所有裝置傳送轉換命令,並且如果在總線上檢測到寄生供電裝置(並且模組中啟用了強上拉),它將在寄生供電裝置所需的較長轉換時間內將線路驅動為高電平。讀取 therm_bulk_read 將返回 0 表示沒有批次轉換待處理,-1 表示至少有一個感測器仍在轉換中,1 表示轉換已完成但至少一個感測器值尚未讀取。然後透過讀取每個裝置的 temperature 條目來獲取結果溫度,如果轉換仍在進行中,該條目可能返回空。請注意,如果傳送了批次讀取但未立即讀取某個感測器,則下次訪問該裝置的 temperature 將返回發出批次讀取命令時的溫度(而不是當前溫度)。

如果需要,轉換期間將施加強上拉。

conv_time 用於獲取當前轉換時間(讀取)並進行調整(寫入)。溫度轉換時間取決於裝置型別及其當前解析度。預設轉換時間由驅動程式根據裝置資料手冊設定。許多原始裝置克隆的轉換時間偏離了資料手冊的規格。有三個選項:1) 透過向 conv_time 寫入以毫秒為單位的值來手動設定正確的轉換時間;2) 透過向 conv_time 寫入 1 來自動測量並設定轉換時間;3) 使用 features 啟用輪詢以完成轉換。選項 2、3 不能在寄生供電模式下使用。要恢復預設轉換時間,請向 conv_time 寫入 0

將解析度值(以位為單位)寫入 w1_slave 將改變感測器下次讀數的精度。允許的解析度由感測器定義。感測器斷電再上電後,解析度將重置。

要將當前解析度儲存到 EEPROM 中,請向 w1_slave 寫入 0。由於 EEPROM 的寫入次數有限(>50k 次),因此應謹慎使用此命令。

另外,如果感測器支援,可以使用每個裝置上的專用 resolution 條目來讀取或寫入解析度。

一些非原裝的 DS18B20 晶片僅固定在 12 位模式,因此實際解析度會從晶片中讀回並進行驗證。

注意:更改解析度會將轉換時間恢復為預設值。

只寫 sysfs 條目 eeprom_cmd 是 EEPROM 操作的替代方法。寫入 save 以將裝置 RAM 儲存到 EEPROM。寫入 restore 以將 EEPROM 資料恢復到裝置 RAM 中。

ext_power 條目允許檢查每個裝置的電源狀態。如果裝置是寄生供電,則讀取 0;如果裝置是外部供電,則讀取 1

Sysfs alarms 允許讀取或寫入 TH 和 TL(高溫和低溫)警報。值應以空格分隔,並在裝置範圍內(通常為 -55°C 至 125°C)。值是整數,因為它們儲存在裝置中的 8 位暫存器中。最低值會自動設定為 TL。設定後,可以在主級別搜尋警報。

模組引數 strong_pullup 可以設定為 0 以停用強上拉,設定為 1 以啟用自動檢測,或設定為 2 以強制強上拉。在自動檢測情況下,驅動程式將使用“READ POWER SUPPLY”命令來檢查總線上是否存在寄生供電裝置。如果存在,它將啟用主裝置的強上拉。如果使用此命令檢測寄生裝置失敗(某些 DS18S20 似乎是這種情況),則可以強制啟用強上拉。

如果啟用強上拉,當轉換髮生時,主裝置的強上拉將被驅動,前提是主驅動程式支援強上拉(否則它會回退到上拉電阻)。DS18B20 溫度感測器規範列出了最大電流消耗為 1.5mA,並且 5k 上拉電阻不足。強上拉旨在提供所需的額外電流。

DS28EA00 提供了額外的兩個引腳,用於實現序列檢測演算法。此功能允許您確定晶片在 1-Wire 匯流排中的物理位置,而無需預先了解匯流排順序。支援透過 sysfs w1_seq 提供。該檔案將包含一行,其中包含一個整數值,表示裝置在匯流排中的索引,從 0 開始。

features sysfs 條目控制每個裝置的可選驅動程式設定。寄生模式下電源不足、線路噪音和轉換時間不足可能導致轉換失敗。原始 DS18B20 和一些克隆版本允許檢測無效轉換。向 features 寫入位掩碼 1 以啟用檢查轉換成功。如果在轉換後暫存器記憶體的位元組 6 為 0xC,並且溫度讀數為 85.00(上電值)或 127.94(電源不足),則驅動程式會返回轉換錯誤。位掩碼 2 透過在轉換開始後在總線上生成讀取週期來啟用輪詢以完成轉換(僅限正常供電)。在寄生供電模式下,此功能不可用。功能位掩碼可以組合(OR)。更多詳情請參見 ABI 檔案測試/sysfs-driver-w1_therm

GX20MH01 裝置與 DS18*20 共享家族編號 0x28。該裝置通常與 DS18B20 相容。在配置暫存器中添加了最低 2-5、2-6 溫度位;配置暫存器中的 R2 位啟用 13 和 14 位解析度。該裝置在 14 位解析度模式下上電。資料手冊中指定的轉換時間過低,必須增加。該裝置支援驅動程式功能 12

MAX31850 裝置與 DS1825 共享家族編號 0x3B。該裝置通常與 DS1825 相容。配置暫存器的最高 4 位全部讀取為 1,表示 15,但裝置始終在 14 位解析度模式下執行。