核心驅動 vt1211¶
支援的晶片
VIA VT1211
字首:‘vt1211’
掃描地址:無,地址從 Super-I/O 配置空間讀取
資料手冊:由 VIA 應要求提供,並受 NDA 約束
作者:Juerg Haefliger <juergh@gmail.com>
此驅動程式基於 Mark D. Studebaker 針對核心 2.4 的驅動程式及其 Lars Ekman 移植到核心 2.6 的版本。
感謝 VIA 的 Joseph Chan 和 Fiona Gatt 提供文件和技術支援。
模組引數¶
- uch_config: int
覆蓋通道 1-5 的 BIOS 預設通用通道 (UCH) 配置。合法值為 0-31 範圍內的整數。位 0 對映到 UCH1,位 1 對映到 UCH2,依此類推。將某個位設定為 1 會啟用該特定 UCH 的熱輸入,將某個位設定為 0 會啟用電壓輸入。
- int_mode: int
覆蓋 BIOS 預設溫度中斷模式。唯一可能的值是 0,它強制中斷模式為 0。在這種模式下,讀取狀態暫存器時會清除任何掛起的中斷,但只要溫度保持在遲滯限制之上,就會重新生成中斷。
請注意,覆蓋 BIOS 預設值可能會導致一些不良的副作用!
描述¶
VIA VT1211 Super-I/O 晶片包括完整的硬體監控功能。它可以監控 2 個專用的溫度感測器輸入(temp1 和 temp2)、1 個專用電壓 (in5) 和 2 個風扇。此外,該晶片還實現了 5 個通用輸入通道 (UCH1-5),可以單獨程式設計以監控電壓或溫度。
該晶片還提供風扇速度的手動和自動控制(根據資料手冊)。該驅動程式僅支援自動控制,因為手動模式似乎無法像資料手冊中宣傳的那樣工作。事實上,我根本無法使手動模式工作!請注意,由於我的 EPIA M10000 沒有將風扇連線到 VT1211 的 PWM 輸出,因此自動模式沒有經過很好的測試 :-().
下表顯示了 vt1211 輸入和 sysfs 節點之間的關係。
感測器 |
電壓模式 |
溫度模式 |
預設用途(來自資料手冊) |
|---|---|---|---|
讀數 1 |
temp1 |
Intel 熱二極體 |
|
讀數 3 |
temp2 |
內部熱二極體 |
|
UCH1/讀數2 |
in0 |
temp3 |
NTC 型熱敏電阻 |
UCH2 |
in1 |
temp4 |
+2.5V |
UCH3 |
in2 |
temp5 |
VccP(處理器核心) |
UCH4 |
in3 |
temp6 |
+5V |
UCH5 |
in4 |
temp7 |
+12V |
+3.3V |
in5 |
內部 VCC (+3.3V) |
電壓監控¶
電壓由一個 8 位 ADC 取樣,其 LSB 約為 10mV。因此,支援的輸入範圍是從 0 到 2.60V。超出此範圍的電壓值需要外部縮放電阻。需要透過 sensors.conf 中的計算行來補償此外部縮放,例如
compute inx @*(1+R1/R2), @/(1+R1/R2)
根據 VIA 的建議,板級縮放電阻如下。這當然完全取決於實際的板實現 :-) 您將需要找到自己主機板的文件並相應地編輯 sensors.conf。
電壓 |
R1 |
R2 |
分壓 |
原始值 |
|---|---|---|---|---|
+2.5V |
2K |
10K |
1.2 |
2083 mV |
VccP |
--- |
--- |
1.0 |
1400 mV [1] |
+5V |
14K |
10K |
2.4 |
2083 mV |
+12V |
47K |
10K |
5.7 |
2105 mV |
+3.3V (int) |
2K |
3.4K |
1.588 |
3300 mV [2] |
+3.3V (ext) |
6.8K |
10K |
1.68 |
1964 mV |
每個測量的電壓都有一個相關的低限和高限,當交叉時會觸發警報。
溫度監控¶
溫度以千分之一攝氏度報告。每個測量的溫度都有一個高限,如果交叉會觸發警報。每個溫度都有一個相關的遲滯值,溫度必須降到該值以下才能清除警報(這僅適用於中斷模式 0)。如果 BIOS 沒有自動執行,則可以強制中斷模式為 0。有關詳細資訊,請參閱“模組引數”部分。
除了 temp2 之外的所有溫度通道都是外部的。Temp2 是 VT1211 內部熱二極體,驅動程式執行 temp2 的所有縮放並以千分之一攝氏度為單位返回溫度。對於外部通道 temp1 和 temp3-temp7,縮放取決於板實現,需要在使用者空間中透過 sensors.conf 執行。
Temp1 是一種 Intel 型熱二極體,需要以下公式來轉換 sysfs 讀數和實際溫度
compute temp1 (@-Offset)/Gain, (@*Gain)+Offset
根據 VIA VT1211 BIOS 移植指南,應使用以下增益和偏移值
二極體型別 |
偏移 |
增益 |
|---|---|---|
英特爾 CPU |
88.638 65.000 |
0.9528 0.9686 [3] |
VIA C3 Ezra |
83.869 |
0.9528 |
VIA C3 Ezra-T |
73.869 |
0.9528 |
這是來自 lm_sensors 2.10.0 sensors.conf 檔案的公式。我不知道它來自哪裡或如何推匯出來的,只是為了完整起見在此處列出。
Temp3-temp7 支援 NTC 熱敏電阻。對於這些通道,驅動程式返回在 UCH1-UCH5 的各個引腳上看到的電壓。引腳上的電壓 (Vpin) 由熱敏電阻 (Rth) 和縮放電阻 (Rs) 構成的分壓器形成
Vpin = 2200 * Rth / (Rs + Rth) (2200 is the ADC max limit of 2200 mV)
熱敏電阻的方程如下(如果您想了解更多資訊,請在 Google 上搜索)
Rth = Ro * exp(B * (1 / T - 1 / To)) (To is 298.15K (25C) and Ro is the
nominal resistance at 25C)
將上述兩個方程混合在一起,並假設 Rs = Ro 且 B = 3435,則得出以下 sensors.conf 公式
compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15,
2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
風扇速度控制¶
VT1211 提供 2 個可程式設計 PWM 輸出,用於控制 2 個風扇的速度。將 2 寫入任何兩個 pwm[1-2]_enable sysfs 節點會將 PWM 控制器置於自動模式。只有一個控制器可以控制兩個 PWM 輸出,但每個 PWM 輸出都可以單獨啟用和停用。
每個 PWM 都有 4 個相關的不同輸出佔空比:full、high、low 和 off。Full 和 off 在內部硬連線到 255 (100%) 和 0 (0%)。High 和 low 可以透過 pwm[1-2]_auto_point[2-3]_pwm 進行程式設計。每個 PWM 輸出都可以與不同的熱輸入相關聯,但是 - 這裡是奇怪的部分 - 只存在一組熱閾值,用於控制兩個 PWM 的輸出佔空比。可以透過 pwm[1-2]_auto_point[1-4]_temp 訪問熱閾值。請注意,即使有 2 組各 4 個自動點,它們也對映到 VT1211 中的相同暫存器,並且程式設計一組就足夠了(實際上只有第一組 pwm1_auto_point[1-4]_temp 是可寫的,第二組是隻讀的)。
PWM 自動點 |
PWM 輸出佔空比 |
|---|---|
pwm[1-2]_auto_point4_pwm |
全速佔空比(硬連線到 255) |
pwm[1-2]_auto_point3_pwm |
高速佔空比 |
pwm[1-2]_auto_point2_pwm |
低速佔空比 |
pwm[1-2]_auto_point1_pwm |
關閉佔空比(硬連線到 0) |
溫度自動點 |
熱閾值 |
|---|---|
pwm[1-2]_auto_point4_temp |
全速溫度 |
pwm[1-2]_auto_point3_temp |
高速溫度 |
pwm[1-2]_auto_point2_temp |
低速溫度 |
pwm[1-2]_auto_point1_temp |
關閉溫度 |
長話短說,控制器實現以下演算法來根據輸入溫度設定 PWM 輸出佔空比
熱閾值 |
輸出佔空比(溫度升高) |
輸出佔空比(溫度下降) |
|---|---|---|
全速佔空比 |
全速佔空比 |
|
全速溫度 |
||
高速佔空比 |
全速佔空比 |
|
高速溫度 |
||
低速佔空比 |
高速佔空比 |
|
低速溫度 |
||
關閉佔空比 |
低速佔空比 |
|
關閉溫度 |