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.
工具与软件:
尊敬的 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、
我尝试了您的建议、并选择了器件重置和重新配置选项、好了