内核驱动 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 支持写入字节和接收字节事务。

ADT7461、ADT7461A、NCT1008
  • 扩展温度范围(打破兼容性)

  • 远程温度分辨率较低

  • SMBus PEC 支持写入字节和接收字节事务。

  • 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

SA56004X
  • 更好的本地分辨率

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

每个传感器都有自己的高低限制,外加一个临界限制。此外,两个临界值都有一个共同的相对滞后值。为了方便用户空间应用程序,导出了两个绝对值,每个通道一个,但这些值当然是链接的。只能从用户空间设置本地滞后,并且相同的 delta 应用于远程滞后。

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

SMBus 警报支持

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

模拟器件芯片(ADM1032、ADT7461 和 ADT7461A)和安森美半导体芯片 (NCT1008) 未正确实现 SMBus 警报协议,因此需要额外注意:当收到警报时,ALERT 输出被禁用,并且只有在警报消失后才会重新启用。否则,只要警报处于活动状态,芯片就会阻止总线中其他芯片的警报。

PEC 支持

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

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

因此,仅当总线支持 SMBus 发送字节和接收字节事务类型时,lm90 驱动程序才会为 ADM1032 启用 PEC。这些事务将用于读取寄存器值,而不是 SMBus 读取字节,并且 PEC 将正常工作。

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

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

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