DS18B20单总线策略的分析

时间:2024-04-06 15:49:23

一、温度传感器

         DS18B20是一款改进型智能数字温度传感器,其测温范围为-55℃~+125℃,在-10℃~+85℃范围内测量精度为±0.5℃,而且测温分辨率(9~12位)可编程调整。DS18B20采用了单总线接口技术,信息的读出或写入仅需要1根口线即可。其供电范围为3~5.5V,且提供了寄生供电模式,可以从数据线获取工作电源,以便进一步简化CPU与DS18B20间的电路连接,使得系统结构更加简单可靠。

二.DS18B20与单线总线技术简介

1.DS18B20内部ROM码结构

    为了进行区分,每片DSl8B20内部含有一个唯一的64位ROM编码。前8位是产品系列码,接着的48位是产品***,最后8位是CRC(循环冗余校验)码。由于对DS18B20来说,产品系列码固定为28H,而8位CRC校验码是根据产品系列码和产品***计算得到的,因此,DS18B20的ROM码最多可有248即281,474,976,710,656种,也即全世界最多可生产这么多的DS18B20芯片,足够人们使用。主机可以依据ROM码对挂在同一总线上的多片DS18B20进行唯一寻址,因此多片DS18B20能够连在同一条数据线上而不会造成混乱,这为温度的多点测量带来了极大的方便。64位的ROM码结构如下:

CRC

产品***

产品系列码

8位

48位

8位(对DS18B20为28H)

 

2.单线总线通信协议

    单线总线是一种在一条总线(即一根I/O口线)上,具有单主机、多从机结构的总线系统。为了不引起逻辑上的冲突,所有从机系统的单线总线接口都必须是漏极开路的,从而实现多个从机系统输出信号在总线上实现“线与”,因此在使用时必须对总线外加上拉电阻。

为保证数据的完整性,所有的单线总线器件都要遵循严格的通信协议:包括复位脉冲、应答脉冲、写时序以及读时序等信号类型。所有的单线总线命令序列(如初始化、ROM命令、寄存器读写命令等)都是由这些基本的信号类型组成的。在这些信号中,除了应答脉冲外,其他均由主机发出,并且值得注意的是:发送的所有命令和数据都是字节的低位在前,这与多数串行总线是相反的。

3.DS18B20的ROM操作命令

   在系统复位,主机检测到有DS18B20存在后,在能够进行寄存器读写之前,都必须先发送ROM操作命令,对于DS18B20,ROM命令主要有:

命令

命令码

功能

读ROM

33H

主机读 DS18B20的ROM编码

匹配ROM

55H

此命令后继以64位的ROM序列,对DS18B20寻址

跳过ROM

CCH

次命令允许主机不提供ROM码而访问从机存储器

搜索ROM

F0H

用于主机识别总线上的所有从机的64位ROM码

 

其中读ROM若在多节点时会引起总线冲突,使用跳过ROM命令后,若进行读操作,同样的也会引起冲突。因而在多点应用时,搜索ROM和匹配ROM命令尤为重要。

三.ROM码的搜索算法

当单线总线上挂有多个DS18B20时,系统对总线上器件的数量和每个器件ROM码的识别是通过DS18B20的搜索ROM命令与算法配合来实现的。

1.ROM搜索原理

根据单线总线协议,当主机发出搜索ROM命令后,从机应答时从64位ROM码的最低位开始,先发送原码,然后发送该位的补码,之后主机写入1位数据,ROM码最低位与此数据相同的DS18B20继续应答,反之则不再应答,如此循环“读2位、写1位”的过程,直至读到一个完整ROM码为止,然后复位总线,进行下一次搜索。下面对读、写进行具体分析。

(1)读2位

由于主机发出搜索命令后,所有从机都会将自己ROM码的第一位(最低位)的原码和补码放到总线上,那么就有下面四种可能的情况:若所有器件第一位都为0:那么所有器件放到总线上的原码都为0,补码都为1,读2位得到为“01”;若所有器件第一位都为1:同上可知,读到的值为“10”;若器件中有些为1,而有些为0:那么,放原码和补码时,都会有器件放0到总线上,根据“线与”逻辑可知读到的结果为“00”;总线上无器件:此情况下,没有器件拉低总线,读到为“11”。

(2)写1位

主机写1位的目的是为了排除和定位,具体要写入什么数据需要根据读2位的结果而定:若读到为“11”,表明无器件则结束搜索过程,无需再写入;若读到为“01”或“10”,表明所有器件此位相同,则应对应写入“0”或“1”,继续读下一位;若读到为“00”,表明总线上的器件在该位上数据发生冲突,此时,写入1位数据具有“排除”的作用,如果器件ROM编码在该位上的数据与写入的数据相同,则继续保持与总线的联系,如果不同则此器件在本次搜索中从总线上“排除”,不再响应主机发布的命令,直到主机进行下一次复位。

2.ROM搜索策略

根据上述ROM搜索原理的描述,可得到树形搜索策略图中圆形节点内所示即为对应位的ROM码。只有遇到读两位为“00”才会出现分叉,这也是搜索的关键所在。每一次搜索由根(即开始节点)沿树的一条路径进行,直到叶子(最后一位ROM码),读回一个ROM码,为了确保每次搜索所选路径不同,必须对所经过的分叉进行记录。其具体流程规则为:

(1)复位总线,发送ROM搜索命令;

(2)按读两位、写一位的方式进行,寻找“00”读码。在读到“00”之前若为“10”或“01”,直接记录对应位ROM码,并写入该码;若为“11”退出搜索。

(3)第一次搜索中读到“00”时,先全部写“0”,选择ROM码为“0”的路径,将最高“00”读码位置记录并保存下来为“最高00位”。

 (4)之后每次搜索中,遇到“00”读码后,比较此位与“最高00位”的位置,若在“最高00位”之前,则一律写上一次搜索在此位置写入的值;若位置相同,则写“1”;若在之后则写“0”。

在每一次搜索完成后,要将“最高00位”更新为本次搜索中写“0”的最高“00”读码位置,这也是最为重要的一步。

(5)当“最高00位”更新为0,即已到树的根部,则表明已搜索完全部ROM码,过程结束。
DS18B20单总线策略的分析DS18B20单总线策略的分析
具体流程规则

•(1)复位总线,发送ROM搜索命令;
•(2)按读两位、写一位的方式进行,寻找“00”读码。 在读到“00”之前若为“10”或“01”,直接记录对应位ROM码,并写入该码;若为“11”退出搜索。
(3)第一次搜索中读到“00”时,先全部写“0”,选择ROM码为“0”的路径,将最高“00”读码位置记录并保存下来为“最高00位”。
•(4)之后每次搜索中,遇到“00”读码后,比较此位与“最高00位”的位置,
•        若在“最高00位”之前,则一律写上一次搜索在此位置写入的值;
•        若位置相同,则写“1”;若在之后则写“0”。
•        在每一次搜索完成后,要将“最高00位”更新为本次搜索中写“0”的最高“00”读码位置,这也是最为重要的一步。
•(5)当“最高00位”更新为0,即已到树的根部,则表明已搜索完全部ROM码,过程结束。