是否可以使用STM32生成CAN总线错误?
Is it possible to generate CAN bus error using STM32?
对于我的一个项目,我想生成一些 CAN 总线错误(例如位填充或 CRC 错误)。
这只是我的一个小想法,但是你觉得有可能实现吗?我知道所有协议内容都由 CAN 驱动程序处理,但我也不是 CAN 通信方面的专家,所以也许我有一点希望可以实现这种错误生成。你怎么看?
我正在使用 STM32 微控制器和 TJA CAN 收发器。
这根本不是由软件处理的,而是由片上 CAN 控制器硬件处理的。尽管可以通过各种硬件技巧来实现,但您将无法单独使用软件添加诸如填充或 CRC 错误之类的东西。
产生大量错误的一种简单方法是总线上只有一个节点,或者短接 CAN High/Low。不过,如果您这样做,您将很快进入错误主动状态然后错误被动状态。
更微妙的方法是将 MCU 和收发器之间的 Tx/Rx 线拉到错误的电平。如果将其中一个连接到外部 GPIO 引脚,然后在将消息存储到 CAN 缓冲区后直接偷偷输出一个脉冲,就会导致错误。特别是如果长于 6 位 = 填充错误。这些很可能与协议同步,所以这可能就是您想要的。您可能需要在实际的 tx/rx 引脚上串联添加 10k,这样它们的驱动强度就比 GPIO 弱。
另一种方法是让2个节点同时发送相同的仲裁字段(ID,RTR + misc bits),但数据不同。这可以单独通过软件实现,但这意味着您需要有 2 个哑节点,除了在 100% 总线负载下一遍又一遍地发送相同的消息之外什么都不做。
对于我的一个项目,我想生成一些 CAN 总线错误(例如位填充或 CRC 错误)。
这只是我的一个小想法,但是你觉得有可能实现吗?我知道所有协议内容都由 CAN 驱动程序处理,但我也不是 CAN 通信方面的专家,所以也许我有一点希望可以实现这种错误生成。你怎么看?
我正在使用 STM32 微控制器和 TJA CAN 收发器。
这根本不是由软件处理的,而是由片上 CAN 控制器硬件处理的。尽管可以通过各种硬件技巧来实现,但您将无法单独使用软件添加诸如填充或 CRC 错误之类的东西。
产生大量错误的一种简单方法是总线上只有一个节点,或者短接 CAN High/Low。不过,如果您这样做,您将很快进入错误主动状态然后错误被动状态。
更微妙的方法是将 MCU 和收发器之间的 Tx/Rx 线拉到错误的电平。如果将其中一个连接到外部 GPIO 引脚,然后在将消息存储到 CAN 缓冲区后直接偷偷输出一个脉冲,就会导致错误。特别是如果长于 6 位 = 填充错误。这些很可能与协议同步,所以这可能就是您想要的。您可能需要在实际的 tx/rx 引脚上串联添加 10k,这样它们的驱动强度就比 GPIO 弱。
另一种方法是让2个节点同时发送相同的仲裁字段(ID,RTR + misc bits),但数据不同。这可以单独通过软件实现,但这意味着您需要有 2 个哑节点,除了在 100% 总线负载下一遍又一遍地发送相同的消息之外什么都不做。