目录
1、ROM Code
2、CRC
CRC = X^8 + X^5 + X^4 + 1
3、DS18B20 MEMORY MAP
3.1、温度计算
DS18B20的温度以二进制补码格式存储在TEMPERATURE LSB和TEMPERATURE MSB中。
3.2、温度报警
如果测温结果高于TH或低于TL,则设备内部会设置告警标志。此标志会随着每次温度测量而更新。只有设置了报警标志的DS18B20设备才会响应alarm search命令。
3.3、温度分辨率
R1 | R0 | 温度分辨率 |
0 | 0 | 9 bit (0.5°C) |
0 | 1 | 10 bit (0.25°C) |
1 | 0 | 11 bit (0.125°C) |
1 | 1 | 12 bit (0.0625°C) 注:12位读数为出厂默认状态。 |
4、ROM search
ROM search过程的核心规则, 是在搜索中重复进行一个简单的三步操作:
1)总线主机读取1个bit。此时每个设备都会将ROM当前这一位的bit值放到总线上.
2)总线主机继续读取1个bit。此时每个设备会将ROM当前这一位的bit的补码放到总线上.
3)总线主机写入1个bit。 表示选择当前位为该bit的设备。比如写入0, 表示选择当前位为0的设备进行后续的响应(当前位为1的设备后续不进行响应)。
4.1、示例
下面的ROM search过程假设四个不同的设备连接到相同的1-Wire总线。四个设备的ROM数据如下图所示:
- ROM1 00110101…
- ROM2 10101010…
- ROM3 11110101…
- ROM4 00010001…
搜索步骤如下
1)总线主机通过发出复位脉冲开始初始化序列(RESET)。
2)总线主机将在1-Wire总线上发出ROM search命令
3)总线主机从1-Wire总线读取一个bit。每个设备将通过将其各自ROM数据的第一个bit值放置到总线上来响应。ROM1 和 ROM4 会对总线写0(拉低总线);而 ROM2 和 ROM3 则会对总线写1(保持高电平)。由于线与,此时总线主机读取的是0。总线主机继续读下一个bit, 每个设备会将第一个bit的补码放到总线上, 此时ROM1 和 ROM4 会对总线写1, 而 ROM2 和 ROM3 会对总线写0, 因此总线主机依然读到一个0, 这时候总线主机就可以知道存在多个设备, 并且它们的ROM在这一bit上的值不同。
三步法的两次读取得到的数据的含义如下:
00 | 有多个设备, 且在这一位上值不同 |
01 | 所有设备的 ROM在这一位上的值是0 |
10 | 所有设备的 ROM在这一位上的值是1 |
11 | 总线上没有设备 |
4)总线主机写入0,表示在后面的搜索中选择 ROM1 和 ROM4(屏蔽 ROM2 和 ROM3)
5)总线主机再执行两次读取并接收一个0位和一个1位。这表明仍然ROM1 和 ROM4在这一位上的值是0。
6)然后总线主机写入一个0,以保持ROM1和ROM4耦合(继续选择 ROM1 和 ROM4)。
7)总线主机执行两次读取并接收两个0位。 这表示总线上还有多个设备, 在这一位上的值不同。
8)总线主机写入一个0位。这将取消选择ROM1,使ROM4成为唯一仍然连接的设备(仅选择 ROM4)。
9)总线主机重复进行三步操作,读出 ROM4 剩余的位, 唯一标识了1-Wire总线上的ROM4设备
10)总线主机通过重复步骤1到步骤7开始一个新的ROM search序列
11)总线主控写入一个1位。这将使ROM4解耦,只留下ROM1仍然耦合(仅选择 ROM1)。
12)总线主机为重复进行三步操作,读出 ROM1 剩余的位, 唯一标识了1-Wire总线上的ROM1设备
13)总线主机通过重复步骤1到步骤3开始一个新的ROM search。
14)总线主控写入一个1位。这将取消选择ROM1和ROM4用于此搜索传递的其余部分,只将ROM2和ROM3耦合到系统中(选择 ROM2 和 ROM3)。
15)总线主机执行两次读取并接收两个0位。
16)总线主机写入一个0位。这将使ROM3解耦,只留下ROM2。
17)总线主机为重复进行三步操作,读出 ROM2 剩余的位, 唯一标识了1-Wire总线上的ROM2设备
18)总线主机通过重复步骤13到步骤15开始一个新的ROM search。
19)总线主控写入一个1位。这样就解耦了ROM2,只剩下ROM3。
20)总线主机为重复进行三步操作,读出 ROM3 剩余的位, 唯一标识了1-Wire总线上的ROM3设备
5、时序
DS18B20相关的时序有:reset pulse、presence pulse, write 0, write 1, read 0, and read 1。除了presence pulse外,所有这些信号都是由总线主机发起的。
5.1、复位时序
5.2、写时序
5.3、读时序
6、命令
6.1、ROM FUNCTION COMMANDS
Read ROM [33h] | 该命令允许总线主机读取DS18B20的8位family code、48位序列号和8位CRC。该命令只能在总线上有单个DS18B20时使用。 |
Match ROM [55h] | match ROM命令,后跟64位ROM序列,允许总线主机在多路总线上寻址特定的DS18B20。只有与64位ROM序列完全匹配的DS18B20才会响应随后的命令。所有与64位ROM序列不匹配的从存储器将等待复位脉冲。 |
Skip ROM [CCh] | 该命令允许总线主机在不提供64位ROM code的情况下访问功能,从而在单总线系统中节省时间。如果总线上有一个以上的设备,并且在Skip ROM命令之后发出了Read命令,那么当多个设备同时传输时,总线上就会发生数据冲突。 |
Search ROM [F0h] | 当系统最初启动时,总线主机可能不知道1-Wire总线上的设备数量或它们的64位ROM codes。此命令允许总线主机使用消除过程来识别总线上所有从设备的64位ROM codes 。 |
Alarm Search [ECh] | 该命令的流程与Search ROM命令相同。然而,DS18B20只有在最后一次温度测量中遇到报警条件时才会响应此命令(告警条件定义为温度高于TH或低于TL)。如果存在告警条件,并且TH或TL设置发生了变化,则应进行另一次温度转换以验证任何告警条件。 |
6.2、MEMORY COMMAND FUNCTIONS
Write Scratchpad [4Eh] | 此命令写入3个字节到DS18B20的scratchpad(TH、TL、CONFIG)。 |
Read Scratchpad [BEh] | 该命令读取scratchpad的内容。如果不是所有的内容都要读取,主机可以在任何时候发出RESET以终止读取。 |
Copy Scratchpad [48h] | 该命令将scratchpad复制到DS18B20的E2存储器中,将TH和TL的值存储在非易失性存储器中。写入时间需要10ms。 |
Convert T [44h] | 该命令开始温度转换。温度转换需要750ms。 |
Recall E2 [B8h] | 该命令将存储在E2中的TH和TL值加载到scratchpad中。 注:此操作在DS18B20上电时也会自动发生。 |
Read Power Supply [B4h] | 该命令用于读取电源模式信号。 |