应用笔记 4037

利用1-Wire®链路功能获取位置信息—一种确定器件物理地址的简单信令协议方法


摘要 : 本文介绍了一种基于寻址协议的低成本串行总线系统,用来识别丢失元件的物理位置。在测量或控制串行总线中可能存在这样的问题,例如:多点温度测量系统。本文详细介绍了在低成本串行总线中,如1-Wire,如何利用具有链路功能的DS28EA00获得位置信息。

本文还发表在Maxim工程期刊,第60期(PDF, 873kB)。

数字总线系统的共同特性即为共享。随着微处理器的推广,并行总线系统应用日益广泛,总线上挂接的所有元件共享数据线和地址线。片选信号可由地址线和控制信号解码得到。根据硬件设计和布线,连接在总线上的各个器件的物理地址总是已知的。随着技术向低成本串行总线系统的发展1,首先省去了地址线。但SPI™和MICROWIRE®串行总线仍具有片选功能。许多先进的串行总线系统引入了基于协议的寻址方式,将地址信息作为一个前导码传输给数据。该类总线的典型代表为I²C/SMBus,此类通信接口缩减到只有数据线和时钟线。为了进一步降低成本,可以将时钟信息嵌入到数据流中。该类总线的典型代表为1-Wire、LIN和SensorPath®总线。

由于采用了基于协议的寻址方式,因此元件物理位置方面的信息将缺失。对于采用串行总线的仪表和控制应用(例如测量多点温度),这将是一个问题。应用笔记4334:"添加热监控电路降低数据中心的能耗"描述了一个温度监测的典型例子。对于I²C总线而言,地址引脚与逻辑1、逻辑0、SCL或SDA相连,在某种程度上解决了这个问题。采用这一办法,单个引脚可被设定到4种不同的数字状态,相当于两个位。尽管这种方法简单、有效,但由于最初的I²C协议仅提供7个地址位,因此具有一定的局限性。1-Wire总线具有64位地址,在这一方面可提供更高的灵活性。无论如何,每个增加一个地址引脚将增加成本,因此增加地址引脚不是一个好的选择。

图1给出了一种简单的低成本方案,可重新获取串行总线上挂接的多个器件的物理位置,将网络的起始位置的器件标识为位置#1,并依次为网络上挂接的器件编号。该方案的电路连接如图中蓝色粗线所示。在位置1处,线路接地即可。

图1. 可进行位置检测的串行网络
图1. 可进行位置检测的串行网络

除了图1中标有IN和OUT的两个引脚外,还需要通过片上逻辑读取IN引脚和写OUT引脚。如果协议支持多点网络功能,那么借助于上述这些方法,主机可首先识别出第一个器件,然后再识别下一个器件,以此类推,直到完成对所有器件的定位。1-Wire总线即可满足这一要求的串行总线系统。

1-Wire总线是一种简单的信令协议,可通过一条公共数据线实现主机/主控制器和一个或多个从机之间的半双工、双向通信(图2)。可以通过单根1-Wire总线实现供电以及与从机之间的数据通信。供电通过以下方式实现:在数据传输过程中,总线状态为高时从机的内部电容从总线上获取电荷,总线状态为低时利用该电荷为器件供电。典型的1-Wire主机包括一个开漏I/O引脚,并通过电阻上拉至3V至5V电源。采用这种智能通信技术,可以随时方便、高效地增加存储器、认证和混合信号功能。

图2. 不带链路功能的典型1-Wire网络
图2. 不带链路功能的典型1-Wire网络

所有的1-Wire系统都有一个重要的基本特征:每个从机都具有一个唯一的、不能更改(ROM)的64位、工厂激光刻制序列号(ID),这个序列号永远不会与其它器件重复。除了为终端产品提供唯一的电子ID外,64位ROM ID还允许主机从挂接在同一条总线上的许多从机设备中选择一个器件。64位ROM ID中包含有8位家族码,用于识别器件的类型和支持的功能。

通常,当系统启动初始化时,1-Wire主机可能并不知道总线上挂接的器件数量以及他们的ROM ID。利用总线的线与特性,主机可采用排除法确定总线上挂接的所有器件的ID。通过Search ROM*功能2,主机可确定总线上所挂接器件的ROM ID。然而,Search ROM结果无法提供单个器件的位置。例如,如图2所示的器件ROM ID,器件的ID按照表1所示的顺序获取。

表1. 器件搜索顺序
Sequence
ROM ID (Hexadecimal)
Position in Network
1
C7000000007AD242
Location #2
2
5A00000000853E42
Location #3
3
16000000008A8142
Location #1

链路功能的概念

