[CAN-bus/DeviceNet] 什么原因才使总线关闭???

[复制链接]
4646|3
 楼主| shalilien 发表于 2007-12-10 08:39 | 显示全部楼层 |阅读模式
除了写255到发送错误寄存器,我都没有实验得到总线关闭这个状态。<br />发送错误寄存器总是到0x80就停了,重发到0x80后进入迟缓状态吗?如果没有其他占用总线也是吗?(协议有写吗?可以告诉我那里有提到啊?),那怎么才能模拟总线关闭就自动复位呢?
zlgCAN 发表于 2007-12-10 11:41 | 显示全部楼层

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

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

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

上电之后节点如何因错误而进入复位是比较复杂的过程,那意思是很难模拟出来了?(除了向错误寄存器写255之外)
eddiematin 发表于 2007-12-12 15:47 | 显示全部楼层

不接后面的收发器

不接收发器就能得到了busoff状态了。很简单,或者用一个IO口输出低电平接到CRX,CAN的收管脚也可以得到busoff。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部