我使用带有 SN65VHD230 收发器的 ESP32 破解我车上的 CAN 总线。我已经开发了使用 Arduino + MCP2515 测试的工作代码。但是在切换到 ESP32 之后,代码开始表现得很奇怪。它有时工作正常,有时根本不工作(代码没有任何变化)。所以我调查了警报标志,我意识到 ESP32 在 CAN 总线上看到错误,结果它进入“错误被动”状态并最终进入“总线关闭”状态。
我的应用程序将我自己准备好的文本发送到汽车的显示屏,因此可以立即有 2 个节点发送具有相同 ID 的消息 - 原始显示屏和 ESP32。所以我的理论是我得到了位错误,因为当汽车的显示器和 esp32 以相同的 ID 同时发送消息时,ESP32 正在检查传输的位,如果它会从汽车的显示器获得具有相反位状态的消息,那么它已经发送然后它产生错误标志。
奇怪的是,有时(很少)我仍然会出错,但 ESP32 即使经过很长时间也不会进入总线关闭状态。今天我在公共汽车上发现了 1000 多个错误,但它仍然运行良好。我的理论是我车上的原始显示器也出现错误,它只是在 ESP32 之前进入总线关闭状态。
所以这是我的问题——因为我无法阻止原始显示器发送自己的消息,有什么方法可以防止 ESP32 进入被动错误和总线关闭状态?或者也许在 main loop() 中实现错误计数器清除?请帮助我,我已经没有想法了,不知道下一步该怎么做