内核驱动 lm90

支持的芯片

作者: Jean Delvare <jdelvare@suse.de>

描述

LM90 是一款数字温度传感器。它感应自身温度以及最多一个外部二极管的温度。它与许多其他设备兼容,其中许多设备都受到此驱动程序的支持。

此驱动程序支持的芯片系列源自 MAX1617。该芯片以及各种兼容芯片支持具有 8 位精度的本地和远程温度传感器。后来的芯片提供了更高的精度和其他附加功能,例如迟滞和温度偏移寄存器。

请注意,没有简单的方法可以区分 MAX6657、MAX6658 和 MAX6659 变体。只有当芯片位于地址 0x4d 或 0x4e 时,或者如果芯片类型被显式选择为 max6659 时,此驱动程序才支持 MAX6659 的额外功能。MAX6680 和 MAX6681 仅在引脚排列上有所不同,因此它们显然不能(并且不需要)被区分。

该系列的不同芯片组并非完全相同,尽管非常相似。作为参考,以下是一个非详尽的特定功能列表

LM84
  • 8 位传感器分辨率

ADM1020, ADM1021, GL523SM, MAX1617, NE1617, NE1617A, THMC10
  • 8 位传感器分辨率

  • 低温限制

NCT210, NE1618
  • 远程温度传感器的 11 位传感器分辨率

  • 低温限制

ADM1021A, ADM1023
  • 远程温度传感器的温度偏移寄存器

  • 远程温度传感器的 11 位分辨率

  • 低温限制

LM90
  • 远程温度传感器的 11 位分辨率

  • 远程温度传感器的温度偏移寄存器

  • 低和临界温度限制

  • 可配置的转换率

  • 0xBF 处的过滤器和警报配置寄存器。

  • ALERT 由超过临界限制的温度触发。

LM86 和 LM89
  • 与 LM90 相同

  • 更好的外部通道精度

LM99
  • 与 LM89 相同

  • 外部温度向下偏移 16 度

ADM1032
  • 0x22 处的连续警报寄存器。

  • 转换平均。

  • 高达 64 次转换/秒。

  • ALERT 由开放式远程传感器触发。

  • SMBus PEC 支持 Write Byte 和 Receive Byte 事务。

ADT7461, ADT7461A, NCT1008
  • 扩展的温度范围 (破坏兼容性)

  • 远程温度的较低分辨率

  • SMBus PEC 支持 Write Byte 和 Receive Byte 事务。

  • 10 位温度分辨率

ADT7481, ADT7482, ADT7483
  • 温度偏移寄存器

  • SMBus PEC 支持

  • 外部传感器的 10 位温度分辨率

  • 两个远程传感器

  • 可选地址 (ADT7483)

MAX6642
  • 无临界限制寄存器

  • 转换率不可配置

  • 更好的本地分辨率 (10 位)

  • 10 位外部传感器分辨率

MAX6646, MAX6647, MAX6649
  • 更好的本地分辨率

  • 扩展范围的无符号外部温度

MAX6648, MAX6692
  • 更好的本地分辨率

  • 无符号温度

MAX6654, MAX6690
  • 更好的本地分辨率

  • 可选地址

  • 远程传感器类型选择

  • 扩展温度范围

  • 只有当转换率 <= 1 Hz 时,才能使用扩展分辨率

MAX6657 和 MAX6658
  • 更好的本地分辨率

  • 远程传感器类型选择

MAX6659
  • 更好的本地分辨率

  • 可选地址

  • 第二个临界温度限制

  • 远程传感器类型选择

MAX6680 和 MAX6681
  • 可选地址

  • 远程传感器类型选择

MAX6695 和 MAX6696
  • 更好的本地分辨率

  • 可选地址 (max6696)

  • 第二个临界温度限制

  • 两个远程传感器

W83L771W/G
  • G 变体无铅,其他方面与 W 类似。

  • 0xBF 处的过滤器和警报配置寄存器

  • 移动平均 (取决于转换率)

W83L771AWG/ASG
  • W83L771W/G 的后续产品,具有相同的功能。

  • AWG 和 ASG 变体仅在封装格式上有所不同。

  • 0xE3 处的二极管理想因子配置 (远程传感器)

NCT7716
  • 8 位传感器分辨率

  • 可选地址

  • 可配置的转换率

NCT7717
  • 8 位传感器分辨率

  • 可配置的转换率

NCT7718
  • 远程温度传感器的温度偏移寄存器

  • 远程温度传感器的 11 位分辨率

  • 低温限制

  • 可配置的转换率

SA56004X
  • 更好的本地分辨率

所有温度值均以摄氏度给出。本地温度的分辨率为 1.0 度,远程温度的分辨率为 0.125 度,MAX6654、MAX6657、MAX6658 和 MAX6659 除外,它们的两种温度的分辨率均为 0.125 度。

每个传感器都有其自己的高和低限制,以及一个临界限制。此外,临界值有一个共同的相对迟滞值。为了使用户空间应用程序更轻松,导出了两个绝对值,每个通道一个,但这些值当然是链接的。只能从用户空间设置本地迟滞,并且相同的增量适用于远程迟滞。

lm90 驱动程序更新值的频率不会超过使用 update_interval 属性配置的频率;更频繁地读取它们不会造成任何危害,但会返回“旧”值。

SMBus 警报支持

此驱动程序对 SMBus 警报提供基本支持。当收到警报时,将读取状态寄存器并记录错误的温度通道。

Analog Devices 芯片(ADM1032、ADT7461 和 ADT7461A)和 ON Semiconductor 芯片(NCT1008)没有正确实现 SMBus 警报协议,因此需要格外小心:收到警报时禁用 ALERT 输出,并且仅在警报消失时重新启用。否则,只要警报处于活动状态,芯片就会阻止来自总线上其他芯片的警报。

PEC 支持

ADM1032 是该系列中唯一支持 PEC 的芯片。但是,它并非支持所有事务的 PEC,因此必须小心。

当读取寄存器值时,PEC 字节由 ADM1032 芯片计算和发送。但是,在组合事务(SMBus Read Byte)的情况下,ADM1032 仅计算消息后半部分的 CRC 值,而不是整个消息的 CRC 值,因为它认为消息的前半部分属于不同的事务。结果,CRC 值与 SMBus 主设备期望的值不同,并且所有读取均失败。

因此,只有当总线支持 SMBus Send Byte 和 Receive Byte 事务类型时,lm90 驱动程序才会为 ADM1032 启用 PEC。这些事务将用于读取寄存器值,而不是 SMBus Read Byte,并且 PEC 将正常工作。

此外,ADM1032 不支持带 PEC 的 SMBus Send Byte。相反,它会尝试将 PEC 值写入寄存器(因为带 PEC 的 SMBus Send Byte 事务类似于不带 PEC 的 Write Byte 事务),这不是我们想要的。因此,在 lm90 驱动程序中,PEC 在 SMBus Send Byte 事务中被显式禁用。

在正常情况下,字节数据事务上的 PEC 表示带宽使用量显着增加(写入时 +33%,读取时 +25%)。由于需要使用两个 SMBus 事务进行读取,因此该开销跃升至 +50%。更糟糕的是,两个事务通常意味着等待事务完成的时间加倍,从而有效地使寄存器缓存刷新时间加倍。我想可靠性是有代价的,但这次代价太高了。

因此,由于并非每个人都可能喜欢速度下降,因此默认情况下禁用 PEC,并且可以通过 sysfs 启用它。只需将 1 写入“pec”文件,PEC 就会启用。将 0 写入该文件以再次禁用 PEC。