首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于CAN总线

关于CAN总线
EN

Stack Overflow用户
提问于 2012-03-15 20:45:09
回答 3查看 2K关注 0票数 2

我正在使用16位单片机PIC24HJ64GP504来编写一个基于CAN的应用程序。基本上,这是我的主板和另一个节点之间的通信,它使用CAN以1 Mbit/s的速度持续向我的主板发送数据。我正在配置PIC24中的ECAN模块,使其以1 Mbit/s的速度工作。我编写代码的方式是,对于前10 ms,ECAN模块将接受来自另一端的所有消息,之后我重新配置了ECAN模块,只接受那些消息ID为0x13的消息。

现在问题来了。另一个节点和我的电路板同时通电。另一个节点在通电后大约40毫秒后开始发送消息。但我无法在我的板上从它那里获得任何信息。现在,如果我首先给我的主板上电,给它一些时间来用新的过滤器重新配置ECAN模块,然后稳定下来,然后给另一个节点上电,然后一切都可以完美地工作。

最奇怪的是..。如果我有一个CAN总线分析器连接在我的电路板和另一个节点之间,即使我同时给两个节点通电,一切都工作得很好…不需要先打开我的电路板。我已经用来自不同制造商的三种不同的总线分析仪进行了试验,得到了相同的结果。

在我看来,在重新配置ECAN模块的过程中,需要一些时间才能稳定下来。随着总线分析器在总线中的引入,这段时间以某种方式缩短了,以便一切都能完美地工作。但我不确定到底是什么问题。

EN

回答 3

Stack Overflow用户

发布于 2012-03-15 20:56:22

问题可能是缺少ACK。CAN-Analyzer可能会确认帧,并且设备不会切换到无源错误模式。

我会推迟发送,直到整个总线初始化。

票数 3
EN

Stack Overflow用户

发布于 2012-03-16 21:01:06

对我来说,这听起来也像是丢失了ACK。

您是否看到任何错误帧(获取范围以触发6个连续的主比特)-如果没有得到足够的确认,Tx节点可能会离开总线,甚至进入某个应用程序错误模式。

您也许能够通过在总线上传输一个虚拟消息来诱使它回到总线上。

我发现Saleae Logic在这些情况下非常有用(还有一个示波器)--把它挂在物理层的Rx引脚上(或者甚至连上一个可以用来监控总线的独立物理层)。Saleae软件将解释CAN并向您显示发生了什么。有时,使用范围触发器out来触发逻辑是很有用的。

票数 2
EN

Stack Overflow用户

发布于 2016-10-25 23:02:34

CAN通信要求总线上至少两个活动设备才能成功通信。这是因为,除非有人确认,否则CAN帧是不完整的。

当你给你的电路板和其他节点加电时,你的电路板似乎在40毫秒内还没有准备好。如果它没有准备好,它离开“其他节点”成为总线上的唯一成员,并使上述规则无效。其他节点将得到Tx错误,且在128次错误之后,另一个节点将进入错误模式并停止发送消息--因此您什么也得不到。

当你首先给你的电路板加电时,给它一些时间--你的电路板已经准备好了,并且会确认其他节点发送的每一条消息--因此通信是很好的!

添加CANalyzer时,即使您的主板没有通电,总线上也有两个活动节点--因此通信很好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9719967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档