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