我正在使用 16 位 MCU PIC24HJ64GP504来编写基于 CAN 的应用程序。基本上它是我的板子和另一个节点之间的通信,它使用 CAN 以 1 Mbit/s 的速度不断地向我的板子发送数据。我正在将我的 PIC24 中的 ECAN 模块配置为以 1 Mbit/s 的速度工作。我编写代码的方式是,在前 10 毫秒内,ECAN 模块将接受来自另一端的所有消息,之后我重新配置 ECAN 模块以仅接受消息 ID 为 0x13 的那些消息。
现在问题来了。另一个节点和我的电路板同时通电。另一个节点在上电 40 毫秒左右后开始发送消息。但我无法在我的板上收到任何消息。现在,如果我先给我的电路板加电,给它一些时间用新的过滤器重新配置 ECAN 模块并稳定下来,然后再给另一个节点加电,那么一切都会正常运行。
现在最奇怪的部分..如果我在我的板和另一个节点之间连接了一个 CAN 总线分析器,即使我同时给两个节点加电,一切正常......不需要先给我的板加电。我已经用来自不同制造商的三种不同的总线分析仪进行了尝试,并得到了相同的结果。
在我看来,在重新配置 ECAN 模块期间,需要一些时间来安定下来。并且随着总线分析器在总线中的引入,这段时间不知何故被缩短了,这样一切都可以完美运行。但我不确定问题到底是什么。
在过去的 7 天里,我一直在努力解决这个问题。
PS:今天我用示波器检查,发现如果另一个节点在上电后170毫秒后开始传输,那么整个事情就正常了。在此之前,除非连接了总线分析器,否则我的设备不会收到任何消息。最糟糕的是我不能延迟另一个节点的传输,那个节点的固件是专有的。
另外,我今天在一个论坛上读到,CAN 需要节点上的 120 Ω 电阻器才能使其工作(即使我的节点没有一个并且它工作正常,只要在重新配置后有一些时间来解决)。我怀疑总线分析器的引入以某种方式改变了某些网络的电气参数,从而缩短了我的节点在重新配置后稳定所需的时间。但我不确定.. :(