目录
3.2.5 报警搜索[ECh](仅少数1-wire 器件支持)
1. 概述
1-wire 单总线是 Maxim 全资子公司 Dallas 的一项专有技术与目前多数标准串行数据通信方式,如 SPI/I2C/MICROWIRE不同,它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的。它具有节省 I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。为了专注于通信本身,文章只介绍命令序列和信号方式(信号类型和时序)。
2. 信号方式
2.1 复位和应答
注释:高速模式下,时间缩小10倍。
2.2 读/写时序
注意:此处的“采样时刻”定义,协议定义了通信的采样读取时间,而不是传统的跳变沿读取。
3. 命令序列
3.1 初始化
3.2 ROM命令
3.2.1 搜索ROM[F0h]
当系统初始上电时,主机必须找出总线上所有从机设备的ROM代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索ROM 循环(搜索ROM命令跟随着位数据交换),以找出总线上所有的从机设备。如果总线只有一个从机设备则可以采用读ROM命令来替代搜索ROM命令。关于搜索ROM命令的详细解释,请参见附录A。在每次执行完搜索ROM循环后,主机必须返回至命令序列的第一步(初始化)。
3.2.2 读ROM[33h](仅适合于单节点)
该命令仅适用于总线上只有一个从机设备。它允许主机直接读出从机的64位ROM 代码,而无须执行搜索ROM过程。如果该命令用于多节点系统,则必然发生数据冲突,因为每个从机设备都会响应该命令。
3.2.3 匹配ROM[55h]
匹配ROM命令跟随64位ROM 码,从而允许主机访问多节点系统中某个指定的从机设备。仅当从机完全匹配64位ROM代码时,才会响应主机随后发出的功能命令;其它设备将处于等待复位脉冲状态。
3.2.4 跳越ROM[CCh] (仅适合于单节点)
主机能够采用该命令同时访问总线上的所有从机设备,而无须发出任何ROM代码信息。例如,主机通过在发出跳越ROM命令后跟随转换温度命令[44h],就可以同时命令总线上所有的DS18B20 开始转换温度,这样大大节省了主机的时间。值得注意,如果跳越ROM命令跟随的是读暂存器[BEh]的命令(包括其它读操作命令),则该命令只能应用于单节点系统,否则将由于多个节点都响应该命令而引起数据冲突。
3.2.5 报警搜索[ECh](仅少数1-wire 器件支持)
除那些设置了报警标志的从机响应外,该命令的工作方式完全等同于搜索ROM命令。该命令允许主机设备判断那些从机设备发生了报警(如最近的测量温度过高或过低等)。同搜索ROM命令一样,在完成报警搜索循环后,主机必须返回至命令序列的第一步。
4. 功能命令(以DS18B20为例)
在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20暂存器、启动温度转换以及判断从机的供电方式。DS18B20的功能命令总结于表1中,并在图3 流程图中作了说明。
命令 | 描述 | 命令代码 | 响应信息 | 注释 |
---|---|---|---|---|
转换温度 | 启动温度转换 | 0x44 | 无 | 1 |
读暂存器 | 读全部的暂存器内容,包括CRC字节 | 0xBE | DS18B20传输至多9个字节 | 2 |
写暂存器 | 写暂存器第2、3和4个字节的数据(即TH、TL和配置寄存器) | 0x4E | 主机传输3个字节数据 | 3 |
复制暂存器 | 将暂存器中的TH、TL和配置字节复制到EEPROM中 | 0x48 | 无 | 1 |
回读EEPROM | 将TH、TL和配置字节从EEPROM回读至暂存器中 | 0xB8 | DS18B20传送回读状态至主机 | |
读取供电方式 | 0xB4 | 1bit:0 = 寄生电源,1 = 提供外部电源 |
2. 通过发出复位脉冲,主机能够在任何时候中断数据传输;
3. 在复位脉冲发出前,必须写入全部的三个字节。
5. One-Wire通信实例实测
本实例使用 Kingst LA5016 usb 逻辑分析仪检测1-wire协议数据通讯。下图是一个完整的数据包分析截图。从图中可以看到一个完整的One-Wire通信过程,LA5016将协议数据分为RESET condition(主机复位)、PRESENCE condition(从机应答)、 主机发送ROM命令、从机ROM命令应应答、主机发送功能命令及从机应答。对于“从机ROM命令应答”,协议解析为3个部分:8bit-FAMILY CODE(家族码,唯一)、48bit-ROM CODE 及 8bit-CRC校验码。
下图为One-Wire协议解析截图。