信号速率与线缆长度的关系:CAN 总线计时权衡因素
有一个关于得克萨斯州民间英雄 Pecos Bill 的故事:那时,有人打赌他不能从从得克萨斯州的加尔维斯敦游过墨西哥湾到达弗罗里达州的基韦斯特。他训练了一个月,当这一天到来时他便一头扎进了墨西哥湾。Bill 不分昼夜地游了一个星期,期间战鲨鱼斗飓风。最终,他离自己的目标越来越近。然而,当他在海浪中看到远处的基韦斯特时,他意识到他已经太累,无法再继续向前游了,因此他转身游回了得克萨斯!
本文引用地址://m.amcfsurvey.com/article/163267.htm致力于CAN通信的设计人员就像 Pecos Bill 一样面对他们所遇到的种种挑战,往返信号传输成为一个重要的考虑因素。
当一个以上节点要在共用总线上发送信号时,控制器局域网 (CAN) 协议的一个关键特性就是如何处理总线争用问题。CAN使用逐位仲裁 (bit-wise arbitration) 来选择哪一个节点应该继续信号传输。由于这些节点对每一个比特位进行监听,并且必须服从于更高优先级的消息,因此它们的响应时间必须快到能够在破坏下一个比特以前终止传输。如下面三种情况所述,这就对容许组件延迟和线缆长度以及可用信号速率构成了一些限制。
情况 1:无争用正常 CAN总线运行
通常每次只有一个节点要通过共用 CAN 总线通信。没有一般性损耗的情况下,我们来讨论一种二节点网络,然后再将这种讨论延伸至更多节点。图 1 描述了其工作原理。首先,两个节点都处于非占用状态,因此总线上没有差动信号,如(1a)所示。如果节点 A 开始通信,则其使用一个占用位启动一个 CAN 消息。向 CAN 收发器发送的传输数据 (TXD) 输入是一个逻辑 0,其命令差动驱动器在总线线路上生成一个差动信号,如(1b)所示。节点 A 的接收机感应到该差动信号,并在已接收数据引脚 (RXD) 上输出一个逻辑 0。差动电压根据 (1c) 和(1d) 所示双绞线对的传输线路属性进行传输。最终,差动信号到达节点 B,节点 B 的接收机也在 RXD 上输出一个逻辑 0,如 (1e) 所示。这时,节点 B 注意到节点 A 已经开始一个 CAN 消息,这样节点 B 便不会在节点 A 完成以前发起消息。
![](http://m.amcfsurvey.com/editerupload/fetch/20130823/163267_1_0.jpg)
图 1 A 到 B 的正常信号传输
需要注意的是,节点 B 并非马上就知道节点 A 已经开始一条消息,因为从 A 到 B 的信号具有一定的延迟。这种情况下的总延迟为通过 A 处收发器(以及相关的隔离和缓冲电路)的延迟加上通过线缆的传输延迟,再加上 B 处收发器、隔离和缓冲电路的延迟的总和。乍一看,似乎这种单向延迟就是确保节点 B 不同节点 A 发送消息相冲突所需的关键计时限制。正如我们在情况 2 中所看到的一样,这并非故事的全部。
情况 2:延迟争用,后发消息具有更高的优先级
我们的下一种情况(图 2)假设,节点 A 再次发起一条消息,但是节点 B 在稍后发起的一条消息具有更高的优先级。如前所述,这种情况以两个节点均处在非占用模式作为开始,如 (2a 所示,随后节点 A 变为占用(如(2b)所示)发起一条消息。该占用差动电压再次沿线缆传输。在信号到达 B 处的收发器以前,该节点刚好利用如(2c)所示占用位发起一条消息。这时,两个节点都正传输一个占用位,并且两个节点都正接收一个占用位(如(2d)所示),然后两个节点都没意识到另一个节点也已启用。由于在我们的假设情况中,节点 A 具有比节点 B 更低的优先级,因此有时节点 A 会通过将其 TXD 设置为 0(如(2e)所示)来发出一个非占用位。但是,由于节点 B 的作用,RXD 会感应到总线仍然处在占用状态下。
![](http://m.amcfsurvey.com/editerupload/fetch/20130823/163267_1_1.jpg)
图 2 延迟争用―B 具有高优先级
通过研究某个具有实际延迟值的假设案例,我们可以更加具体地介绍这些计时要求。在我们的二节点例子中,设定总单向延迟为 200ns,信号传输速率为 1Mbps,也就是 ISO 11898-2 标准规定的最大值。这样,位时间便为 1000ns。除节点 B 的第二位会是同节点 A 的消息优先级匹配的 0(非占用)以外,其同情况 2 所述一样。(情况 2 中,节点 B 具有一个占用第二位,表明更高的消息优先级。)
图 3 中,节点 A 在时间 t=0 时开始一条消息,从而在总线(b)上传输一个占用位。如图 2 所示,其可能出现的情况是,节点 B 刚好在节点 A 的信号被接收到以前(c)开始发送,也即时间t=199ns。当时间 t=1000ns 的第二位开始之初,在节点 A 转到非占用状态以前两个节点都没意识到对方的有效性。然后,节点 B 在时间 t=1199ns 的第二位开始之初,转到非占用状态。另一个单向延迟以后,该非占用信号到达节点A,时间 t=1399ns。只有在这时,节点 A 才读取 RXD 信号,并且可以确定其代表网络的真实状态。
![](http://m.amcfsurvey.com/editerupload/fetch/20130823/163267_1_2.jpg)
图 3 延迟争用―节点 A 和 B 具有相同的优先级
评论