内核驱动 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 端口)
华邦 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 伏的值。
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 版本。一位用户报告了风扇偶尔停止的问题。
请注意,单独的蜂鸣位与其他芯片是反转的。驱动程序现在会处理此问题,因此用户空间应用程序不必知道它。
- 已知问题
二极管/热敏电阻设置问题(支持吗?)
一位用户报告说,在高服务器负载下风扇会停止。
修订版 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
来自 Winbond 技术支持的回复¶
>
> 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 是 Winbond 的 ID(WEC),这让我们认为华硕直接从 Winbond 获取了他们的 AS99127F rev.2。其他代码分别表示 ATT 和 DVC。ATT 可能代表华硕科技(Asustek something,尽管我认为这选择很糟糕),我不知道 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(rev.1 和 2 相同)
传感器 1:寄存器 0x27
传感器 2 和 3 是 SMBus 上的 2 个 LM75
备注
寄存器 0x5b 被怀疑是温度类型选择器。位 1 控制 temp1,位 3 控制 temp2,位 5 控制 temp3。
- Mozart-2
传感器 1:寄存器 0x27
传感器 2:寄存器 0x13
风扇传感器¶
- ASB100、AS99127F(rev.1 和 2 相同)
3 个风扇,与 W83781D 相同
- Mozart-2
仅有 2 个风扇,1350000/RPM/div
风扇 1:寄存器 0x28,除数在寄存器 0xA1 上(位 4-5)
风扇 2:寄存器 0x29,除数在寄存器 0xA1 上(位 6-7)
电压¶
这是 AS99127F rev.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 rev.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 rev.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¶
关于 AS99127F 上的 PWM 的其他信息(可能也适用于其他华硕芯片),由 Jean Delvare 于 2004-04-09 提供
AS99127F revision 2 似乎在 0x59 和 0x5A 处有两个 PWM 寄存器,在 0x5B 处有一个温度传感器类型选择器(这基本上意味着当您与 Winbond 芯片进行比较时,它们交换了寄存器 0x59 和 0x5B)。该芯片的 Revision 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。
关于 AS99127F rev.1 上 PWM 的其他信息,由 Hector Martin 提供
我一直在摆弄(臭名昭著的)0x59 寄存器,发现以下值确实可以作为一种粗略的 pwm 形式工作
- 0x80
似乎会在一段时间后(1-2 分钟)关闭风扇...可能是某种基于温度的自动风扇控制?嗯(Qfan?这个主板是老华硕的,它没有被宣传为 Qfan。也许是 BIOS 中放弃的 Qfan 的一些早期尝试)
- 0x81
关闭
- 0x82
比关闭稍微“开启”,但我的风扇没有移动。我可以听到电机在 pwm 过低时发出的高音调 PWM 声音。
- 0x83
现在它们确实在移动了。估计速度约为 70% 左右。
- 0x84-0x8f
全速
更改高半字节似乎没有太大作用,除了必须设置高位 (0x80) 才能使 PWM 工作,否则当前的 pwm 似乎不会改变。
我的主板是华硕 A7V266-E。此行为类似于我在 Windows 下使用 speedfan 时的情况,其中 0-15% 会关闭,15-2x%(不记得确切的值)会达到 70%,而更高的值会达到全速。
关于 AS99127F rev.1 上 PWM 的其他信息,来自 lm-sensors 票证 #2350
我对带有 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 |