基于单片机串口实现1-Wire总线通信的方法
扫描二维码
随时随地手机看文章
摘 要: 主要介绍了一种借助单片机串口实现1-Wire总线通信的方法,并以集成数字温度传感器DS18B20为例,基于有限状态机采用该方法完成了通信程序的设计。
关键词: 1-Wire总线;串口;有限状态机;DS18B20
1-Wire总线是Dallas半导体公司推出的一种半双工串行总线,它采用单根信号线实现微控制器(主机)与接口器件(从机)之间的双向通信,每个从机具有唯一的工厂光刻ID作为地址。
1-Wire总线的优势在于结构简单、便于总线扩展,可以通过总线为器件供电。1-Wire器件种类丰富,典型器件包括温度传感器、存储器、实时时钟、电池管理等。在低功耗仪表、工业控制及家庭监控网络等领域,1-Wire总线获得了广泛应用。
1-Wire总线协议通常采用软件延时实现,对于实时性高且无操作系统的单片机,该方式难以提高单片机效率,同时极大地降低了系统实时性。本文提出了一种基于单片机串口的1-Wire总线协议的软硬件设计,该设计实现了1-Wire总线通信和单片机效率、实时性的兼顾。
1 1-Wire总线协议简析
1-Wire总线的单根信号线兼有地址总线、数据总线和控制总线的功能,因此,访问1-Wire器件要严格遵循总线协议以保证数据完整性。
1-Wire总线协议定义了初始化脉冲、写脉冲和读脉冲3类总线信号,其主要区别在于,总线上高低电平时间不同,下面分别对它们进行简析。
2.2 通信协议接口
单片机串口采用1 bit起始位、8 bit数据位、1 bit停止位的工作方式,发送时由LSB至MSB逐位发送。
(1)初始化脉冲
设置波特率为9 600 b/s,即每1 bit的宽度为104.2 μs,发送数据0xf0,则起始位和低4 bit构成复位信号,高4 bit为1,即释放总线。如总线上无应答信号,则串口接收的数据等于0xf0,否则说明总线上有应答信号。
(2)读写脉冲
设置波特率为115 200 b/s,即每1 bit的宽度为8.7 μs,完整的发送过程持续87 μs,满足读写脉冲至少60 μs的协议要求。起始位、停止位分别用来启动、终止读写脉冲。写脉冲中,根据串口发送不同数据区分别实现写0时序和写1时序;读脉冲中,串口发送数据0xff,起始位实现读脉冲时序的启动,LSB为1,此时,主机释放并采样总线,起始位与LSB共维持17.4 μs,满足协议对读时序的要求。根据串口接收的数据最低位即可区分从机发送至总线的数据。
采用串口实现1-Wire总线通信的本质在于将3类总线信号与不同波特率下不同数据的串口收发过程建立联系,初始化脉冲对应2次串口收发的过程,读写脉冲则对应1次串口收发的过程[4]。具体对应关系如表1所示。
3 1-Wire总线应用——DS18B20
DS18B20是1-Wire总线的集成数字