核心驅動 w83781d¶
支援的晶片
華邦 W83781D
字首:‘w83781d’
掃描地址:I2C 0x28 - 0x2f, ISA 0x290 (8 個 I/O 埠)
資料手冊: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83781d.pdf
華邦 W83782D
字首:‘w83782d’
掃描地址:I2C 0x28 - 0x2f, ISA 0x290 (8 個 I/O 埠)
資料手冊: https://www.winbond.com
華邦 W83783S
字首:‘w83783s’
掃描地址:I2C 0x2d
資料手冊: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf
華碩 AS99127F
字首:‘as99127f’
掃描地址:I2C 0x28 - 0x2f
資料手冊:華碩未提供
作者
Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>,
Mark Studebaker <mdsxyz123@yahoo.com>
模組引數¶
- init int
(預設 1)
使用 ‘init=0’ 以跳過晶片初始化。如果在載入模組時計算機崩潰,請嘗試此操作。
- reset int
(預設 0) 驅動程式以前會在載入時重置晶片,但現在不再這樣做了。使用 ‘reset=1’ 恢復舊行為。如果您需要這樣做,請報告。
- force_subclients=bus,caddr,saddr,saddr
這用於強制特定晶片子客戶端的 i2c 地址。典型用法是 force_subclients=0,0x2d,0x4a,0x4b,將匯流排 0 上晶片 0x2d 的子客戶端強制設定為 i2c 地址 0x4a 和 0x4b。此引數對某些泰安主機板很有用。
描述¶
本驅動程式支援華邦 W83781D、W83782D、W83783S 晶片以及華碩 AS99127F 晶片。我們統稱它們為 W8378* 晶片。
這些晶片之間存在相當大的差異,但它們足夠相似,因此將它們整合到一個驅動程式中是合理的。華碩晶片類似於僅支援 I2C 的 W83782D。
晶片 |
#vin |
#fanin |
#pwm |
#temp |
wchipid |
vendid |
i2c |
ISA |
as99127f |
7 |
3 |
0 |
3 |
0x31 |
0x12c3 |
是 |
否 |
as99127f rev.2 (type_name = as99127f) |
0x31 |
0x5ca3 |
是 |
否 |
||||
w83781d |
7 |
3 |
0 |
3 |
0x10-1 |
0x5ca3 |
是 |
是 |
w83782d |
9 |
3 |
2-4 |
3 |
0x30 |
0x5ca3 |
是 |
是 |
w83783s |
5-6 |
3 |
2 |
1-2 |
0x40 |
0x5ca3 |
是 |
否 |
有時這些晶片的檢測可能會失敗,因為它們可能處於不允許乾淨訪問的內部狀態。如果您知道晶片的地址,請使用“force”引數;這會首先將它們置於更良好的狀態。
W8378* 晶片實現了溫度感測器(W83781D 和 W83782D 上有三個,W83783S 上有兩個)、三個風扇轉速感測器、電壓感測器(W83781D 上有七個,W83782D 上有九個,W83783S 上有六個)、VID 線、帶蜂鳴警告的報警以及一些雜項功能。
溫度以攝氏度測量。始終有一個主溫度感測器,以及一個(W83783S)或兩個(W83781D 和 W83782D)其他感測器。當超過過溫關機限制時,主感測器會觸發一次報警;一旦低於滯後值,它會再次觸發。透過將滯後值設定為 +127 攝氏度,可以獲得更實用的行為;在這種情況下,當實際溫度高於過溫關機值時,會一直髮出報警。驅動程式在初始化時將 temp1 的滯後值設定為 127。
對於其他溫度感測器,當溫度高於過溫關機值時會觸發報警;報警會持續直到溫度低於滯後值。但在 W83781D 上,只有一個報警功能適用於另外兩個感測器!溫度保證在 -55 到 +125 度之間。主溫度感測器的解析度為 1 度;其他感測器的解析度為 0.5 度。
風扇轉速以 RPM(每分鐘轉數)報告。如果轉速低於可程式設計限制,則會觸發報警。風扇讀數可以透過可程式設計分頻器(W83781D 為 1, 2, 4 或 8;其他晶片為 1, 2, 4, 8, 16, 32, 64 或 128)進行除法,以提供更大的讀數範圍或更高的精度。並非所有 RPM 值都能準確表示,因此會進行一些舍入。當分頻器為 2 時,最低可表示值約為 2600 RPM。
電壓感測器(也稱為 IN 感測器)以伏特報告其值。如果電壓超出可程式設計的最小或最大限制,則會觸發報警。請注意,在這種情況下,最小值始終意味著“最接近零”;這對於負電壓測量很重要。所有電壓輸入都可以測量 0 到 4.08 伏特之間的電壓,解析度為 0.016 伏特。
VID 線編碼核心電壓值:即處理器應工作的電壓水平。這由主機板和/或處理器本身硬編碼。這是一個以伏特為單位的值。當它未連線時,您通常會在此處發現 3.50 V 的值。
W83782D 和 W83783S 溫度轉換機制支援多種型別的溫度探頭。您可以在感測器檔案中程式設計所謂的 beta 值。“1”是 PII/Celeron 二極體,“2”是 TN3904 電晶體,而 3435 是預設熱敏電阻值。其他值(尚)不受支援。
除了上述報警外,晶片上還有一個 CHAS 報警,當您的計算機機箱開啟時會觸發。
當報警觸發時,您的計算機揚聲器會發出蜂鳴聲進行警告。可以全域性啟用所有蜂鳴聲,或僅啟用某些報警的蜂鳴聲。
單個報警和蜂鳴位
0x000001 |
in0 |
0x000002 |
in1 |
0x000004 |
in2 |
0x000008 |
in3 |
0x000010 |
temp1 |
0x000020 |
temp2 (W83781D 上為 +temp3) |
0x000040 |
fan1 |
0x000080 |
fan2 |
0x000100 |
in4 |
0x000200 |
in5 |
0x000400 |
in6 |
0x000800 |
fan3 |
0x001000 |
機箱 |
0x002000 |
temp3 (僅 W83782D) |
0x010000 |
in7 (僅 W83782D) |
0x020000 |
in8 (僅 W83782D) |
如果報警觸發,它將保持觸發狀態,直到硬體暫存器至少被讀取一次。這意味著報警的原因可能已經消失!請注意,在當前實現中,只要讀取任何資料(除非距離上次更新不到 1.5 秒),所有硬體暫存器都會被讀取。這意味著您很容易錯過僅觸發一次的報警。
晶片每 1.5 秒更新一次值;更頻繁地讀取它們不會造成損害,但會返回“舊”值。
AS99127F 問題¶
AS99127F 的支援是在沒有資料手冊的情況下開發的。在大多數情況下,它被視為 w83781d(儘管 AS99127F 的修訂版 2 更像是 w83782d)。此支援在資料手冊釋出之前將處於 BETA 狀態。一位使用者報告風扇偶爾停止的問題。
請注意,AS99127F 的獨立蜂鳴位與其他晶片是反向的。驅動程式現在已處理了這個問題,因此使用者空間應用程式無需瞭解此差異。
- 已知問題
二極體/熱敏電阻設定問題(是否支援?)
一位使用者報告在伺服器高負載下風扇停止。
修訂版 2 似乎有 2 個 PWM 暫存器,但我們不知道如何處理它們。更多詳細資訊如下。
除非我們獲得資料手冊,否則這些問題將無法修復。如果您遇到問題,請遊說華碩釋出資料手冊。不幸的是,其他人也曾嘗試但未成功。請不要給我們發郵件要求更好的 as99127f 支援。在沒有資料手冊的情況下,我們已盡力而為。請不要向作者或感測器組發郵件索取資料手冊或詢問如何說服華碩的建議。我們無能為力。
注意事項¶
783s 沒有 in1,因此 in[2-6] 與 781d/782d 相容。
783s 引腳可程式設計用於 -5V 或 temp1;預設為 -5V,驅動程式中沒有控制,因此 temp1 不起作用。
782d 和 783s 的資料手冊在 pwm1 和 pwm2 的定義上存在差異。我們選擇遵循 782d。
782d 和 783s 引腳可程式設計用於風扇 3 輸入或 pwm2 輸出;預設為風扇 3 輸入。如果啟用 pwm2(透過 echo 255 1 > pwm2),則風扇 3 將報告 0。
782d 對 ISA 有 pwm1-2,對 i2c 有 pwm1-4。(pwm3-4 與 ISA 引腳共享)
資料手冊更新¶
- PWM 時鐘暫存器
000: 主時鐘 / 512
001: 主時鐘 / 1024
010: 主時鐘 / 2048
011: 主時鐘 / 4096
100: 主時鐘 / 8192
華邦技術支援的回覆¶
>
> 1) In the W83781D data sheet section 7.2 last paragraph, it talks about
> reprogramming the R-T table if the Beta of the thermistor is not
> 3435K. The R-T table is described briefly in section 8.20.
> What formulas do I use to program a new R-T table for a given Beta?
>
We are sorry that the calculation for R-T table value is
confidential. If you have another Beta value of thermistor, we can help
to calculate the R-T table for you. But you should give us real R-T
Table which can be gotten by thermistor vendor. Therefore we will calculate
them and obtain 32-byte data, and you can fill the 32-byte data to the
register in Bank0.CR51 of W83781D.
> 2) In the W83782D data sheet, it mentions that pins 38, 39, and 40 are
> programmable to be either thermistor or Pentium II diode inputs.
> How do I program them for diode inputs? I can't find any register
> to program these to be diode inputs.
You may program Bank0 CR[5Dh] and CR[59h] registers.
=============================== =============== ============== ============
CR[5Dh] bit 1(VTIN1) bit 2(VTIN2) bit 3(VTIN3)
thermistor 0 0 0
diode 1 1 1
(error) CR[59h] bit 4(VTIN1) bit 2(VTIN2) bit 3(VTIN3)
(right) CR[59h] bit 4(VTIN1) bit 5(VTIN2) bit 6(VTIN3)
PII thermal diode 1 1 1
2N3904 diode 0 0 0
=============================== =============== ============== ============
華碩克隆晶片¶
我們沒有華碩克隆晶片(AS99127F 和 ASB100 Bach)的資料手冊。以下是 Alex Van Kaam 提供的一些關於如何檢測這些晶片以及如何讀取其值的非常有用的資訊。他還提供了關於另一個華碩晶片組 Mozart-2(我們尚未支援)的建議。感謝 Alex!
我重新措辭了部分內容並添加了個人評論。
檢測¶
AS99127F rev.1, AS99127F rev.2 和 ASB100:- I2C 地址範圍:0x29 - 0x2F - 如果暫存器 0x58 的值為 0x31,則我們有一個華碩晶片(ASB100 或 AS99127F)- 具體是哪一個取決於暫存器 0x4F(製造商 ID)
0x06 或 0x94:ASB100
0x12 或 0xC3:AS99127F rev.1
0x5C 或 0xA3:AS99127F rev.2
請注意,0x5CA3 是華邦的 ID (WEC),這讓我們認為華碩直接從華邦獲取 AS99127F rev.2。其他程式碼分別代表 ATT 和 DVC。ATT 可能代表 Asustek 某個東西(儘管恕我直言,這是一個非常糟糕的選擇),我不知道 DVC 代表什麼。也許這些程式碼根本就不是那樣解碼的。
Mozart-2:- I2C 地址:0x77 - 如果暫存器 0x58 的值為 0x56 或 0x10,則我們有一個 Mozart-2 - Mozart 有 3 種類型
0x58=0x56, 0x4E=0x94, 0x4F=0x36: 華碩 ASM58 Mozart-2
0x58=0x56, 0x4E=0x94, 0x4F=0x06: 華碩 AS2K129R Mozart-2
0x58=0x10, 0x4E=0x5C, 0x4F=0xA3: 華碩 ??? Mozart-2
您可以完全相同的方式處理這 3 種類型 :)
溫度感測器¶
- ASB100
感測器 1:暫存器 0x27
感測器 2 和 3 是 SMBus 上的 2 個 LM75
感測器 4:暫存器 0x17
備註
我注意到在 Intel 主機板上,感測器 2 用於 CPU,而感測器 4 被忽略/卡住;在 AMD 主機板上,感測器 4 是 CPU,而感測器 2 要麼被忽略,要麼是插槽溫度。
- AS99127F (修訂版 1 和 2 均如此)
感測器 1:暫存器 0x27
感測器 2 和 3 是 SMBus 上的 2 個 LM75
備註
暫存器 0x5b 被懷疑是溫度型別選擇器。位 1 控制 temp1,位 3 控制 temp2,位 5 控制 temp3。
- Mozart-2
感測器 1:暫存器 0x27
感測器 2:暫存器 0x13
風扇感測器¶
- ASB100, AS99127F (修訂版 1 和 2 均如此)
3 個風扇,與 W83781D 相同
- Mozart-2
僅 2 個風扇,1350000/RPM/div
風扇 1:暫存器 0x28,分頻器在暫存器 0xA1 (位 4-5)
風扇 2:暫存器 0x29,分頻器在暫存器 0xA1 (位 6-7)
電壓¶
這是 AS99127F 修訂版 1 和 2 之間存在差異的地方。
備註
這種差異類似於 W83781D 和 W83782D 之間的差異。
- ASB100
in0=r(0x20)*0.016
in1=r(0x21)*0.016
in2=r(0x22)*0.016
in3=r(0x23)*0.016*1.68
in4=r(0x24)*0.016*3.8
in5=r(0x25)*(-0.016)*3.97
in6=r(0x26)*(-0.016)*1.666
- AS99127F 修訂版 1
in0=r(0x20)*0.016
in1=r(0x21)*0.016
in2=r(0x22)*0.016
in3=r(0x23)*0.016*1.68
in4=r(0x24)*0.016*3.8
in5=r(0x25)*(-0.016)*3.97
in6=r(0x26)*(-0.016)*1.503
- AS99127F 修訂版 2
in0=r(0x20)*0.016
in1=r(0x21)*0.016
in2=r(0x22)*0.016
in3=r(0x23)*0.016*1.68
in4=r(0x24)*0.016*3.8
in5=(r(0x25)*0.016-3.6)*5.14+3.6
in6=(r(0x26)*0.016-3.6)*3.14+3.6
- Mozart-2
in0=r(0x20)*0.016
in1=255
in2=r(0x22)*0.016
in3=r(0x23)*0.016*1.68
in4=r(0x24)*0.016*4
in5=255
in6=255
PWM¶
Jean Delvare 於 2004-04-09 提供的關於 AS99127F PWM 的額外資訊(可能也適用於其他華碩晶片)
AS99127F 修訂版 2 似乎在 0x59 和 0x5A 有兩個 PWM 暫存器,並在 0x5B 有一個溫度感測器型別選擇器(這基本上意味著與華邦晶片相比,它們交換了 0x59 和 0x5B 暫存器)。該晶片的修訂版 1 也在 0x5B 有溫度感測器型別選擇器,但 PWM 暫存器沒有效果。
我們不清楚溫度感測器型別選擇器確切的工作方式。看起來位 1-0 用於 temp1,位 3-2 用於 temp2,位 5-4 用於 temp3,儘管每次可能只有最高有效位起作用。到目前為止,除了 0 以外的值總是導致讀數錯誤。
PWM 暫存器似乎分為兩部分:位 7 是模式選擇器,而其他位似乎定義了一個值或閾值。
當位 7 清零時,位 6-0 似乎儲存著一個閾值。如果值低於給定限制,風扇以低速執行。如果值高於限制,風扇以全速執行。我們不清楚這個限制代表什麼。請注意,這種模式似乎存在一些慣性,速度變化可能需要一些時間才能觸發。此外,還懷疑存在滯後機制,因為遞增然後遞減地遍歷所有值會導致略微不同的限制。
當位 7 設定時,位 3-0 似乎儲存著一個閾值,而位 6-4 則不重要。如果值低於給定限制,風扇以全速執行;如果高於限制,則以低速執行(所以在某種程度上與另一種模式相反)。同樣,我們不清楚這個限制應該代表什麼。
一個值得注意的現象是,風扇似乎只有兩到三種不同的速度(過渡狀態除外),而不是通常 PWM 所提供的整個範圍。
總而言之,您可以向 PWM 暫存器寫入 0x00 或 0x8F 使風扇低速執行,寫入 0x7F 或 0x80 使其全速執行。
如果您能弄清楚它應該如何工作,請聯絡我們。只要我們不知道更多,w83781d 驅動程式就根本不處理 AS99127F 晶片上的 PWM。
Hector Martin 提供的關於 AS99127F rev.1 PWM 的額外資訊
我一直在擺弄(臭名昭著的)0x59 暫存器,發現以下值可以作為一種粗略的 PWM 形式工作:
- 0x80
似乎在一段時間(1-2 分鐘)後關閉風扇… 可能是某種基於溫度的自動風扇控制?嗯(Qfan?這塊主機板是舊華碩,並未宣傳為 Qfan。也許是 Qfan 的某個測試版預嘗試,後來在 BIOS 中被放棄了)
- 0x81
關閉
- 0x82
比關閉稍微“開啟”一點,但我的風扇不動。我能聽到電機在 PWM 過低時發出的高頻 PWM 聲音。
- 0x83
現在它們會轉動了。估計速度約為 70% 左右。
- 0x84-0x8f
全速開啟
改變高位半位元組似乎沒有多大作用,除了必須設定高位(0x80)才能使 PWM 工作,否則當前的 PWM 似乎不會改變。
我的主機板是華碩 A7V266-E。這種行為與我在 Windows 下使用 speedfan 得到的結果類似,其中 0-15% 是關閉,15-2x%(不記得確切值)是 70%,更高則是全速開啟。
來自 lm-sensors 工單 #2350 的關於 AS99127F rev.1 PWM 的額外資訊
我在帶有 AS99127F (版本 1) 的華碩 P3B-F 主機板上進行了一些實驗。
我確認在此主機板上,0x59 暫存器控制 CPU_Fan 接頭,0x5a 暫存器控制 PWR_Fan。
為了減少對特定風扇的依賴,我使用數字示波器在未連線風扇的情況下進行了測量。我發現 P3B-F 實際上在風扇接頭中心引腳輸出可變直流電壓,看起來此主機板上的 PWM 經過了濾波。
以下是一些測量結果
0x80 |
20 mV |
0x81 |
20 mV |
0x82 |
232 mV |
0x83 |
1.2 V |
0x84 |
2.31 V |
0x85 |
3.44 V |
0x86 |
4.62 V |
0x87 |
5.81 V |
0x88 |
7.01 V |
9x89 |
8.22 V |
0x8a |
9.42 V |
0x8b |
10.6 V |
0x8c |
11.9 V |
0x8d |
12.4 V |
0x8e |
12.4 V |
0x8f |
12.4 V |