1-Wire器件与8051系列单片机的软件接口
关键词:1-Wire总线,软件接口,CRC校验
1 引言
现在,单片机应用系统的外围扩展已逐渐从以并行方式为主过渡到以串行方式为主,许多新型外围器件都带有串行扩展接口。通常的串行扩展接口和串行扩展总线有:UART的移位寄存器方式,MOTOROLA公司的SPI,NS公司的Microwire,Philips公司的IIC和Dallas公司的1-Wire总线等。1-Wire总线是一种最简单的总线形式,它通过单条连接线完成了全部的控制、通信和供电,节省了I/O口,降低了系统成本并简化了设计。1-Wire器件家族包含多种功能的器件,如身份识别器、传感器、控制和存储器等。在应用系统中,需要将这些简易实用的外围器件与系统中的微控制器互连。常用的方法包括:简单的软件方案;串行接口芯片,如DS2480;或以VHDL方式整合1-Wire主控器于定制的ASIC中。本文结合以1-Wire温度传感器构成的温度测控系统,详细讲述1-Wire器件与常用的8051系列单片机的软件接口。
2 1-Wire总线简述
2.1 硬件配置
1-Wire总线通常如图1连接,构成一个简捷的1-Wire网络,它包括三个主要部分:带有控制软件的主控器(Master),连接上拉电阻和稳压二极管的连接线,以及各种功能的1-Wire器件(Slave)。漏极开路的端口结构和上拉电阻Rpu使总线空闲时处于高电平状态(3V至5.5V),从器件可直接从数据线上获得工作电能(节省了电源线)。每一位读写时隙开始时,主控器把总线拉低(小于0.8V),结束时,释放总线为高电平,这种按位自同步的数据传输方式节省了时钟线。稳压二极管将总线最高电平限定在5.6V,起保护端口的作用。
1-Wire器件内部结构如图1所示,1-Wire接口实现供电和同步。ROM存储一个由厂家光刻的、全球唯一的、且不可更改的64位序列号,内容如图2所示。最低8位是器件的类型号(Family Code),功能相同的一类器件具有相同的类型号;然后是48位器件序列号(Serial Code);最后是8位CRC校验位用于验证数据传输的正确性,这样,实际可用的256个序列号为器件或其附着的电路板或系统在1-Wire网络中提供唯一的电子识别。外围部件完成某一特定的功能,主控器通过对RAM的读写操作对器件进行控制。
2.2 通信规程
1-Wire总线采用主从式、位同步、半双工串行方式通信,如图3所示,分以下三步:
![](http://m.amcfsurvey.com/editerupload/fetch/20131227/207856_1_0.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131227/207856_1_1.jpg)
(1)总线初始化,主控器先复位脉冲,然后从器件发应答脉冲。
(2)ROM指令,主控器通过ROM指令来读取各从器件的ROM识别码,以选择1-Wire总线上的某一器件,其余器件忽略主控器的后续指令。
(3)RAM指令,通过对从器件RAM的读写操作,让外围器件实现某一功能。
所有1-Wire器件与主控器之间的通信都符合上述规程,但不同类型的1-Wire器件的结构和功能不同,8比特的ROM指令和RAM指令会略有不同,系统设计时查器件数据手册即可。
3 接口时序及软件模拟
在所设计的温度测控系统中,选用了达拉斯公司性能优良的1-Wire温度传感器DS1822,以一片常用的AT89C51作为系统主控器。89C51与1-Wire器件互连时,需要根据1-Wire总线协议,用软件模拟1-Wire总线接口,89C51的P1和P3口都具有与1-Wire器件相同的集电极开路接上拉电阻的端口结构,根据管脚分配情况,选用P1.0模拟1-Wire总线接口。
如图4所示,1-Wire总线上的数据传输是通过1-Wire总线协议最底层的操作时隙完成的。每个通信周期起始于主控器发出复位脉冲,然后,1-Wire器件以应答脉冲做出响应。当主控器将总线从空闲状态的逻辑高拉为逻辑低时,即启动了一个读写时隙。在写“0”时隙中,主控器在整个时隙期间将总线拉低;而后在15us之内释放总线为高。在读时隙中,主控器将总线拉低1us,接头释放总线,这样,1-Wire从器件就能够接管总线,输出有效数据。所有的读写时隙在60us至120us内完成,并且每个时隙之间至少需要1us的恢复时间。
按图4的时序要求,先建立以下几个关键的子函数,作为1-Wire器件与8051系列单片机的软件接口的基础(晶振频率为12M,一个机器周期为1us)。
![](http://m.amcfsurvey.com/editerupload/fetch/20131227/207856_1_2.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131227/207856_1_3.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131227/207856_1_4.jpg)
在上述时序模拟子函数的基础上,建立读、写一个子节函数,根据1-Wire协议的要求,传送数据时低位在前高位在后。
![](http://m.amcfsurvey.com/editerupload/fetch/20131227/207856_1_5.jpg)
主控器读入1-Wire器件数据后,会进行CRC校验。1-Wire协议采用的8位CRC校验的生成多项式为:
g(x)=x8+x5+x4+1
其硬件生成器如图5所示。
评论