内核驱动 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 位分辨率模式下上电。数据手册中指定的转换时间过低,必须增加。该设备支持驱动程序功能 1
和 2
。
MAX31850 设备与 DS1825 共享家族编号 0x3B。该设备通常与 DS1825 兼容。配置寄存器的最高 4 位全部读取为 1,表示 15,但设备始终在 14 位分辨率模式下运行。