17.2.2 DS18S20的数据操作及指令

单总线将通信时使用的引脚减少到只有1根,在数据传输时需要满足特定的格式才能进行。单总线主机和单总线从机之间的通信格式,如图17.3所示。其中,SS为单总线从机采样时间,MS为单总线主机采样时间。

17.2.2 DS18S20的数据操作及指令 - 图1

图 17.3 单总线通信格式

单总线的通信波形与脉宽调制类似,因为在数据位传输期间(或时隙)是通过宽脉冲(逻辑0)和窄脉冲(逻辑1)发送数据的。当单总线主机发出一个预定宽度的“复位”脉冲时,启动通信过程,并通过该脉冲同步整个总线系统。所有从机都会以一个逻辑低“应答”脉冲来响应复位脉冲。写数据时,单总线主机首先拉低单总线以启动一个时隙,然后保持总线为低(宽脉冲)来发送逻辑0,或释放总线(窄脉冲)使总线返回逻辑1状态。读数据时,单总线主机以窄脉冲方式拉低总线,重新启动一个时隙。然后单总线从机可以通过导通开漏极输出并保持线路为低来延长该脉冲,从而返回逻辑0;或保持开漏极的关闭状态以允许总线恢复,从而返回逻辑1。

一般来说,单总线总线通信的第一步是选择需要通信的单总线从机,然后单总线主机发送各种指令来进行数据传输。不同的单总线器件的指令也不相同,下面以单总线数字温度传感器DS18S20为例进行介绍。

1.ROM操作指令

ROM操作指令主要用于对单总线接口器件内的64位ROM序列号进行操作。单总线接口协议通过64位ROM序列号,可以区分出每个单总线器件,同时可以向总线上的主机报告有多少个单总线从器件以及从器件的类型。在实际的通信过程中,单总线主机可以通过如下5个ROM操作指令来实现对DS18S20的操作。

❑读ROM序列号指令,用于读出DS18S20内集成的64位激光ROM序列号。读ROM序列号指令的指令码为33H。

❑匹配ROM序列号指令,用于识别或者选中某一特定的DS18S20并进行后续操作。匹配ROM序列号指令的指令码为55H。

❑搜索ROM序列号指令,用于确定单总线上的DS18S20从器件数量以及所有从器件的ROM序列号。搜索ROM序列号指令的指令码为F0H。

❑跳过ROM序列号指令,该指令将对所有DS18S20进行操作,通常用于启动所有DS18S20进行温度转换之前,或者单总线中仅有一个DS18S20时。跳过ROM序列号指令的指令码为CCH。

❑温度报警搜索指令,用于识别和定位系统中超出用户设定的报警温度界限的DS18S20从机。温度报警搜索指令的指令码为ECH。

提示DS18S20的ROM序列号为64位,其中前8位为CRC冗余校验码(CRC Code),接着的48位为产品的序列号(Serial Number),最后8位是厂家号(Family Code)。

2.存储器操作指令

前面的ROM操作指令不涉及温度转换和片内存储器的操作。当通过ROM操作命令获取并选定需要通信的单总线从机后,主机便可以发出与该器件相关的操作命令,实现数据的读写。单总线主机可通过如下的6个存储器操作指令来对DS18S20进行操作。

(1)温度转换指令,用于启动DS18S20进行温度测量。温度转换指令的指令码为44H。

温度转换指令被执行后,DS18S20进行温度测量和转换。如果使用外部电源供电,在DS18S20处于温度转换中,主机发送读时间隙,DS18S20将在单总线上输出“0”,如果温度转换完成,则输出“1”。如果使用寄生电源供电,单总线主机在发出温度转换指令后,必须立即启动强上拉并保持750ms,在这段时间内单总线上不允许进行任何其他操作指令。

(2)复制暂存器指令,用于将高速暂存器中的内容复制到DS18S20的EEPROM中,即把温度报警器触发字节复制到非易失性存储器中。复制暂存器指令的指令码为48H。

如果使用外部电源供电,DS18S20在执行这条命令的过程中,主机发送读时间隙,DS18S20将在单总线上输出一个“0”,如果复制过程结束的话,DS18S20则输出“1”。如果使用寄生电源供电,单总线主机必须在发出复制暂存器命令后,立即启动强上拉并最少保持10ms,在这段时间内单总线上不允许进行任何其他操作指令。

(3)写暂存器指令,用于将数据写入到DS18S20高速暂存器的地址2(TH字节)和地址3(TL字节)中。当DS18S20执行写暂存器命令时,可以通过复位指令来终止写入。写暂存器指令的指令码为4EH。

(4)读电源指令,用于读取DS18S20的供电方式。读电源指令执行后,将返回DS18S20的供电方式。如果返回0表示使用寄生电源供电,如果返回1则表示使用外部电源供电。读电源指令的指令码为B4H。

(5)重读EEPROM指令,用于将存储在非易失性EEPROM中的内容重新读入到暂存器中。重读EEPROM指令的指令码为B8H。

重读EEPROM指令在DS18S20上电时会自动执行,这样器件一开始工作,暂存器里便存在有效数据了。重读EEPROM指令执行后,如果执行读时间隙,DS18S20会输出温度转换忙的标志。如果返回0表示忙,如果返回1则表示温度转换完成。

(6)读暂存器指令,用于读取高速暂存器中的内容。读暂存器指令的指令码为BEH。

读暂存器指令在执行时,从高速暂存器字节0开始,最多读取9个字节。在读暂存器命令执行过程中,单总线主机可以在任何时间发出复位命令来中止读取。

这里介绍的指令大部分需要对DS18S20内部存储器进行操作。DS18S20的内部存储器由一

个高速暂存器和一个非易失性电可擦除EEPROM组成,其存储器映像如图17.4所示。

17.2.2 DS18S20的数据操作及指令 - 图2

图 17.4 DS18S20的内部存储器映像

当DS18S20在单总线上通信时,EEPROM用来存储用户设定的高低温报警触发值TH和TL,而高速暂存器用于确保数据的完整性。数据先被写入高速暂存器,并可被读回。数据经过CRC校验后,用一个复制暂存器命令将数据复制到非易失性EEPROM中。在这一过程中,可以确保更改存储器时数据的完整性和准确性。

这里的所有指令在执行前都需要通过ROM操作指令选择从机,对于没有选定的单总线从机均忽略该通信过程,直到单总线主机发出下一个复位脉冲。