内核驱动 lm85

支持的芯片

作者

描述

此驱动程序实现了对 National Semiconductor LM85 和兼容芯片(包括 Analog Devices ADM1027、ADT7463、ADT7468 和 SMSC EMC6D10x 芯片系列)的支持。

LM85 使用与 SMBUS 2.0 规范兼容的 2 线接口。它使用模数转换器测量三个 (3) 温度和五个 (5) 电压。它有四个 (4) 16 位计数器,用于测量风扇速度。提供五个 (5) 数字输入,用于采样从处理器到 VRM 的 VID 信号。最后,有三个 (3) PWM 输出可用于控制风扇速度。

电压输入具有内部缩放电阻,因此可以在没有外部电阻的情况下测量以下电压

2.5V、3.3V、5V、12V 和 CPU 内核电压 (2.25V)

测量的温度是一个内部二极管和两个远程二极管。远程 1 通常是 CPU 温度。这些输入旨在测量热二极管,例如 Socket 423 或 Socket 478 封装中的奔腾 4 处理器中的热二极管。它们还可以使用像 2N3904 这样的晶体管来测量温度。

LM85 中设计了一个复杂的 PWM 输出控制系统,该系统允许根据三个温度传感器中的任何一个自动调整风扇速度。每个 PWM 输出均可单独调整和编程。配置完成后,LM85 将响应测得的温度调整 PWM 输出,而无需主机进一步干预。此功能也可以禁用,以便手动控制 PWM。

每个测量的输入(电压、温度、风扇速度)都有相应的高/低限制值。如果任何测量值超过任何一个限制,LM85 将发出警报。

LM85 连续采样所有输入。lm85 驱动程序读取寄存器的频率不会超过每秒一次。此外,配置数据每 5 分钟只读取一次。配置数据是测量数据的两倍,因此这似乎是一个值得进行的优化。

特殊功能

LM85 有四种风扇速度监控模式。ADM1027 只有两种。两者都有特殊的电路来补偿 PWM 与风扇 TACH 信号的相互作用。ADM1027 可以配置为测量双线风扇的速度,但三线和双线模式的输入调节电路不同。因此,双线风扇模式不会向用户公开。BIOS 应将其初始化为正确的模式。如果您设计了自己的 ADM1027,则必须修改 init_client 函数并添加 insmod 参数来设置它。

为了平滑风扇对温度变化的响应,LM85 有一个可选的滤波器来平滑温度。ADM1027 具有相同的配置选项,但使用它来限制风扇速度的变化率。

ADM1027、ADT7463 和 ADT7468 具有 10 位 ADC,因此可以测量温度,分辨率为 0.25 degC。它们还提供温度读数的偏移量,该偏移量在测量期间自动应用。此偏移量可用于消除因走线和位置引起的任何误差。文档指出偏移量以 0.25 degC 为步长,但在 ADM1027 的初始测试中,它是 1.00 degC 步长。Analog Devices 已确认此“错误”。据报告,ADT7463 的工作方式与文档中的描述相同。当前 lm85 驱动程序不显示偏移寄存器。

ADT7468 具有高频 PWM 模式,其中所有 PWM 输出都由 22.5 kHz 时钟驱动。这是一个全局模式,而不是每个 PWM 输出,这意味着将任何 PWM 频率设置为高于 11.3 kHz 将会将所有 3 个 PWM 输出切换到 22.5 kHz 频率。相反,将任何 PWM 频率设置为低于 11.3 kHz 会将所有 3 个 PWM 输出切换到 10 到 100 Hz 之间的频率,然后可以单独调整。

有关更多信息,请参阅供应商数据手册。National 有一份关于 LM85 的应用笔记 (AN-1260),其中包含一些其他信息。Analog Devices 的数据手册非常详细,并描述了一个确定自动 PWM 控制的最佳配置的过程。

SMSC EMC6D100 和 EMC6D101 监控外部电压、温度和风扇速度。它们利用此监控功能来提醒系统注意超出限制的情况,并且可以自动控制 PC 或嵌入式系统中多个风扇的速度。EMC6D101(采用 24 引脚 SSOP 封装)和 EMC6D100(采用 28 引脚 SSOP 封装)被设计为寄存器兼容。EMC6D100 提供 EMC6D101 的所有功能,外加额外的电压监控和系统控制功能。遗憾的是,无法在寄存器级别区分封装版本,因此这些额外的电压输入可能读取为零。EMC6D102 和 EMC6D103 具有额外的 ADC 位,从而提高了电压和温度通道的精度。

