内核驱动 w1_therm

支持的芯片

  • 基于 Maxim ds18*20 的温度传感器。

  • 基于 Maxim ds1825 的温度传感器。

  • GXCAS GX20MH01 温度传感器。

  • Maxim MAX31850 热电偶接口。

作者:Evgeniy Polyakov <johnpol@2ka.mipt.ru>

描述

w1_therm 为 ds18*20、ds28ea00、GX20MH01 和 MAX31850 设备提供基本的温度转换功能。

支持的系列代码

W1_THERM_DS18S20

0x10

W1_THERM_DS1822

0x22

W1_THERM_DS18B20

0x28

W1_THERM_DS1825

0x3B

W1_THERM_DS28EA00

0x42

支持通过 sysfs 条目 w1_slave 提供。每次打开和读取序列将启动一次温度转换,然后提供两行 ASCII 输出。第一行包含读取的九个十六进制字节以及计算出的 CRC 值,并显示是否匹配(YES 或 NO)。如果 CRC 匹配,则保留返回的值。第二行显示保留的值以及以 t= 开头的摄氏千分之一度温度。

另外,可以使用 temperature sysfs 读取温度,它只返回摄氏千分之一度的温度。

可以通过向 w1_bus_master 级别的 therm_bulk_read 条目写入 trigger 来对总线上的所有设备进行批量读取。这将向总线上的所有设备发送转换命令,并且如果在总线上检测到寄生供电设备(并且模块中启用了强上拉),它将在寄生供电设备所需的较长转换时间内将线路驱动为高电平。读取 therm_bulk_read 将返回 0 表示没有批量转换待处理,-1 表示至少有一个传感器仍在转换中,1 表示转换已完成但至少一个传感器值尚未读取。然后通过读取每个设备的 temperature 条目来获取结果温度,如果转换仍在进行中,该条目可能返回空。请注意,如果发送了批量读取但未立即读取某个传感器,则下次访问该设备的 temperature 将返回发出批量读取命令时的温度(而不是当前温度)。

如果需要,转换期间将施加强上拉。

conv_time 用于获取当前转换时间(读取)并进行调整(写入)。温度转换时间取决于设备类型及其当前分辨率。默认转换时间由驱动程序根据设备数据手册设置。许多原始设备克隆的转换时间偏离了数据手册的规格。有三个选项:1) 通过向 conv_time 写入以毫秒为单位的值来手动设置正确的转换时间;2) 通过向 conv_time 写入 1 来自动测量并设置转换时间;3) 使用 features 启用轮询以完成转换。选项 2、3 不能在寄生供电模式下使用。要恢复默认转换时间,请向 conv_time 写入 0

将分辨率值(以位为单位)写入 w1_slave 将改变传感器下次读数的精度。允许的分辨率由传感器定义。传感器断电再上电后,分辨率将重置。

要将当前分辨率存储到 EEPROM 中,请向 w1_slave 写入 0。由于 EEPROM 的写入次数有限(>50k 次),因此应谨慎使用此命令。

另外,如果传感器支持,可以使用每个设备上的专用 resolution 条目来读取或写入分辨率。

一些非原装的 DS18B20 芯片仅固定在 12 位模式,因此实际分辨率会从芯片中读回并进行验证。

注意:更改分辨率会将转换时间恢复为默认值。

只写 sysfs 条目 eeprom_cmd 是 EEPROM 操作的替代方法。写入 save 以将设备 RAM 保存到 EEPROM。写入 restore 以将 EEPROM 数据恢复到设备 RAM 中。

ext_power 条目允许检查每个设备的电源状态。如果设备是寄生供电,则读取 0;如果设备是外部供电,则读取 1

Sysfs alarms 允许读取或写入 TH 和 TL(高温和低温)警报。值应以空格分隔,并在设备范围内(通常为 -55°C 至 125°C)。值是整数,因为它们存储在设备中的 8 位寄存器中。最低值会自动设置为 TL。设置后,可以在主级别搜索警报。

模块参数 strong_pullup 可以设置为 0 以禁用强上拉,设置为 1 以启用自动检测,或设置为 2 以强制强上拉。在自动检测情况下,驱动程序将使用“READ POWER SUPPLY”命令来检查总线上是否存在寄生供电设备。如果存在,它将激活主设备的强上拉。如果使用此命令检测寄生设备失败(某些 DS18S20 似乎是这种情况),则可以强制启用强上拉。

如果启用强上拉,当转换发生时,主设备的强上拉将被驱动,前提是主驱动程序支持强上拉(否则它会回退到上拉电阻)。DS18B20 温度传感器规范列出了最大电流消耗为 1.5mA,并且 5k 上拉电阻不足。强上拉旨在提供所需的额外电流。

DS28EA00 提供了额外的两个引脚,用于实现序列检测算法。此功能允许您确定芯片在 1-Wire 总线中的物理位置,而无需预先了解总线顺序。支持通过 sysfs w1_seq 提供。该文件将包含一行,其中包含一个整数值,表示设备在总线中的索引,从 0 开始。

features sysfs 条目控制每个设备的可选驱动程序设置。寄生模式下电源不足、线路噪音和转换时间不足可能导致转换失败。原始 DS18B20 和一些克隆版本允许检测无效转换。向 features 写入位掩码 1 以启用检查转换成功。如果在转换后暂存器内存的字节 6 为 0xC,并且温度读数为 85.00(上电值)或 127.94(电源不足),则驱动程序会返回转换错误。位掩码 2 通过在转换开始后在总线上生成读取周期来启用轮询以完成转换(仅限正常供电)。在寄生供电模式下,此功能不可用。功能位掩码可以组合(OR)。更多详情请参见 ABI 文件测试/sysfs-driver-w1_therm

GX20MH01 设备与 DS18*20 共享家族编号 0x28。该设备通常与 DS18B20 兼容。在配置寄存器中添加了最低 2-5、2-6 温度位;配置寄存器中的 R2 位启用 13 和 14 位分辨率。该设备在 14 位分辨率模式下上电。数据手册中指定的转换时间过低,必须增加。该设备支持驱动程序功能 12

MAX31850 设备与 DS1825 共享家族编号 0x3B。该设备通常与 DS1825 兼容。配置寄存器的最高 4 位全部读取为 1,表示 15,但设备始终在 14 位分辨率模式下运行。