采用链路功能确定1-Wire网络环境中器件的物理位置时,遵循以下几点:
a) 已知系统级1-Wire网络的物理分布,例如第一个、谁是第二个,等等,以及器件/节点的物理位置。
b) 获取器件(ROM ID)的物理连接顺序,哪个是第一个,哪个是最后一个。
其中a) 已知的系统信息,可从1-Wire网络的物理布局获得。b) 项通常是未知的,可以采用链路功能通信很容易获取这些信息。链路功能(图3)通过两个引脚,输入引脚(/EN)在搜索期间使能器件响应,而输出引脚(/DONE)通知链路中的下一个器件它之前的器件已完成搜索。/DONE信号连接至下一个器件的/EN输入。链路中第一个器件的/EN输入被连接至GND。实现链路功能的连线如图中蓝色粗线所示。除了/EN和/DONE引脚之外,顺序搜索功能还需要具备一个新的网络功能命令,Conditional Read ROM。只有满足特定条件时(下文进行说明),该命令才报告器件的ROM ID。相反,Read ROM可使网络中所有器件在同一时间发送其ROM ID。DS28EA00是业界首款带有新型链路功能的器件(如图3所示)。

图3. 具有链路功能的DS28EA00在1-Wire网络中的典型连接
图3. 具有链路功能的DS28EA00在1-Wire网络中的典型连接

/EN和/DONE引脚除了用于顺序搜索之外,还可作为数字PIO。为了实现这一功能,链路功能定义了三种链路状态,OFFONDONE。通过Chain命令控制链路状态的转换。表2给出了链路状态及相应工作状态。

表2. 链路状态
Chain State
Device Behavior
Active-Low EN (PIOB)
Active-Low DONE (PIOA)
Conditional Read ROM
OFF (default)
PIO (high impedance)
PIO (high impedance)
Ignored
ON
Active-low EN input
Pullup on
Recognized if active-low EN is logic 0
DONE
No function
Pulldown on (active-low DONE is logic 0)
Ignored

上电默认链路状态为OFF,此时/DONE (PIOA)和/EN (PIOB)由PIO Access ReadPIO Access Write命令单独控制,如DS28EA00数据资料所述。链路状态为ON时,/DONE通过一个40kΩ的片上电阻(RCO)上拉至器件内部电源VDD,进而向下一个器件的/EN引脚发送逻辑‘1’信号。如果/EN引脚为逻辑‘0’,则仅处于ON链路状态的器件才能响应Conditional Read ROM命令。在顺序搜索过程中,网络中器件的最大值应满足这一条件。

要将器件从Chain OFF转换为Chain ON或Chain DONE状态,主机需采用Chain命令实现。图4给出了各种可能的转换。Chain命令代码后,主机必须紧接着发送一个适当的Chain Control字节。为了降低接收错误Chain命令的几率,首先以原码形式发送控制字节,然后再以反码形式发送。当主机接收到AAh确认字节时,表明链路状态成功转换。

图4.链路状态转换图
图4.链路状态转换图

开始顺序搜索时,主机必须将所有器件都置为Chain ON状态。当主机通过Conditional Read ROM读取完一个的器件ROM ID后,应该将该器件置为Chain DONE状态,从而允许链路中的下一个器件以响应Conditional Read ROM命令。在顺序搜索的过程中,器件将依次进入Chain DONE状态,直到搜索完所有器件。最后,所有器件都被设置到Chain OFF状态,从而释放/EN和/DONE引脚,使之变为PIO,并恢复到上电默认状态。

顺序搜索例程

前提 主机控制网络如图3所示。所有器件都支持链路功能。若要搜索链路中器件的顺序,例如位置编号以及该处器件的ROM ID (即注册码),主机需执行以下步骤:

初始化 主机发送Skip ROM命令,紧接着发送Chain ON命令,将所有器件置于Chain ON状态。除了链路中的第一个器件之外,对于其它所有器件,通过/DONE引脚的RCO上拉电阻将/DONE//EN变为逻辑1。

第一个周期 主机发送Conditional Read ROM命令,链路中的第一个器件对命令进行响应,可得到第一个器件的64位ROM ID。主机存储该ROM ID,并将其确定为链路的第一个器件。随后,主机发送Chain DONE命令。该命令通过器件#1的/DONE引脚,将链路中第二个器件的/EN引脚设置为逻辑0,同时防止器件#1再次响应。

第二个周期 主机发送Conditional Read ROM命令。由于此时器件#2是链路中唯一一个/EN为逻辑0的器件,因此该器件发送其ROM ID作为响应。主机将该ROM ID保存为序列码'2'。(器件#1处于Chain DONE状态,所以不会响应该命令。) 随后,主机发送Chain DONE命令。

重复周期 要识别剩余器件的ROM ID及其物理位置,主机需要重复发送Conditional Read ROM和Chain DONE命令。如果没有器件响应Conditional Read ROM命令,说明链路中的所有器件均已被识别。

终止 搜索过程结束后,链路中的所有器件都处于Chain DONE状态。主机应发送Skip ROM命令后,紧接着发送Chain OFF命令,用于终止顺序搜索。这样可将所有器件都进入Chain OFF状态,变成由PIO Access功能命令控制PIO引脚。关于Conditional Read ROM和Chain命令的详细说明,以及完整的流程图,请参考DS28EA00数据资料。

