|
基于GD32的仓库温度报警系统---DS18B20资料细读
[复制链接]
DS18B20的硬件特性:
DS18B20芯片内部集成了64bit容量的ROM(只读存储器),存储每一个DS18B20唯一的序列码,所以MCU将来要想访问某个DS18B20,只需通过ROM中的序列码即可访问,也就是MCU只需向总线发送对应的DS18B20的序列码即可访问某个外设.DS18B20芯片内部还集成了9字节容量的SRAM(不用初始化,直接访问),SRAM的数据会掉电丢失.这个SRAM用来当成DS18B20的寄存器,并且9字节的SRAM的分配如下:byte0:保存采集的温度的低字节;byte1:保存采集的温度的高字节.则温度值=byte1<<8|byte0.
从网上下载的芯片手册,我们可以得知:要想访问DS18B20,必须遵循以下三步骤
1.MCU(GD32F350)向总线发送初始化复位信号
2.MCU(GD32F350)向总线发送ROM命令
3.MCU(GD32F350)向总线发送功能命令(读还是写还是其他功能)
MCU(GD32F350)向总线发送ROM命令
如果总线上连接了多个DS18B20,MCU(GD32F350)只需向总线发送要访问的外设的序列码即可,类似I2C总线的设备地址的发送
由于MCU(GD32F350)只有连接了1个DS18B20,无需匹配,MCU(GD32F350)直接向总线发送SKIP ROM命令,跳过匹配的过程,SKIP ROM的命令字等于0xCC,也就是MCU(GD32F350)只需通过一根数据线将0xCC发送给DS18B20外设即可.需要注意的是DS18B20数据传输从低位开始.
其操作具体的流程如下:
1.MCU(GD32F350)向总线发送初始化复位信号
2.MCU(GD32F350)向总线发送命令0xCC,跳过匹配过程
3.MCU(GD32F350)先向总线发送温度采集命令0x44,让DS18B20进行硬件的温度采集,采集温度自动保存在byte0和byte1中
4.MCU(GD32F350)向总线发送初始化复位信号
5.MCU(GD32F350)向总线发送命令0xCC,跳过匹配过程
6.MCU(GD32F350)向总线发送读取SRAM数据命令0xBE
7.MCU(GD32F350)开始从总线上读取数据byte0
8.MCU(GD32F350)继续从总线上读取数据byte1
9.MCU(GD32F350)向总线发送复位信号,停止后面SRAM数据的读取
10.最后进行温度值的最终换算
以上是个人对DS18B20的详细理解,如有差错,还烦请各位网友指出纠正,谢谢!
|
|