嵌入式之家

 找回密码
 现在注册

QQ登录

只需一步,快速开始

搜索
热搜: ARM cortex
查看: 7599|回复: 5

1-wire单总线的基本原理

[复制链接]

该用户从未签到

7

主题

10

帖子

124

积分

注册会员

Rank: 2

积分
124
发表于 2015-2-4 09:15:49 | 显示全部楼层 |阅读模式
1-wire单总线的基本原理
一、概述
1-wire单总线是Maxim全资子公司Dallas的一项专有技术。与目前多数标准串行数据通信方式,如SPI/I2C/MICROWIRE不同,它采用单根信号线,既传输数据位,又传输数据位的定时同步信号,而且数据传输是双向的。大多数1-wire器件不需要额外的供电电源,可直接从单总线上获得足够的电源电流(即寄生供电方式)。它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。
1-wire单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统操作;而当多个从机位于总线上时,则系统按照多节点系统操作。
为了较为全面地介绍单总线系统,将系统分为三个部分讨论:硬件结构、命令序列和信号方式(信号类型和时序)。
二、硬件结构
顾名思义,单总线只有一根数据线。设备(主机或从机)通过一个漏极开路或三态端口,连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其它设备所使用。单总线端口为漏极开路。

单总线要求外接一个约5k的上拉电阻;这样,单总线的闲置状态为高电平。不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。如果总线保持低电平超过480μs,总线上的所有器件将复位。另外,在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间、EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉。
三、命令序列
典型的单总线命令序列如下:
第一步:初始化
第二步:ROM命令(跟随需要交换的数据)
第三步:功能命令(跟随需要交换的数据)
每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则单总线器件不会响应主机。但是,这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。
3.1初始化
基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。复位和应答脉冲的时间详见单总线信号部分。
3.2 ROM命令
在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备可能支持5种ROM命令(实际情况与具体型号有关),每种命令长度为8位。主机在发出功能命令之前,必须送出合适的ROM命令。下面将简要地介绍各个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命令一样,在完成报警搜索循环后,主机必须返回至命令序列的第一步。
3.3 功能命令(以DS18B20为例)
在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20暂存器、启动温度转换以及判断从机的供电方式。DS18B20的功能命令总结于表1中,并在图3流程图中作了说明。
表1、DS18B20功能命令集
命令        描述        命令代码        发送命令后,单总线上的响应信息        注释
温度转换命令
转换温度        启动温度转换        44h        无        1
存储器命令
读暂存器        读全部的暂存器内容,包括CRC字节        BEh        DS18B20传输多达9个字节至主机        2
写暂存器        写暂存器第2、3和4个字节的数据(即TH,TL和配置寄存器)        4Eh        主机传输3个字节数据至DS18B20        3
复制暂存器        将暂存器中的TH,TL和配置字节复制到EEPROM中        48h        无        1
回读EEPROM        将TH,TL和配置字节从EEPROM回读至暂存器中        B8h        DS18B20传送回读状态至主机       
注释:
1.在温度转换和复制暂存器数据至EEPROM期间,主机必须在单总线上允许强上拉。并且在此期间,总线上不能进行其它数据传输;
2.通过发出复位脉冲,主机能够在任何时候中断数据传输;
3.在复位脉冲发出前,必须写入全部的三个字节。

四、信号方式
所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串行通信格式不同(多数为字节的高位在前)。
4.1 初始化序列:复位和应答脉冲
单总线上的所有通信都是以初始化序列开始,包括:主机发出的复位脉冲及从机的应答脉冲,如图4所示。当从机发出响应主机的应答脉冲时,即向主机表明它处于总线上,且工作准备就绪。在主机初始化过程,主机通过拉低单总线至少480μs,以产生(Tx)复位脉冲。接着,主机释放总线,并进入接收模式(Rx)。当总线被释放后,5k上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15-60μs,接着通过拉低总线60-240μs,以产生应答脉冲。
4.2 读/写时隙
在写时隙期间,主机向单总线器件写入数据;而在读时隙期间,主机读入来自从机的数据。在每一个时隙,总线只能传输一位数据。
4.2.1 写时隙
存在两种写时隙:“写1”和“写0”。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0。所有写时隙至少需要60μs,且在两次独立的写时隙之间至少需要1μs的恢复时间。两种写时隙均起始于主机拉低总线(图5所示)。产生写1时隙的方式:主机在拉低总线后,接着必须在15μs之内释放总线,由5k上拉电阻将总线拉至高电平;而产生写0时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60μs)。
在写时隙起始后15-60μs期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0,则写入逻辑0。
4.2.2 读时隙
单总线器件仅在主机发出读时隙时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60μs,且在两次独立的读时隙之间至少需要1μs的恢复时间。每个读时隙都由主机发起,至少拉低总线1μs(图5所示)。在主机发起读时隙之后,单总线器件才开始在总线上发送0或1。若从机发送1,则保持总线为高电平;若发送0,则拉低总线。当发送0时,从机在该时隙结束后释放总线,由上拉电阻将总线拉回至空闲高电平状态。从机发出的数据在起始时隙之后,保持有效时间15μs,因而,主机在读时隙期间必须释放总线,并且在时隙起始后的15μs之内采样总线状态。

