打印
[CAN-bus/DeviceNet]

什么原因才使总线关闭???

[复制链接]
2940|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shalilien|  楼主 | 2007-12-10 08:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zlgCAN| | 2007-12-10 11:41 | 只看该作者

上电之后节点如何因错误而进入复位是比较复杂的过程


再作一次支持。请先看看下面的CAN-bus错误管理,也是CAN2.0B规范的内容。
 
 
CAN2.0规范中,规定了检测以下错误类型的机制:
l          位错误
当发送器将自己发送的电平与总线上的电平相比较,发现两者不相等时产生。当隐性位传输时,显形位的检测在仲裁区;在帧ACK时间段,或被动故障标志传输期间,检测电平不一致则不会导致位错误产生。
l          应答错误
当发送器确定帧信息没有得到应答时发生。在CRC校验场及帧结束场之间存在一个应答时间段,该时间段内所有接收的节点,无论是否是预定的接收者都必须对接收的信息作出应答。
l          填充错误
当节点检测到6个相同电平值的连续位时发生。在正常工作情况下,当发送器检测到它已经发送了5 个数值相同的连续位时,那么它将在第六位上插入一个取反值(称之为位填充)。所有接收器在CRC 循环冗余检查计算之前将除去填充位。这样,当节点检测到6 个连续的具有相同值的位时,即产生一个填充位错误。
l          CRC 错误
当CRC(循环冗余检查)值与发送器生成值不匹配时发生。每一帧包含一个由发送器初始化的循环冗余检查(CRC)域;接收器计算出CRC 值,并与发送器产生的值相比较,如果两个值不相等即产生CRC 错误。
l          格式错误
当在一必须发送预定值的区内检测到非法位时发生。确定的预定义的位值必须在CAN 帧内的一个确定点发送,比如起始位、场间隙等。如果在这些区域中的一个内检测到非法位值,即产生格式错误。
检测到节点错误将改变节点错误状态。为了尽量减小网络上故障节点的负面影响,进而提供故障界定方法,CAN2.0规范中定义了一个故障界定状态机制。一个节点可能处于下列三种错误状态之一:
l          错误主动(Error Active)状态
当一个错误主动节点检测到上述某个错误时,它将发送一个错误主动帧,该帧由6 个连续的显性位组成,这一发送将覆盖其他任何同时生成的发送,并导致其他所有节点都检测到一个填充错误,并依次放弃当前帧。
当处于错误主动状态的节点检测到一个发送问题时,它将发出一个活动错误帧,以避免所有其他节点接收信息包。无论检测到错误的节点是否要接收这个数据,它都要执行这个过程。
l          错误被动 (Error Passive)状态
当一个错误被动节点检测到上述的某一个错误时,它将发出一个错误被动帧,该帧由6 个连续的隐性位组成,这个帧可能会被同时出现的其他发送所覆盖。如果其它站点没有检测到这一错误,将不会引起丢弃当前帧。
l          离线 (Bus Off)状态
处于离线状态下的节点不允许对总线有任何影响,它在逻辑上与网络断开。
l          关于故障界定状态机制,其所含过程简述如下:
l          节点保持对发送和接收错误计数器的跟踪。
l          节点在开始错误主动状态时错误计数器的值等于0,硬件初始化后错误计数器的值也等于0;该状态下的节点假设所有检测到的错误非该节点所为。
l          错误类型以及检出错误的结点被赋予不同的计数值。这些计数值将根据是发送还是接收错误进行累加。有效的接收及发送使这些计数器递减,直至最小值0。
l          当这些计数器中的任何一个超出CAN 定义的阈值时该节点进入错误被动状态。在此状态下,该节点将被认为是导致错误的原因。
l          当发送错误计数值超出CAN 定义的另一个阈值时,节点进入离线状态。CAN2.0规范定义了从离线到错误主动之间的状态转换机制。
l          当错误被动的节点的发送及接收错误计数器值都减小至CAN 定义的阈值以下时,节点重新进入错误主动状态。
关于出错管理机制的详细内容,可以参考《CAN2.0规范》中相关的叙述。
相关链接:http://www.zlgmcu.com.cn/index.asp?boardid=32

使用特权

评论回复
板凳
shalilien|  楼主 | 2007-12-10 15:22 | 只看该作者

那如何模拟总线关闭呢???

上电之后节点如何因错误而进入复位是比较复杂的过程,那意思是很难模拟出来了?(除了向错误寄存器写255之外)

使用特权

评论回复
地板
eddiematin| | 2007-12-12 15:47 | 只看该作者

不接后面的收发器

不接收发器就能得到了busoff状态了。很简单,或者用一个IO口输出低电平接到CRX,CAN的收管脚也可以得到busoff。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