[CAN-bus/DeviceNet] can总线错误处理

[复制链接]
6279|18
 楼主| guxingke_8 发表于 2010-7-29 21:26 | 显示全部楼层 |阅读模式
想请教一下各位,我用的是89s52+sja1000+tja1050,中断中允许总线错误(IR.7),数据溢出错误(IR.3),以及错误中断IR.2 ,接收中断,发送中断,在检测到总线错误,数据溢出错误,以及错误中断中都有重新初始化SJA1000的芯片,可是还是有设置刚开始正常工作,几个月后,或者是一年,有时候会有节点会一直收不到数据,重新上电一下就好,请问一下,这有可能是什么问题?
 楼主| guxingke_8 发表于 2010-7-30 08:42 | 显示全部楼层
没有人回答,我自己顶一下
 楼主| guxingke_8 发表于 2010-7-30 08:43 | 显示全部楼层
我的系统是用在电梯控制中的,节点差不多有10个左右,用的扩展帧格式
lnskngdc 发表于 2010-8-1 22:57 | 显示全部楼层
不重新复位的情况下,因为物理条件干扰或者不稳定,sja1000的错误寄存器会检测出很多错误,当错误数超过255时,会使总线关闭,此时sja1000不能接收和发送总线上的数据,可以人为检测,当错误超过某值后清空错误寄存器,但是这只是治标不治本的解决办法.
最根本的方法就是做好抗干扰,使用阻抗小的电缆,通讯速率要统一,尽量保持在3%以内(规约要求5%以内).
 楼主| guxingke_8 发表于 2010-8-2 09:19 | 显示全部楼层
不知道你说的做好抗干扰是指什么,我目前做到的是用屏蔽双绞线+终端电阻,我现在的系统中在检测到总线错误,数据溢出错误,以及错误中断中都有重新初始化SJA1000的芯片,
电缆的电阻也足够小的
通讯速率肯定是一样的呀!
 楼主| guxingke_8 发表于 2010-8-2 09:30 | 显示全部楼层
重新初始化芯片和重新上电对SJA1000来说应该是一样的吧!
lnskngdc 发表于 2010-8-4 21:33 | 显示全部楼层
重新初始化芯片和重新上电对SJA1000来说应该是一样的吧!
guxingke_8 发表于 2010-8-2 09:30

重新上电就是硬复位.
初始化就是软复位.
结果是差不多的,难道你准备运行一段时间自动重启?
 楼主| guxingke_8 发表于 2010-8-5 08:27 | 显示全部楼层
是的,不知道楼上的有什么好办法可以消除错误!谢谢了
lnskngdc 发表于 2010-8-5 18:17 | 显示全部楼层
我在4楼写了啊,经常去检查错误寄存器,如果超过某个值就清空错误寄存器或者重新初始化sja1000.
 楼主| guxingke_8 发表于 2010-8-6 08:28 | 显示全部楼层
嗯,我现在是如果有发现某些错误就重新初始化一下SJA1000,而不是清空错误寄丰器。和你的办法也差不多,对了,楼上的你的产品是用在什么场合,抗干扰除了你说的"通讯速率要统一,尽量保持在3%以内(规约要求5%以内)."这个是什么意思?通讯的波特率不是都要设置成一样的才行吗?还有你们的产品是用在什么地方的,如果可以在总线上加磁环的话,抗干扰的效果也挺明显的。
xlsbz 发表于 2010-8-8 11:15 | 显示全部楼层
1# guxingke_8

你是在CAN中断里面重新启动呢?

还是在主循环中重新启动?
 楼主| guxingke_8 发表于 2010-8-13 08:15 | 显示全部楼层
在主循环里重新启动
bhsdlmj 发表于 2010-8-14 08:41 | 显示全部楼层
能确定 启动成功了么?

能确定 启动的正确么?
ddd110 发表于 2010-10-15 20:57 | 显示全部楼层
我也遇到这样的类似问题。不知怎么解决。
myic200610 发表于 2012-10-24 00:55 | 显示全部楼层
学习了
sjz2008 发表于 2012-10-26 20:28 | 显示全部楼层
受益。大拿继续顶起啊
crystal_f 发表于 2013-1-5 23:10 | 显示全部楼层
guxingke_8 发表于 2010-8-13 08:15
在主循环里重新启动

我也遇到相似的问题,Can总线节点增多,有些节点就会接收不到数据。请问,你说的重启是对芯片重新初始化吗?
fuzhoulzp 发表于 2013-1-7 17:50 | 显示全部楼层
学习了,CAN总线挺好用的,最近越来越受欢迎了,改天玩玩新塘的ARM,上面也有CAN总线外设
lvyisu123 发表于 2013-1-22 16:35 | 显示全部楼层
你好,我想向你请教下can总线的相关知识。
1.消极错误节点在消极报错后是如何工作的,他接收到什么信号后进入间歇场,从而开始下一帧的发送或接收?
2.在间歇场的第一位和第二位如果出现显性,则总线进入超载,我想问这两个为是哪个节点发送到总线上来的?如果第三位出现显性位,总线又会以他为帧起始,这个为又是谁决定的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

9

帖子

0

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