附录A:ROM搜索实例
ROM搜索过程只是一个简单的三步循环程序:读一位、读该位的补码、写入一个期望的数据位。总线主机在ROM的每一位上都重复这样的三步循环程序。当完成某个器件后,主机就能够知晓该器件的ROM信息。剩下的设备数量及其ROM代码通过相同的过程即可获得。
下面的ROM搜索过程实例假设四个不同的器件被连接至同一条总线上,它们的ROM代码如下所示:
ROM1    00110101…
ROM2    10101010…
ROM3    11110101…
ROM4    00010001…
具体搜索过程如下:
1.主机发出复位脉冲,启动初始化序列。从机设备发出响应的应答脉冲;
2.接着主机在总线上发出ROM搜索命令;
3.主机从总线上准备读入一个数据位,这时,每个响应设备分别将ROM代码的第一位输出到单总线上。ROM1和ROM4输出0至总线,而ROM2和ROM3输出1至总线。线上的输出结果将是所有器件的逻辑“与”,所以,主机从总线上读到的将是0。接着,主机开始读另一位,即每个器件分别输出ROM代码中第一位的补码,此时,ROM1和ROM4输出1至总线,而ROM2和ROM3输出0至总线。这样,主机读到的该位补码还是0。主机由此判定,总线上有些器件的ROM代码第一位为0,有些则为1;
两次读到的数据位具有以下含义:
00在该位处,存在设备冲突;
01在该位处,所有器件为0;
10在该位处,所有器件为1;
11单总线不存在任何设备。
4.主机写入0,从而禁止了ROM2和ROM3响应余下的搜索命令,仅在总线上留下了ROM1和ROM4;
5.主机再执行两次读操作,依次收到0和1,这表明ROM1和ROM4在ROM代码的第二位都是0;
6.接着主机写入0,在总线上继续保持ROM1和ROM4;
7.主机又执行两次读操作,收到两个0,表明所连接的设备的ROM代码在第三位既有0,也有1;
8.主机再次写入0,从而禁止了ROM1响应余下的搜索命令,仅在总线上留下了ROM2;
9.主机读完ROM4余下的ROM数据位。这样就完成了第一次搜索,并找到了位于总线上的第一个设备;
10.重复执行第1至第7步,开始新一轮的ROM搜索命令;
11.主机写入1,使ROM4离线,仅在总线上留下ROM1;
12.主机读完ROM1余下的ROM数据,这样就完成了第二次的ROM搜索,找到了第二个ROM代码;
13.重复执行第1至第3步,开始新一轮的ROM搜索命令;
14.主机写入1,这次禁止了ROM1和ROM4响应余下的搜索命令,仅在总线上留下了ROM2和ROM3;
15.主机又执行两次读操作时隙,读到两个0;
16.主机写入0,这样禁止了ROM3,而留下了ROM2;
17.主机读完ROM2余下的ROM数据,这样就完成了第三次的ROM搜索,找到了第三个ROM代码;
18.重复执行第13至第15步,开始新一轮的ROM搜索命令;
19.主机写入1,这次禁止了ROM2,而留下了ROM3;
20.主机读完ROM3余下的ROM数据,这样就完成了第四次的ROM搜索,找到了第四个ROM代码。
说明:
每次搜索ROM操作,主机只能找到某一个单总线器件的ROM代码,所需要的最短时间为:
960μs+(8+3×64) ×61μs=13.16ms
所以,主机能够在1秒之内读出75个单总线的ROM代码。


回复

使用道具 举报

该用户从未签到

0

主题

11

帖子

89

积分

注册会员

Rank: 2

积分
89
发表于 2015-2-4 21:32:06 | 显示全部楼层
:)
回复

使用道具 举报

该用户从未签到

1

主题

50

帖子

222

积分

版主

Rank: 7Rank: 7Rank: 7

积分
222
发表于 2015-2-4 21:32:20 | 显示全部楼层
{:soso__3409329614010722382_4:}
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

19

帖子

115

积分

注册会员

Rank: 2

积分
115
发表于 2015-2-4 21:32:45 | 显示全部楼层
发展趋势
回复

使用道具 举报

该用户从未签到

12

主题

18

帖子

207

积分

版主

Rank: 7Rank: 7Rank: 7

积分
207
发表于 2015-2-7 15:05:23 | 显示全部楼层
{:soso__3409329614010722382_4:}
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

31

帖子

188

积分

注册会员

Rank: 2

积分
188
QQ
发表于 2015-8-7 12:55:22 | 显示全部楼层
DHT11也有单线协议哦:lol
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 现在注册

本版积分规则

QQ|Archiver|手机版|小黑屋|嵌入式之家 ( 京ICP备14038168号-1 )

GMT+8, 2025-5-1 12:46 , Processed in 0.021946 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表