1.3 DS18820 ROM搜索命令
当单线总线上挂有多个DS18B20时,系统对总线上器件的数量和每个器件的ROM的识别与搜索是通过DS18820 ROM搜索命令与算法配合来实现的。下面具体介绍ROM搜索命令的工作过程。对64位ROM编码识别从最低位开始,ROM编码的每一位搜索过程可总结为 “两读一写”:读一位,读该位补码;写一位。总线主机在ROM编码每一位上完成这三步就可以获得一个器件的ROM编码。
(1)两 读
总线主机发布ROM搜索命令后执行一次读,总线上所有器件就把它们各自ROM编码的第一位放到总线来作出响应。这次读获得的数据是所有器件放在总线上数据的“与”。再执行一次读,因为ROM搜索命令正在执行所以总线上所有器件把各自ROM编码的第一位的补码放在总线上,第二次读获得的数据也是所有器件放在总线上数据的“与”。对第一位的“两读”就此完成。之后主机再次进行的“两读”则是针对ROM编码的第二位,以此类推。从“两读”获得的数据有以下解释,如表1所列。
(2)- 写
对ROM编码的某一位“两读”之后,对该位进行“-写”操作。“-写”操作写的数据要根据“两读”获得的数据来确定。如果“两读”数据为00,则表示总线上器件在该位上数据发生冲突,“-写”写的数据此种情况下具有“排除”的作用,如果器件ROM编码在该位上的数据与“-写”写的数据相同,则继续保持与总线的联系。如果不相同则此器件从总线上“排除”,不再响应主机发布的命令,直到主机进行下一次复位。如果“两读”数据为01,则表示总线上所有器件在该位上均位0,为保持器件与总线的联系,“-写”操作主机应写0。同理,如“两读”数据为10,主机则应写1。
2 DS18820 ROM编码的搜索算法
在一条“单线总线”上挂有多片。DS18820的情况下,对ROM编码的搜索与识别主要是通过“两读”数据为00时“-写”操作的“排除”作用来实现的。多次“排除”作用后,就可以使总线上只剩下唯一的一个器件仍与总线保持联系。如何“排除”,这需要算法的配合。下面具体介绍DS18820 ROM编码的搜索算法。