内核驱动 ds1621¶
支持的芯片
达拉斯半导体 / 美信集成 DS1621
前缀:‘ds1621’
扫描的地址:无
数据手册:可从 www.maximintegrated.com 公开获取
达拉斯半导体 DS1625
前缀:‘ds1625’
扫描的地址:无
数据手册:可从 www.datasheetarchive.com 公开获取
美信集成 DS1631
前缀:‘ds1631’
扫描的地址:无
数据手册:可从 www.maximintegrated.com 公开获取
美信集成 DS1721
前缀:‘ds1721’
扫描的地址:无
数据手册:可从 www.maximintegrated.com 公开获取
美信集成 DS1731
前缀:‘ds1731’
扫描的地址:无
数据手册:可从 www.maximintegrated.com 公开获取
- 作者
Christian W. Zuckschwerdt <zany@triq.net>
Jan M. Sendler 的宝贵贡献 <sendler@sendler.de>
由 Aurelien Jarno <aurelien@aurel32.net> 移植到 2.6 版本,并由 Jean Delvare <jdelvare@suse.de> 提供帮助
模块参数¶
极性 int 输出极性
0 = 有效高电平,
1 = 有效低电平
描述¶
DS1621 是一款(单实例)数字温度计和恒温器。它具有用户可定义的高温和低温限制(即编程到片上非易失性寄存器中)。温度范围为 -55 摄氏度至 +125 摄氏度,增量为 0.5。您可以将其转换为 -67 至 +257 华氏度的范围,增量为 0.9。如果未提供极性参数,则使用原始值。
至于恒温器,也可以使用极性切换来编程其行为。一方面(“加热器”),当达到或低于低温限制时,芯片的恒温器输出 Tout 将触发,并保持高电平,直到达到或超过高温限制。另一方面(“冷却器”),则相反。“加热器”等于“有效低电平”,而“调节器”等于“有效高电平”。请注意,DS1621 数据手册在这方面有些误导,因为设置极性位并不会简单地反转 Tout。
第二件事是,在广泛的测试中,即使与精确的温度读数相比,Tout 也显示出高达 +/- 0.5 度的容差。请确保高低温限制之间至少有 1.0 摄氏度的差距,以避免 Tout “跳动”!
当达到或超过高低温限制时,会设置报警位,并在模块离开各自的温度范围时立即复位。
报警寄存器不适合了解 Tout 的实际状态。它们只会告诉您其历史记录,自从上次上电或复位以来,是否曾经达到或超过任何限制。请注意:在测试时,它表明 Tout 的状态可能会在未设置任何警报的情况下发生变化。
由于没有版本或供应商标识寄存器,因此这些设备没有唯一的标识。因此,需要显式的设备实例化才能正确识别和功能(在此地址范围内的每个地址一个设备:0x48..0x4f)。
DS1625 与 DS1621 引脚兼容且功能等效,但 DS1621 旨在替代它。DS1631、DS1721 和 DS1731 也与 DS1621 引脚兼容,并提供多分辨率支持。
此外,DS1721 数据手册说温度标志(THF 和 TLF)在内部使用,但是,当实际温度越过最小或最大设置时(默认情况下分别设置为 75 度和 80 度),这些标志确实会被设置和清除。
温度转换¶
DS1621 - 750 毫秒(较旧的设备可能需要长达 1000 毫秒)
DS1625 - 500 毫秒
DS1631 - 93 毫秒..750 毫秒,分别对应 9..12 位分辨率。
DS1721 - 93 毫秒..750 毫秒,分别对应 9..12 位分辨率。
DS1731 - 93 毫秒..750 毫秒,分别对应 9..12 位分辨率。
注意:在 DS1621 上,对非易失性寄存器的内部访问可能持续 10 毫秒或更短时间(在其他设备上未经验证)。
温度精度¶
DS1621:+/- 0.5 摄氏度(从 0 到 +70 度)
DS1625:+/- 0.5 摄氏度(从 0 到 +70 度)
DS1631:+/- 0.5 摄氏度(从 0 到 +70 度)
DS1721:+/- 1.0 摄氏度(从 -10 到 +85 度)
DS1731:+/- 1.0 摄氏度(从 -10 到 +85 度)
注意
请参考设备数据手册,了解其他温度下的精度。
温度分辨率:¶
如上所述,DS1631、DS1721 和 DS1731 提供多分辨率支持,这是通过 R0 和 R1 配置寄存器位实现的,其中
R0..R1¶
R0 |
R1 |
|
---|---|---|
0 |
0 |
9 位,0.5 摄氏度 |
1 |
0 |
10 位,0.25 摄氏度 |
0 |
1 |
11 位,0.125 摄氏度 |
1 |
1 |
12 位,0.0625 摄氏度 |
注意
在初始设备上电时,默认分辨率设置为 12 位。
DS1631、DS1721 或 DS1731 的分辨率模式可以从用户空间通过设备 ‘update_interval’ sysfs 属性进行更改。此属性将输入值的范围标准化为数据手册中定义的设备最大分辨率值,如下所示
分辨率 |
转换时间 |
输入范围 |
---|---|---|
(C/LSB) |
(毫秒) |
(毫秒) |
0.5 |
93.75 |
0....94 |
0.25 |
187.5 |
95...187 |
0.125 |
375 |
188..375 |
0.0625 |
750 |
376..无穷大 |
以下示例显示了如何使用 ‘update_interval’ 属性来更改转换时间
$ cat update_interval
750
$ cat temp1_input
22062
$
$ echo 300 > update_interval
$ cat update_interval
375
$ cat temp1_input
22125
$
$ echo 150 > update_interval
$ cat update_interval
188
$ cat temp1_input
22250
$
$ echo 1 > update_interval
$ cat update_interval
94
$ cat temp1_input
22000
$
$ echo 1000 > update_interval
$ cat update_interval
750
$ cat temp1_input
22062
$
如图所示,ds1621 驱动程序通过阶跃函数自动调整 ‘update_interval’ 用户输入。在写入操作后读回 ‘update_interval’ 值会提供设备使用的转换时间。
在数学上,可以通过以下函数从转换时间推导出分辨率
g(x) = 0.5 * [minimum_conversion_time/x]
其中
‘x’ = ‘update_interval’ 的输出
‘g(x)’ = 每 LSB 的摄氏度分辨率。
93.75 毫秒 = 最小转换时间