SMSC EMC6D103S 与 EMC6D103 相似,但不支持 pwm#_auto_pwm_minctl 和 temp#_auto_temp_off。

LM96000 支持其他高频 PWM 模式(22.5 kHz、24 kHz、25.7 kHz、27.7 kHz 和 30 kHz),这些模式可以在每个 PWM 的基础上进行配置。

硬件配置

LM85 可以跳线以用于 3 个不同的 SMBus 地址。LM85 没有其他硬件配置选项。

lm85 驱动程序检测芯片的 LM85B 和 LM85C 修订版。有关差异的完整说明,请参阅数据手册。除了识别芯片外,驱动程序对于这两个芯片的行为没有任何不同。建议在新设计中使用 LM85B。

ADM1027、ADT7463 和 ADT7468 芯片有一个可选的 SMBALERT 输出,如果超过限制或温度传感器发生故障,可以使用该输出向芯片组发出信号。可以屏蔽单个传感器中断,这样它们就不会触发 SMBALERT。如果配置了 SMBALERT 输出,则它将替换其他功能之一(PWM2 或 IN0)。此功能未在当前驱动程序中实现。

ADT7463 和 ADT7468 还具有可选的 THERM 输出/输入,可以将其连接到处理器 PROC_HOT 输出。如果可用,则可以启用自动风扇控制动态 Tmin 功能,以使系统温度保持在规格范围内(仅仅是吗?!),同时保持尽可能低的噪音。

配置说明

除了标准接口,驱动程序还添加以下内容

  • 温度和区域

每个温度传感器都与一个区域相关联。有三个传感器,因此有三个区域(# 1、2 和 3)。每个区域都有以下温度配置点

  • temp#_auto_temp_off
    • 低于此温度时,风扇应关闭或以非常低的速度旋转。

  • temp#_auto_temp_min
    • 超过此温度时,风扇开始旋转。

  • temp#_auto_temp_max
    • 风扇以全速旋转时的温度。

  • temp#_auto_temp_crit
    • 所有风扇都将全速运转时的温度。

PWM 控制

有三个 PWM 输出。LM85 数据手册表明 pwm3 输出控制 fan3 和 fan4。每个 PWM 都可以单独配置,并分配给一个区域以获取其控制值。每个 PWM 都可以根据以下选项单独配置。

  • pwm#_auto_pwm_min
    • 这指定 temp#_auto_temp_off 温度的 PWM 值。(PWM 值从 0 到 255)

  • pwm#_auto_pwm_minctl
    • 此标志选择 temp#_auto_temp_off 温度下风扇的行为。写入 1 让风扇以 pwm#_auto_pwm_min 旋转,或写入 0 让它们关闭。

注意

据报告,LM85 存在一个错误,该错误导致标志与区域(zone)而不是 PWM 相关联。这与所有已发布的文档相矛盾。在这种情况下,设置 pwm#_min_ctl 实际上会影响由区域“#”控制的所有 PWM。

PWM 控制区域选择

  • pwm#_auto_channels
    • 控制与 PWM 相关联的区域

配置选择

含义

1

由区域 1 控制

2

由区域 2 控制

3

由区域 3 控制

23

由区域 2 或 3 的较高温度控制

123

由区域 1、2 或 3 的最高温度控制

0

PWM 始终为 0%(关闭)

-1

PWM 始终为 100%(全开)

-2

手动控制(写入“pwm#”以设置)

National LM85 具有两个特定于供应商的配置功能:转速计模式和启动控制。有关这些功能的更多详细信息,请参阅 LM85 数据手册或应用笔记 AN-1260。lm85 驱动程序目前不支持这些功能。

Analog Devices ADM1027 具有多项特定于供应商的增强功能。可以设置风扇的每转脉冲数、可以针对 PWM 操作优化转速计监控,并且可以对温度应用偏移量以补偿测量中的系统误差。lm85 驱动程序目前不支持这些功能。

除了 ADM1027 的功能外,ADT7463 和 ADT7468 还具有 Tmin 控制和 THERM 断言计数。自动 Tmin 控制通过调整 Tmin 值来保持测量的温度传感器处于指定的温度。ADT7463 数据手册中没有关于此功能的太多文档。当前驱动程序不支持此功能。