假定采用标准的1-Wire速率(复位/在线检测周期为960µs,每个时隙为65µs),初始化和结束共约用去7ms (一次总共占用的时间)。各个器件的搜索和位置检测约占用7.7ms。相同条件下,执行Search ROM命令时,每个器件约占用14ms。例如,在100ms之内,如果具有链路功能的话,主机能识别和定位12个器件,但是如果仅依靠Search ROM功能的话,主机只能识别7个器件。

补充说明

电缆电容 常用于构建1-Wire网络的5类电话线的每对双绞线对之间具有大约50pF/m的电容。根据网络的规模,当所有器件都处于Chain ON状态时,会给线路增加非常大的电容负载。在寄生供电模式下,有时候需要采用有源1-Wire线路上拉,这样可避免电压跌落至最小允许值以下。采用主电源或本地VCC电源供电时无需采用这一措施。

Conditional Read ROM DS2401及其兼容的、1993年停产的DS2400硅序列号,均将这一命令读为Read ROM。因此,不要将DS2401连接到采用链路功能的网络中。所以,使用1-Wire端口适配器时,应选择不带DS2401的器件。DS2405版本A也能像DS2401一样响应Conditional Read ROM命令代码。1998年开始投产并在2010年4月停产的DS2405版本B则会忽略Conditional Read ROM命令代码。

1-Wire主控制器电路 在嵌入式应用环境下,可采用各种低成本、分立式、基于IC的1-Wire主控制器。分立解决方案包括上拉电阻、空闲的µC端口引脚以及高级驱动器3。专门用于驱动1-Wire总线的集成驱动器包括DS2480B (串行端口,UART),以及DS2482 (I²C端口,图5)。8通道版本的DS2482具有3个地址引脚,允许单个主控制器控制多达64个独立的1-Wire网络。应用笔记192:"DS2480B串行接口1-Wire线驱动器的使用",从软件开发的角度对DS2480B进行了说明。与之类似的一篇针对DS2482驱动器的文章也可供参考5

图5. 单通道I²C至1- Wire桥接器件DS2482作为1-Wire主控制器。其/DONE输出也可用于驱动一个LED,并不会影响链路功能。
图5. 单通道I²C至1- Wire桥接器件DS2482作为1-Wire主控制器。其/DONE输出也可用于驱动一个LED,并不会影响链路功能。

电源 如果提供VCC电源,所有DS28EA00可同时进行温度转换。随后发送Conditional Search命令,可以筛选出那些发出报警温度的器件。通过顺序搜索,可得出器件的ROM ID及其位置信息,能迅速知道需要在哪些地方采取纠正措施。如果没有VCC电源,温度转换必须依次进行。此外,开始进行顺序搜索时(所有器件从Chain OFF状态转换至Chain ON状态),必须确保1-Wire数据线路上的电压不会跌落的太多。

速率 高速模式下的快速时序不适用于包含多个器件,或超过3m的1-Wire网络;此时应采用标准速率替代。根据网络中的器件数量,即使采用标准速率,也需要延长恢复时间,特别是当采用寄生电源供电时6

故障诊断 如果无法实现顺序搜索,则在发送Chain ON命令后,察看1-Wire线路上的压降。如果电压跌落至3.0V以下,则命令有可能不能正常执行。为了避免电压跌落,Chain ON以后,可采用带有源上拉的驱动电路,或者采用主电源供电。如果链路中第一个器件的/EN输入开路、或者连接至1-Wire线路,或者连接至VCC,都将导致顺序检测失败。确保网络中无DS2401。不允许将并联的两个或多个网络连接至同一个1-Wire端口,因此此时所有的“首个器件”将同时响应,这样会得到带无效CRC字节的ROM ID。

结束语

链路功能是一种新型特性,主机可在软件控制下确定线性网络中器件的物理顺序,无需人工参与。DS28EA00 1-Wire数字温度计是首款集成链路功能的器件。在多点温度测量应用中,与那些通过地址引脚获得器件位置的解决方案相比,DS28EA00是最划算的选择。

参考文献
  1. 应用笔记3967:"选择串行总线"
  2. 应用笔记187:"1-Wire搜索算法"
  3. 应用笔记244:"性能优异的1-Wire网络驱动器"
  4. 应用笔记3684:"如何使用I²C接口的DS2482 1-Wire主控制器"
  5. 应用笔记3829:"确定多从机1-Wire网络的恢复时间"
*为了便于识别,命令和状态都采用大写字母表示(第一次出现以斜体表示)。
下一步
EE-Mail 订阅EE-Mail,接收关于您感兴趣的新文档的自动通知。
© , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
APP 4037:
应用笔记 4037,AN4037, AN 4037, APP4037, Appnote4037, Appnote 4037