对于我的一个项目,我想产生一些CAN总线错误(例如位填充或CRC错误)。
这只是我的一个小想法,但你认为有可能实现吗?我知道所有协议的东西都是由CAN驱动程序处理的,但我也不是CAN通信方面的专家,所以也许我希望这个错误的产生是可以实现的。你怎么看 ?
我使用的是STM32微控制器和TJA CAN收发器。
这完全不是由软件处理,而是由片上CAN控制器硬件处理。虽然可以通过各种硬件技巧实现,但您无法仅通过软件添加填充或CRC错误等内容。
产生大量错误的一种简单方法是在总线上只有一个节点,或者缩短CAN高/低。如果你这样做的话,你会快速激活错误然后错误被动。
更微妙的方法是将MCU和收发器之间的Tx / Rx线拉到错误的电平。如果将其中一个连接到外部GPIO引脚,然后在将信息存储到CAN缓冲区后直接偷出脉冲,则会导致错误。特别是如果长于6位=填充错误。这些很可能与协议很好地同步,所以这可能就是你想要的。您可能需要将10k串联添加到实际的tx / rx引脚中,这样它们的驱动强度就会比GPIO弱。
另一种方法是让2个节点一次发送相同的仲裁字段(ID,RTR + misc位),但是不同的数据。这可以仅从软件中获取,但这意味着您需要让2个哑节点无所事事,只能在100%总线负载下反复发送相同的消息。