This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TCAN4550:TCAN4550 - CAN 总线关闭恢复

Guru**** 1955920 points
Other Parts Discussed in Thread: TCAN4550
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1438589/tcan4550-tcan4550---can-bus-off-recovery

器件型号:TCAN4550

工具与软件:

尊敬的 TI:

我尝试 通过短接 CANH 和 CANL 信号生成总线关闭状态、

我可以从寄存器 REG_MCAN_IR 确认 CANH、CANL 引脚短路时会发生 CAN 总线关闭情况  

bool_t TCAN4550_IsBusOff (空)

返回(TCAN4x5x_ReadRegister (REG_MCAN_IR)和 REG_BITS_MCAN_IR_BO)!= 0U;//检查总线关闭中断标志
}

当检测到总线关闭情况时、我使用以下代码从中恢复、但总线从 BUSOFF 条件中恢复、并且我无法传输更多消息  

直到我从头开始重新启动 tcan4550x

静态内联空 TCAN4550_BusRecoveryInit (void)

//步骤1:清除总线关闭中断标志
//这对 MCAN 中断寄存器(IR)进行写入以清除总线关闭(BO)中断标志。
//清除该标志可以确保控制器能够检测到后续的总线关闭事件。
TCAN4x5x_WriteRegister (REG_MCAN_IR、REG_BITS_MCAN_IR_BO);

//步骤2:读取 CCCR 寄存器的当前值
// CAN 控制器配置寄存器(CCCR)保存 TCAN4550的各种控制位。
//在此、我们读取其当前值以修改特定的位、同时保留其他位。
uint32_t cccrValue = TCAN4x5x_ReadRegister (REG_MCAN_CCCR);

//第3步:清除 CCCR 值中的 INIT 位
// INIT 位控制 CAN 控制器的初始化模式。
//清除该位允许控制器退出初始化模式、启动脱离总线恢复序列。
//按位与 REG_BITS_MCAN_CCCR_INIT 的补码可确保仅清除 INIT 位。
cccrValue 并且=~REG_BITS_MCAN_CCCR_INIT;

//步骤4:将修改后的值写回 CCCR 以应用更改
//将修改后的值写回 CCCR 寄存器会使控制器退出初始化模式。
//此操作将启动脱离总线恢复序列、其中控制器等待 CAN 总线上的129个空闲序列
//(每个都包含11个连续的隐性位)、然后重新加入总线。
TCAN4x5x_WriteRegister (REG_MCAN_CCCR、cccrValue);
}

它将非常感谢,如果你可以提供一些建议这一点  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、LS

    在将 CANH 和 CANL 短接在一起以创建总线关闭条件之后、是否总线上有其他器件正在发送 CAN 消息?  我看到这样的短路导致总线上的所有器件同时进入总线关闭状态、然后没有功能节点可以发送所需的消息来创建 129空闲时间、以便其他器件恢复。  发生这种情况时、可能需要器件复位和重新配置、才能完全清除 CAN 错误计数器并允许器件立即再次开始通信。

    此致、

    Jonathan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jonathan、

    我尝试了您的建议、并选择了器件重置和重新配置选项、好了  

x 出现错误。请重试或与管理员联系。