【问题标题】:Unable to reset the can error using CAN bus error recovery sequence. As when the can bus is not connected to other node无法使用 CAN 总线错误恢复序列重置 can 错误。当can总线没有连接到其他节点时
【发布时间】:2014-10-17 12:08:20
【问题描述】:

主题: 无法使用 CAN 总线错误恢复序列重置 can 错误。就像can总线没有连接到其他节点一样。

说明: 我们使用infineon XE164微控制器和keil uvsion4编译代码。


背景和硬件设置

我们的产品设置如下:

  1. 我们使用 XE164 微控制器来控制外围设备。在外设方面基本控制伺服电机、步进电机、lcd和键盘。

  2. 我们希望将数据从 infenion XE164 节点传输到 PIC18f2480 节点。


问题

  1. 在 CAN 总线上从两个节点传输和接收数据没有问题。

  2. 当总线未连接且 XE164 板传输数据时,我们的 CAN 总线进入错误状态。将错误状态的 CAN 总线模式更改为空闲状态的恢复序列是什么。

  3. 如何在不重置微控制器硬件的情况下避免这种情况。

【问题讨论】:

  • 为什么不连接总线上的其他节点就传输消息?
  • @Swanand 这只是错误的做法,但我们希望保持我们的 CAN 总线不会进入 busoff 状态,即使总线没有连接到任何其他节点。

标签: can-bus


【解决方案1】:

在CAN协议中,ACK是必须的!

如果总线上没有其他节点,CAN传输将无法工作,它进入错误状态是正确的行为。

摆脱该错误状态的唯一方法是重新初始化您的 CAN 模块(例如再次调用 CANInit()),因为即使在错误恢复序列之后,CAN 控制器也会重试传输数据并再次陷入错误状态并且这将继续...重新初始化将停止尝试,CAN模块将处于正常状态。

编辑在 OP 发表评论后:

如果你想轮询总线上是否有设备,你可以在 Timer ISR 中设置一个比如 X 毫秒的 Timer 中断: 1.初始化CAN 2. 发送 CAN 报文 3.如果没有产生错误中断并且消息传输成功,则停止定时器,否则继续。

您也可以尝试不同的波特率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2020-10-07
    相关资源
    最近更新 更多