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