概述
1-Wire协议设计的初衷是为相邻器件的短距离连接提供一种便利的通信方式,例如通过微处理器的单个端口增加辅助存储器功能。随着1-Wire器件应用的普及,1-Wire协议被扩展到网络系统,通信范围超出了电路板尺寸。1-Wire网络是器件、电缆和线路连接的复杂组合。每个网络在拓扑(布局)和硬件上通常都不相同。
网络中器件(例如主机、网络电缆、1-Wire从机器件、“从机”)的正确匹配是1-Wire可靠运行的前提。当总线主机设计不当或应用不当,或者在近距离通信的主机中使用了很长的通信电缆,通常都不会得到令人满意的性能。
该应用笔记给出了在不同类型、不同网络规模情况下,1-Wire网络的运行结果。它还提供了网络可靠运行的工作参数。这里讨论的有些问题对于近距离应用并不严格。例如,长度小于1米的网络。关于嵌入式1-Wire应用的讨论,请参考应用笔记4206:“为嵌入式应用选择合适的1-Wire主机”。附录A到D说明了精确调整1-Wire总线接口的方法,并列举了不同条件下的通信波形。
本文仅限于使用5类铜缆双绞线的情况,主机提供5V总线电源为1-Wire网络供电(大部分1-Wire从机器件工作在较低的总线电压下,但大型网络在低压状态下工作性能会受到很大影响)。
本文没有涉及EPROM型从机器件的编程,这些器件不推荐用于距离主机终端接口较远的场合。本文也不讨论1-Wire器件的高速运行模式,高速运行模式只适用于距离非常短的近距离通信,对1-Wire网络不适用。
配合1-Wire器件使用的电缆类型、拓扑存在无数种组合。本文着重讨论与1-Wire网络有关的最普通、最典型的应用。运行1-Wire网络时超出限制或忽视本文提出的建议,都将导致网络性能不可靠。
两个简单术语对于描述网络性能非常关键:半径和总长。
- 网络的半径是指从主机到最远的从机器件之间的距离,单位是米。
- 网络的总长是指网络连线的总长度,单位也是米。
比如,一个有三条分支的星形网络,其分支长度分别为10m、20m和30m,那么此网络的半径就是30m (从1-Wire主机端到最远的从机器件的距离),总长为60m (网络中导线的总长度为10m + 20m + 30m)。
一般而言,网络的总长限制了电缆的上升时间,而半径确定了最慢的反射信号的周期。
网络能够支持的总长有限,具体取决于驱动器(1-Wire主机接口)。简单地说,这种情况可能发生在较短的电缆上挂接了很多从器件,或者是在很长的电缆上挂接了较少的从器件。
从机器件(iButton®及其它1-Wire器件)也会等效地增加网络的总长。每个器件的负荷等效于增加了一小段总线长度,因此,器件的影响可以转化成与其相当的导线长度。设计网络时,必须考虑器件的等效长度。一个iButton从器件通常比一个焊接在组件上的从器件所表现出的等效长度长。iButton的等效线长大约为1m,而iButton以外的从机器件的等效线长大约是0.5m。这就意味着如果在网络中连入100个iButton器件,将会使网络的总长增加100m,因此,为保证网络功能,允许使用的电缆总长度会降低100m。
电路板布线、连接器和ESD保护器件也等效于增加了网络的总长度。
尽管总长度受许多因素的影响,但电容无疑是影响最严重的因素。通常,ESD电路和PCB引线等效增加的总长度与它们的电容有关,系数为24pF/m。也就是说,一个等效于24pF电容的电路板引线或器件在1-Wire总线上增加的总长度大约为1m。
尽管1-Wire网络在结构上为“自由形态”,但根据1-Wire从机器件的分布和电缆的互联结构,常常可以将其归结为某种通用的网络结构。
- 直线拓扑:1-Wire总线为一对双绞线,始于主机、延伸到最远的从机器件。其它从机器件沿线挂接在总线上,而没有明显的(< 3m)分支或“叉头”。
- 树型拓扑:1-Wire总线是一根单一的主线,始于主机、延伸到最远的从机器件。其它从机器件通过长度为3m甚至更长的支路或分叉线连在主线上。
- 星形拓扑:1-Wire总线在主机端或其附近分叉,延伸到长度不同的多个分支的末端,从机器件挂接在各个分支或支路的末端。
当不同的拓扑混合使用时,确定网络的实际极限条件更加困难。这种情况下,设计者通常应当遵循最保守的标准。
星形拓扑的考虑实验表明,非切换型星形网络拓扑(在主机端有多个分支)的可靠性很难保证。不同分支的节点在主机端造成较大的阻抗失配,再加上从分支末端造成的反射,反射信号所经过的路程几乎和网络总长相等(而不是和半径相等),从而导致误码。正是由于这个原因,我们不推荐使用非切换型星形拓扑,我们对这些拓扑的性能也不做任何保证。
切换网络为了在不增加总长度和半径的前提下满足网络复杂度的要求,可以将网络分成几段,并通过开关控制使它们每次只有一段接入网络。利用低阻抗、单电源模拟开关,网络可以在物理架构上等效于一个拓扑,而在电气特性上则是另外一种拓扑。这意味着在每个分支上带有开关的星形网络实际上类似于直线拓扑。这种情况下,任何时候只有一个分支有效。
上述实例具有星形拓扑网络的外观,半径为150m,总长度为450m。然而,如果每次只有一条支路接入网络,这个网络实际上等效于直线拓扑,总长度只有150m。
通常,我们对非切换型网络的讨论适用于每条连接到切换型网络的支路。
有几个因素决定了网络半径和总长的最大值。这些因素有的能够控制,而有的却无法控制。
主机端的接口对于所允许的1-Wire网络规模有很大影响。接口必须能够提供足够的驱动电流以克服电缆和器件等效长度的影响。它必须保证产生技术规范要求的1-Wire时隙波形,并针对网络的充电时间和放电时间进行优化。另外,它必须为网络提供合适的阻抗匹配,使信号不会因为反射而干扰其它网络器件。
网络规模较小时,非常简单的主机端接口就能取得令人满意的结果,电容较小时,反射速度较快而不至于引起什么问题,电缆损耗最小。只需采用简单的有源(FET)下拉和无源(电阻)上拉即可。但是,随着总线长度的增加、挂接器件的增多,主机端接口必须能够克服这两个因素产生的影响。
网络半径受限于几个因素:反射时间、电缆时延以及电缆阻抗和信号电平衰减。信号在电话线上典型传播速度为光速的2/3。例如,750m电缆的返回延迟为7.5µs。如果主机拉低电缆7.5µs以启动读时隙,那么主机低脉冲结束时(例如,返回以后)与靠近末端的高速从机释放拉低电缆的时刻一致。由此可见,如此长的电缆返回延迟将导致主机无法与靠近末端的从机通信。
网络的总长度受限于电缆的性能,电缆必须能够快速充电、放电以满足1-Wire协议的要求。采用简单的上拉电阻使网络总长度限制在大约200m。高可靠性1-Wire主机设计能够克服这一限制,利用有源上拉在逻辑控制下提供更强的电流,支持更远的通信距离,使通信距离扩展到500m以上,请参考应用笔记244:“性能优异的1-Wire网络驱动器”。
1-Wire波形不仅要满足通信要求,而且要为从机器件提供工作电压。当总线上的电压高于其内部储能电容的电压时,每个从机器件都从总线上“攫取”能量。网络总长度过远时,主控制器所提供的电流可能不足以维持从机器件的工作电压。
寄生供电方式最糟糕的情况发生在主机发出很长一串零码的时候,总线大部分时间都处于低电平状态,从机器件很少有机会进行再充电。如果总线能够在两位之间的恢复期内达到足够的电压值,而且恢复时间也足够长,将不存在任何问题。如果从机器件内的工作电压降低,那么它驱动总线变为零电平的能力也就降低,从机器件的时隙将发生变化。最后,当寄生电压降低到门限电压以下时,从机器件进入复位状态,停止信号应答。此后,当从机器件再次获得足够的工作电压时,它将发出在线应答脉冲,而此时可能会中断其它总线动作。当网络不具有充足的能量维持从机器件的工作电压时,系统失效将取决于传输的数据和间歇时间。
1-Wire总线的设计目标始终是保证最可靠、最简单(从而花费最少)。除了从机器件本身以外,网络应尽量避免使用分布式组件。
一条分支连接到1-Wire总线时,节点处会产生阻抗失配。从支路末端反射的波形又返回到主干网,其延迟时间由支路长度决定。这些反射波可能会对网络的其它器件造成影响。在支路上串联一个电阻可以降低失配程度,也会减小反射能量,从而隔离支路产生的反射波对主干网的影响。
较成功的方案是在每个支路与主干网的节点处都接入一个150Ω电阻,使节点处的失配度下降20%,相应的支路反射减弱40%。然而,附加阻抗同时也降低了抗干扰能力,下降80%,必须谨慎设计。试验表明,利用100Ω电阻也可获得较好的网络性能,而且对抗干扰能力影响较小。
注:DS2480B串行1-Wire线驱动器、DS2490 USB至1-Wire桥接器和DS2482系列产品是带有有源上拉的1-Wire主机,附加电阻会产生负面影响,所以,上述方法对这类1-Wire驱动器不适合。对于定制的主机端驱动器通常总能成功地运用增加分布式电阻的方法。
可以通过各种方式连接1-Wire网络与微控制器以及个人电脑,而且,每个1-Wire主机也是针对不同的应用而设计,如果强行更换应用场合可能导致工作不可靠。最后,主机端的硬件结构是限制1-Wire网络设计的关键因素。近距离应用或邻近iButton检测探头所采用的简单硬件接口在大型网络或复杂的布线环境下可能工作不稳定。而一些供远距离通信使用的复杂驱动电路在小型网络或中型网络中的工作性能也不一定很好。
目前最常用的主机端硬件接口如下:
- 微处理器端口引脚配置
- 内嵌1-Wire主机的微控制器
- 1-Wire总线主机合成器(DS1WM)
- 串口协议转换(DS2480B、DS2482-100、DS2482-800、DS2490)
应用笔记4206中讨论了这些接口。
对于长线传输的应用,需要进行一些修正,附录A给出了各种微处理器端口引脚的配置,例如,用于摆率控制的FET驱动器和1kΩ上拉电阻。利用该接口能够保证半径达200m、总长200m的系统可靠通信。
DS2480B设计用于近距离或中等距离的高效传输。在DS2480B和网络之间添加一个简单的R-C电路可大大提高中等长度网络的性能和可靠性(见附录B)。利用该滤波器,主机能够可靠地支持半径或总长高达200m的网络。需要注意DS2480B接口器件具有可变时隙,可以利用这一功能提高1-Wire网络的可靠性和性能。这些时隙通过软件(如针对Windows®的1-Wire驱动器)进行优化,但并非所有软件都能对其进行调整(见附录C以及应用笔记4104:“DS2480B 1-Wire时序的理解及配置”)。
对于长线应用的推荐电路是带有高级总线接口的微控制器,应用笔记244讨论了上述内容。该主机端接口采用阻抗匹配(高电平驱动器和低电平驱动器)以及“智能”(软件控制)有源上拉。当1-Wire协议裁定总线应处于高电平以及总线采样后的读操作期间,将接通上拉电阻使总线建立在高电平。这种接口在大型和小型1-Wire网络中都能很好地工作,特别是在总长和半径高达500m的网络中能够保持可靠工作。
1-Wire网络失效时,如果运行搜索算法将会发现失效状态常常表现为器件的神秘“丢失”,详细信息请参考应用笔记187:“1-Wire搜索算法”,实际存在的器件却没有检索到。有时,网络或器件中一个看起来很小的改变,都会对器件的检索结果产生根本的影响,为什么会出现这种现象呢?
1-Wire总线的所有操作中,器件搜索是总线问题最复杂、最难实现的一项功能。只有器件搜索过程中会出现多个从机器件同时把总线驱动为低电平的现象(在线应答脉冲除外)。这意味着检索过程中的总线状态与选中一个从机器件执行标准命令时的总线状态有很大不同。众多从机器件中的任何一个如果错过了脉冲边缘或未能识别出脉冲,那么它就会与搜索算法脱节,在随后的码搜索中产生错误。造成波形上升沿干扰、波形不能达到有效的低电平或在检索过程中器件供电不足的总线问题都会导致器件搜索的失败。当未被搜索到的器件如同从检索中消失了一样时,大多数搜索算法都是通过终止本次搜索、重新启动算法来处理搜索故障。虽然只有一个从机器件的一位发生错误,但是从机器件的任何代码都可能受到影响。
搜索算法通常认为造成器件丢失的原因是噪声,在接触连接的iButton网络中,造成器件丢失的原因还可能是新的iButton连接到网络时造成瞬间短路和新增器件必然发出的在线应答脉冲。如果这些事件的时隙不合适,就会影响搜索操作。算法处理这种问题采取的措施是:发现器件丢失了一段时间后即把该器件从器件列表中移走,这叫做“去抖”周期。
搜索失败的原因有很多,其中最常见的是寄生电源供电不足(出现在半径较大的重载网络)、反射信号对波形边沿的影响(出现在小半径或中等半径的轻载网络)以及由于波形下降沿的振铃对基于DS2480B或DS2490接口的动态上拉产生误触发。DS2482的有源上拉在使能时也容易造成误触发。
网络上出现的细小变化,例如:新的从机器件连接到网络时,甚至是一些风马牛不相及的因素都可能导致搜索失败。原因是经过严格核查的网络可能处于一种临界状态,非常小的变化都会影响搜索的成功或失败。换句话说,如果一个网络在执行搜索算法后所有器件都被可靠地检测出来,从表面上看这是一个非常成功的网络,但实际上它也可能处在失败的边缘。很小的性能下降都可能导致灾难性的操作失败(这一切可能是一个故障位导致搜索过程终止或者是部分器件消失的结果)。所以,对用户来说遵守发布的技术规范和准则极其重要,因为这样可以确保网络具有好的安全系数,并对各种电缆、器件和连接方式具有较好的兼容性。
一个能够始终可靠运行搜索过程的网络一般都会可靠执行所有其它的1-Wire功能。
用软件(固件)产生1-Wire波形时(有时也称为“逐位”波形),很容易出现时序错误。
到目前为止,1-Wire主机编程最常见的错误来自于对从机器件返回数据的采样过于滞后于起始时隙的上升沿。随着温度和电压变化,从机器件的时隙会在很大范围内变化。由于加工过程不同,批次之间器件的时隙也不同。采样时间设置为30µs时可能在实验室已成功通过测试,甚至已投入生产,并交付使用。但是,当生产批次或工作条件发生变化时,使从机器件的相应时间能够从32µs变化至29µs,出现主机端接口失效。因此,即使是在实验室环境下运行很完美的系统,其波形参数也要按技术规范的规定进行再次核实,这一点非常重要。
因为对于任何电子元件所支持的电子系统必须在任何应用条件下都满足器件的技术规范,以确保可靠操作。网络中各个单元(主机、网络电缆、1-Wire从机)的正确匹配对于1-Wire运行的可靠性至关重要。
附录A. 改进的CPU总线接口
利用简单的R-C滤波器改善DS2480B在近距离到中等距离通信网络的工作,其总线长度可以达到200m。使用基于DS2480的主机端接口时,该滤波器通常用于半径大于10m,小于100m的网络。对于DS2480B而言,总线长度为100m的重载电路采用4700pF电容。根据网络中其它器件的总线长度,有时必须将电容减小到470pF。同时还须注意DS2480B用于DS9097U串口适配器的内部,也可以作为嵌入器件使用。