检测 CAN 总线错误的合适方法是什么?

what is an appropriate way to detect errors in CAN-Bus?

我正在与使用 CAN 总线协议 (J1939) 发送数据的电池通信。我使用 PIC 18F26K83。我的目标是在显示器上显示剩余电量。例如,我在 60 个数组中有值 %99,在其中 40 个中有 %1,那么我将显示 %99)。但是,它看起来不像是一个可靠的解决方案,因为我不知道我收到了多少垃圾数据。请注意,我不能使用一些错误检测算法,例如校验和,因为我无法访问电池中的微控制器,我只能使用接收器端(显示器)。 编辑:我知道 CAN 总线中的 CRC,但似乎有时它不起作用,因为有时我会收到垃圾。

是的,您可以使用 CRC 计算,因为 CRC 也在接收方由通信控制器计算。例如,这就是检测 CRC 错误的方式。详细说明:

电池发送完整消息;消息在物理层上受到干扰;接收方(您的 PIC)接收消息并计算其上的 CRC; 与消息中包含的 CRC 标记不匹配; PIC CC 将有一个 REC 错误 +1,并且不会向电池确认消息。

您将在接收方检测到每种类型的 CAN 消息错误,除了位错误,这也是无关紧要的,因为它会导致消息不完整。

基本上,如果消息已损坏(垃圾),您不应该能够依赖接收到的 CAN 消息内容来推断电池电量。它在到达您的 PIC 的应用层之前被简单地丢弃。