对于我的项目之一,我想生成一些CAN总线错误(例如,位填充或CRC错误)。
这只是我的一个小主意,但您认为有可能实现吗?我知道所有协议内容都是由CAN驱动程序处理的,但是我也不是CAN通信专家,所以也许我有点希望可以实现此错误生成。你觉得呢?
我正在使用STM32微控制器和TJA CAN收发器。
答案 0 :(得分:6)
这根本不是由软件处理的,而是由片上CAN控制器硬件处理的。尽管可以通过各种硬件技巧来实现,但是您将无法单独通过软件添加填充或CRC错误之类的东西。
一种容易产生大量错误的简便方法是在总线上只有一个节点,或者使CAN高/低短路。如果这样做,您将迅速进入主动错误状态,然后被动被动状态。
更巧妙的方法是将MCU和收发器之间的Tx / Rx线拉到错误的水平。如果将其中之一连接到外部GPIO引脚,然后在将消息存储在CAN缓冲区中之后直接潜入一个脉冲,则会导致错误。特别是如果超过6位=填充错误。这些很可能与协议保持了很好的同步,因此这可能就是您想要的。您可能需要在实际的tx / rx引脚上串联添加约10k,这样它们才能获得比GPIO弱的驱动强度。
另一种方法是让2个节点一次发送相同的仲裁字段(ID,RTR + misc位),但发送不同的数据。仅通过软件就可以实现这一点,但这意味着您需要让2个哑节点什么也不做,只能在100%总线负载下一次又一次地发送相同的消息。