《通信网络-应用笔记159绝对可靠的1-wire通信》由会员分享,可在线阅读,更多相关《通信网络-应用笔记159绝对可靠的1-wire通信(21页珍藏版)》请在金锄头文库上搜索。
1、 1 of 21 应用笔记应用笔记 159 绝对可靠的绝对可靠的 1-Wire 通信通信www.maxim- 绪论绪论 Dallas Semiconductor的1-Wire器件利用一根数据线和定义完善的、经过时间检验的协议进行通 信。该协议包括了处理断续连接(“接触”)的特别规定,这种情况在应用iButton形式的1-Wire器 件时比较常见。由于1-Wire器件的应用已经渗透到了货币交易和高度安全的认证系统,所以对通 信可靠性的要求越来越高。本应用笔记将讨论有关开发人员如何保证1-Wire通信“绝对可靠”的 技术,以及需要考虑这些技术的场合。 本文将主要讨论iButton形式的1-Wire
2、器件,因为这些器件通常用于通信困难的接触式连接应用 中。尽管本文的指导方针直接涉及的是iButton器件,但它们适用于所有的1-Wire器件。嵌入式(微 控制器)应用是本文讨论的焦点。这些技术的绝大多数也能用于任何1-Wire总线的主机。 本文假设读者已经熟悉了Dallas Semiconductor的1-Wire总线协议和基本的1-Wire器件通信方法和 算法。 可靠的可靠的iButton通信通信 通用的1-Wire器件通信通常包括诸如搜索(识别总线上的器件)、读器件网络地址(序列号)、读器件 数据或状态和写存储器或控制数据等功能。执行这些操作的软件必须能够在操作中的任何一点处 理断续连接、
3、用户操作错误、总线短路、外部干扰或连接失败的情况。 有些情况下,软件很容易检测到通信失败并加以矫正。比如,读取iButton时发生错误,软件会尝 试再读一次iButton,或者由用户移走并重新加载iButton,启动一次新的交易。从iButton读取数据 时发生错误通常只会引起小的延时或者给用户带来些麻烦。但是当向器件写入数据时发生错误后 果则严重得多。例如,如果iButton含有货币数据,那么借方(买方)在每次购买的时候都要向 iButton中写入改变后的货币数量。如果这些更新中的任何一次发生错误,都会破坏iButton中的数 据,用户将丢失他们全部的货币余额这通常是让人无法接受的,即使是这
4、种情况极少发生。 很难给出“绝对可靠”的精确定义。通常,大多数标准1-Wire总线的数据交换相当可靠。利用 Read ROM过程可以读取器件的网络地址(序列号),如果随后跟有家族代码和CRC的检验,那就相 当可靠了(参见下文中的家族代码和CRC-8)。即使读取探头遭遇到最恶劣干扰环境的冲击(随机 流),虚假的iButton地址未被识别出来的概率也只有1/256。因为典型的iButton读取环境比最差的 情况要好的多,发生的概率也小得多。虽然如此,即使是偶尔的误读,有一些应用也是不能容忍 的,因为所造成的后果太严重。 1-Wire和iButton是Dallas Semiconductor的注册商
5、标。 AN159 2 of 21 本文中,可靠性达到相当于只允许将64位iButton网络地址顺序读两次、并进行逐位比较后仍被误 读的水平被认为是绝对可靠。在最恶劣的干扰类型干扰下(连续的随机位),误读概率大概只有 1/4,230,000,000 (大约是1/(264)的平方根)。如果一个操作在处于最恶劣的干扰时仍能达到和超过上 述可靠性的水平,就认为操作是绝对可靠的。 绝对可靠技术的应用场合绝对可靠技术的应用场合 绝对可靠技术并不总是必需的,牢记这一点非常关键。出错概率相当低的标准软件法足以满足大 多数应用的要求。但是,如果通信错误的后果很严重、或者通信错误造成的心理影响会损害用户 的信任度
6、时,就要采用绝对可靠方法。下面是一些范例: 在货币交易(eCash)方案中,误读iButton地址(序列号)会造成随后的器件存取操作彻底失效,同时 也会导致(本应)利用密码绑定到器件标识的密钥核查失败。偶尔误读器件标识结果只是对产品或 服务的临时否定。当用户重新加载iButton时,交易将正常完成,所以对用户的影响非常小。这种 情况下,由于误读iButton引起错误交易的概率将非常小,所以,不必采用绝对可靠的方法读 iButton地址。 然而,在随后的交易过程中,当软件试图从iButton中读取用户的账目余额时,有关的记录表被打 开。这时出现错误可能会更改或破坏货币值,更改或破坏货币值是绝对不
7、能接受的,即使偶尔发 生也不允许。更糟的是,如果在更新iButton中的账目余额(写数据的时候)时发生故障还可能会导 致永久性的破坏,使用户iButton数据崩溃,无法用于以后的交易。当出现的错误造成了严重的后 果时就必需采用绝对可靠的方法,而当出错造成的后果无关紧要时则可以放弃绝对可靠的方法。 使用绝对可靠技术的另一个原因(通常被忽略)则涉及到用户的信任度。在基于iButton地址(序列号) 的门禁控制系统中,如果锁中插入无效的iButton钥匙、同时又被误读的概率是非常小的(即使在最 糟糕的情况下,也不到1/256)。而误读iButton地址又恰巧与门的有效钥匙相匹配的概率更是微乎 其微(
8、不到数十亿分之一)。存在如此小的概率,已不必多虑其安全性,可以假设绝对可靠的方法 并不必要。当然,还需要考虑发生更为频繁的情况,即有效的iButton密钥被误读、拒绝用户进 入。这时用户只需重试一次即可,因此,这也只是一个小小的麻烦而已,而且发生的概率也很 小。安全管理器巡视入门记录,查看到无效的iButton钥匙试图进入时将发出报警信号。有时,绝 对可靠技术对安全系统操作来说并不必要,但对用户的信任度来说则是必需的。 这些范例说明了应该考虑采用绝对可靠技术的场合。下面将讨论各种iButton保证绝对可靠性的操 作和方法。出现通信错误时恢复正常通信的方法有许多种,下面将要讨论的是一些在实际应用
9、中 得到成功验证的方法。设计人员可以利用这些思路,并可把它们扩展到本文没有明确说明的 iButton操作中。 AN159 3 of 21 1-Wire总线的特性总线的特性 1-Wire总线是一种取反逻辑的线或配置。这意味着许多事件都把总线拉到低电平。其中包括不锈 钢外壳被不恰当地放置到iButton的读取探头上导致电短路、主机产生复位脉冲和时隙、新增 iButton器件产生在线脉冲以及出现在总线上的其它器件产生在线脉冲或零位。(没有提及雨水、蓄 意篡改等因素。) 1-Wire总线被主机或从机器件的低阻驱动器拉低,然后通过主机所提供的弱上拉电流返回高电 平。外部干扰源将总线从1变为0时只需将总线
10、短接;要想从0变为1,干扰源必须要有足够的能量 来克服产生0位的低阻驱动。正因为此,大多数错误是将数据为1的位变为0。 然而,产生错误的模式并非总是如此。噪声脉冲(任意极性的)会导致从机器件计时错误(对从机而 言相当于产生了一个额外的时隙),使返回的后续位与主机失去同步。从机返回0 的时候,如果触 点断开主机读到的将是1。程序员应该预料到所有可能发生的误码类型(位反相、位丢失、添加 位)、并加以处理。好的编程习惯是假定总线总是不可靠的,要采取一切预防措施确保有效的数据 通信。 不考虑1-Wire总线的特性,程序员可能用来确保可靠数据交换的工具包括: ? 硬件产生的CRC-8和CRC-16校验
11、? 包含在数据中的嵌入式和校验或CRC校验 ? 写总线返回位校验 ? 多次(冗余)读取和读回已经写入的数据 ? 数据和器件ID的密钥认证 错误恢复和重试错误恢复和重试 执行1-Wire总线通信的程序,在发生误码的时候必须要有一个经过慎重考虑的方案来处理重试操 作。1-Wire功能一旦发生失效,通常都重试一次,但是程序员必须考虑到所做的尝试失败时可能 发生各种各样的事件。当触点断开或1-Wire总线短路的时候,iButton器件可能不再被寻址(被选 择)。如果器件被置于高速(Overdrive)模式,它可能由中断复位到标准速度。此后,在高速模式下 的重试操作将失败,因为器件处于不正确的速度模式中
12、。 有些情况下,重试的次数可能是受限制的,如果重试过程从头开始交易,要注意避免浪费时间。 前期错误检测前期错误检测 因为iButton是断续接触的,真正起作用的电接触可能只发生在很短的一段时间里,所以,在交易 过程中,尽可能早地检测到错误对系统性能会产生本质的不同。在通信过程的最初几个字节中检 测到错误可以使软件中断数据交换,尽快启动重试过程。如果经过很长时间的数据传输后才检测 到错误,意味着大量宝贵时间被浪费在那些注定无效的操作中。 AN159 4 of 21 大多数嵌入式1-Wire子程序人为地在总线上产生时隙(位),同时执行读、写操作。对于多数器 件,一个读时隙恰好也是一个写1时隙,从机
13、把1变为0按要求返回所期望的数据。典型的位操作 (读和写)主机子程序构造如下(见下面的参考波形图): 1)将总线拉低,启动一次时隙。 2)等待6s。 3)输出要写入总线的位。(如果是1,则释放总线,允许它返回高电平。如果是0,则继续使总线 保持低电平。) 4)等待9s。 5)时隙开始后的15s采样总线电平(低电平 = 0,高电平 = 1)。 6)等待45s。 7)时隙开始后的60s允许总线浮空(在进程中终止任何写0操作)。 8)等待10s的总线恢复时间。 9)返回采样位。 合成波形类似于下面的波形(数字指的是上面的步骤): 1 3 5 7 8 子程序总是执行同样的基本1或0时隙。如果待发送的数
14、据是0,将产生一个写0时隙,总线将持续 保持低电平60s。如果待写的数据是1,那么时隙可能是写1时隙,也可能是读时隙,这时主机使 总线保持低电平6s,然后释放总线。每次向总线写入一位,总线状态也被读回并返回给所调用的 程序,所以,同样的子程序既被用于执行总线写,又用于执行总线读。协议决定了何时写入从机 或读取从机。为了从iButton从机读取数据位,要调用子程序发送1。如果返回的是0,说明从机在 采样期间将总线保持为低电平,返回一个0位,将一个1时隙变成了0时隙。通过写所有的1、并在 必要时允许从机将1改为0可以实现读从机的操作。字节操作子程序只是简单地循环调用八次位操 作,将其累积为一个字节
15、。 写时隙过程中的返回值看起来并无意义它通常与写入的值相同。如果1-Wire总线的工作正 常,那么上述假设成立,写时隙后的返回值可以(通常是)忽略。然而,总线上的短路状态、新增 器件意外产生的在线脉冲、噪声脉冲或来自那些游离的从机器件的0位可以通过逐位比较写入数 据与返回值来检测。当软件产生写时隙的时候,如果位操作子程序返回的数据与发送的数据不匹 配,说明发生了总线错误。为了快速检测错误,节省宝贵的、完成一次交易的接触时间,绝对可 靠性软件应该对照写入总线的数据和返回的数据。 在PC机上运行(非嵌入式)或用串口与1-Wire的接口(即DS2480)不能直接构成1-Wire时隙,但结果 相同。当
16、每位或字节写入总线时,写过程中返回相应的位或字节,可用于检测误码。(PC机上的 应用受串口或端口驱动的限制可能对此无能为力,直到全部交易完成后才能对产生的误码做出响 应。) AN159 5 of 21 短路检测短路检测 总线短路在iButton插入读取探头时经常发生,此时钢外壳可能与读取探头触点交叉。短路检测通 常被加到Bus Reset (总线复位)和Bit time-slot (位时隙)子程序中,但必须慎重行事。当总线被拉 低、然后主机或从机iButton又释放总线,那么,读取探头和iButton的电容会使总线表现出短路状 态,而实际上它并未短路,如果总线的短路(低电平状态)状态检测过快则将出现检测错误。总线 从低电平上升到有效的高电平需要15s。检测总线短路状态的操作应该在总线复位或位操作开始 将总线驱动为低电平之前进行,使总线有足够的时间从任