打印
[CAN-bus/DeviceNet]

can总线关闭的问题

[复制链接]
5959|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
java0735|  楼主 | 2010-7-12 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
can协议中说:
在总线监视到128 次出现11 个连续“隐性”位之后,“总线关闭”的节点可以变成“错误主动”(不再是“总线关闭”),它的错误计数值也被设置为0

协议中说节点可变成“错误主动”是什么意思,需要什么条件吗?我测试干扰总线使总线关闭,发现当总线关闭后不会自动恢复通信(可以保证128 次出现11 个连续“隐性”位),是不是恢复通信需要什么条件?

相关帖子

沙发
xlsbz| | 2010-7-12 17:41 | 只看该作者
本帖最后由 xlsbz 于 2010-7-12 17:46 编辑

搞点实用的 概念我也不懂。

总线关闭(这里不知道叫做节点退出可以不?)就是 总线既不能发送 也不能接收了!

我现在是在main函数里面 检测总线是否处于busoff状态  如果是busoff状态,那么 令init=0
bosch can rev2.0 还是 V1.2说 如果令init=0后,那么就会等连续11个什么东西,然后将错误计数器清零

==========

不知道你用的是什么CAN控制器??

使用特权

评论回复
板凳
xlsbz| | 2010-7-12 17:44 | 只看该作者
CAN的优点有条说:总线错误过多  CAN节点就会自动退出。

但是我想在有些场合 这哪能算得上优点啊   总线的错误都是因为别的节点或者是干扰什么的 让我的节点关闭了。那我的节点多冤枉啊  我的节点还工作不工作了啊  必须要工作!

所以我的节点一旦关闭 我就重新启动!

使用特权

评论回复
地板
xlsbz| | 2010-7-12 17:48 | 只看该作者
一种可以在 主循环 启动节点   一个可以在关闭节点之前 (比如说 128个错误会关闭节点 ,那么就在比如在发现100个错误时 在 CAN接收中断里面 将错误计数器清零)

使用特权

评论回复
5
xlsbz| | 2010-7-12 17:49 | 只看该作者
总结:这法子都是我乱想的 可能有弊端!

不过我觉得应该没有问题!

尤其是我不想我的节点退出 如果退出了  让客户看到你的节点不工作了  大概不是什么好事!

使用特权

评论回复
6
xlsbz| | 2010-7-12 17:54 | 只看该作者
这个**我又搜出来了 楼主有兴趣可以看看

https://bbs.21ic.com/viewthread.p ... 8%E6%8A%A5%E9%94%99

使用特权

评论回复
7
xlsbz| | 2010-7-12 17:58 | 只看该作者
楼主是用干扰导致节点关闭  咋干扰的?指点一下!

我采用的是将 CAN的两个腿 短接一小会  或者 自己的这个节点又发又收(一定要快 快发快收 快快快)这样出现的错误是 在发送的时候 本来应该是 一个性(忘了显性还是隐的了) 但是总线上还有另一个性

所以错

楼主是用干扰导致节点关闭  咋干扰的?指点一下!


楼主 这就是我一天的收获  全奉送给你了

使用特权

评论回复
8
xlsbz| | 2010-7-12 18:03 | 只看该作者
这个**你也可以看下  以前我看过了 给我的感觉是 作者敢于说CAN协议有问题 所以说这个作者真够胆  应该有水平

http://www.21ic.com/app/rf/200906/44436_2.htm

使用特权

评论回复
9
astudent| | 2010-7-12 22:00 | 只看该作者
学习

使用特权

评论回复
10
java0735|  楼主 | 2010-7-14 15:18 | 只看该作者
非常感谢xlsbz的回答,我干扰总线的方法和你一样,我那天看can2.0协议时,协议上说can总线关闭后能自动恢复,所以特意测试了一下,结果等了老半天也没见恢复,总线上数据量也很小,所以很纳闷,所以上来问问是怎么一回事

使用特权

评论回复
11
java0735|  楼主 | 2010-7-14 15:26 | 只看该作者
我用的是c8051f040自带的can控制器,收发器是TJA1050

使用特权

评论回复
12
anzhongxin| | 2010-7-29 10:37 | 只看该作者
现在一般的CAN控制器会有BUSOFF控制的!
总线错误分为主动错误和被动错误以及总线关闭错误!
发送和接收分别会有相应的错误计数器,只有发送错误>255时才会引起BUSOFF,而接收错误不会引起BUSOFF!
至于总线自恢复,那飞思卡尔的MSCAN来说,它可以配制成自恢复或者用户请求的恢复机制,而这个恢复的条件是总线上连续出现128此连续的11位的隐性位
或者说你也可以自己去做恢复机制,当发现总线BUSOFF时,你可以直接重新初始化一下CAN控制器就可以实现了
另外注意一点,一般的错误计数器是不可以手动清除的,这个是控制器自行处理的,发送接收正确它会自己减数的(重新初始化除外)

使用特权

评论回复
13
xlsbz| | 2010-8-1 18:29 | 只看该作者
这个是控制器自行处理的,发送接收正确它会自己减数的
anzhongxin 发表于 2010-7-29 10:37


请问 在哪里得知这个资料“发送接收正确它会自己减数的”?

我预想也是这样的。不过没有见过什么资料上面说过!
请问你是在哪里看到的?还是自己猜想的?

使用特权

评论回复
14
小小鱼| | 2010-10-12 14:10 | 只看该作者
楼上的是用干扰导致节点关闭  咋干扰的?指点一下!
我采用的是将 CAN的两个腿 短接一小会 怎么没见bus off呀?

使用特权

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

本版积分规则

32

主题

294

帖子

2

粉丝