深入解析一线协议DS18B20的工作原理和流程
文章目录
一、一线协议(1-Wire)
定义:主机和从机通过1根线进行通信,在一条总线上可挂接的从器件数量几乎不受限制。
特点:
二、1-Wire通信原理
所有的单总线器件要求采用严格的信号时序,以保证传输数据的完整性。以DS18B20为例,DS18B20有6种信号类型:复位脉冲、应答脉冲、写0/1、读0/1。除应答脉冲外,其余信号都由主机发出同步信号,且所有发送的命令和数据都是低位在前(LSB)。
初始化(复位脉冲和应答脉冲)
单总线上的所有通信都是以初始化序列开始的。主机输出低电平,并保持至少480us,产生复位脉冲。然后主机释放总线,4.7K的上拉电阻将单总线拉高,延时15~60us,并进入接收模式(Rx)。接着DS18B20拉低总线60~240us,产生低电平应答信号,若为低电平,再延时480us。
写时序
写时序包括写0和写1,所有写时序至少需要60us,且在两次独立的写时序之间至少需要1us的恢复时间,两种写时序起始于主机拉低总线。
读时序
单总线从器件在主机发出读时序时,才向主机传输数据,所以在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在两次独立的写时序之间至少需要1us的恢复时间。
当总线控制器把数据线从高电平拉低到低电平时,读时序开始,数据线必须保持1us,然后总线被释放。DS18B20通过拉高或拉低总线来传输1或0。当传输0结束后,总线将被释放,通过上拉电阻回到上升沿状态,从DS18B20输出的数据在读时序的下降沿出现后的15us内有效。因此,总线控制器在读时序开始后必须停止把I/O口驱动为低电平15us,以读取I/O口状态。
三、DS18B20
1.DS18B20基本介绍
DS18B20是Dallas半导体公司推出的一种“一线总线”接口的温度传感器,工作在3~5.5V电压范围内,测量的温度范围为-55~+125℃。
每个DS18B20芯片在出厂时,都固化烧录了一个唯一的64位产品序列号在它的ROM中,可以看作是该DS18B20的地址序列码。64位ROM的排列位:前8位为产品家族码,接着的48位为DS18B20的序列号,最后8位为前56位的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20各不相同,这样即可实现一根总线上挂载多个DS18B20。
2.DS18B20工作流程
DS18B20工作过程中的协议为:初始化,ROM操作命令,存储器操作命令,处理数据。
1.初始化
单总线上的所有通信都是以初始化序列开始,主机发出初始化信号后等待从设备的应答信号,以确定从设备是否存在并能正常工作。
2.ROM操作命令
主机检测到DS18B20的存在后,便可以发出ROM操作命令之一。一般我们不关心ROM中产品序列号,通常会发送0xCC跳过ROM的相关操作。
指令说明 | 十六进制代码 |
---|---|
Read ROM(读ROM) | [33H] |
Match ROM(匹配ROM) | [55H] |
Skip ROM(跳过ROM) | [CCH] |
Search ROM(搜索ROM) | [F0H] |
Alarm ROM(告警搜索) | [ECH] |
3.存储器操作指令
ROM命令操作完成之后,接下来可以发送相应的高速暂存存储器操作命令。其中0x44命令通知DS18B20温度传感器开始采样,而0xBE命令则开始读出DS18B20的采样值。
指令说明 | 十六进制代码 |
---|---|
Write Scratchpad(写暂存存储器) | [4EH] |
Read Scratchpad(读暂存存储器) | [BEH] |
Copy Scratchpad(复制暂存存储器) | [48H] |
Convert Temperature(温度变换) | [44H] |
Recall EPROM(重新调出) | [B8H] |
Read Power supply(读电源) | [B4H] |
4.数据处理
DS18B20的高速暂存存储器由9个字节组成,当温度转换命令(0x44)发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器前两个字节。接着可以发送读暂存存储器命令(0xBE)读出存储器里的值,存储器里的9个字节存储结构如下图所示:
如果我们只关心采样温度值的化的话,则只需要读前两个字节即可。其中Byte[0]为温度值的低字节,Byte[1]为温度值的高字节。这十六位数据的格式如下图所示:
其中,BIT[3:0]为温度值的小数部分,BIT[10:4]为温度值的整数部分,BIT[15:11]为符号位,为0则温度为正值,为1则温度为负值。