深度解析 AS32S601 芯片 CAN Bus Off 机制:从原理到应用的全流程指南 电子说
在汽车电子、工业自动化等众多领域,CAN 总线作为一种可靠的通信协议被广泛应用。而 AS32S601 芯片凭借其卓越的性能和可靠性,在这些领域也发挥着重要作用。其中,CAN Bus Off 功能作为 CAN 总线通信中的关键错误处理机制,对于保障整个通信网络的稳定性具有重要意义。
CAN Bus Off(总线关闭)是指 CAN 节点因发送错误帧过多,超出设定数量后,被总线 “关闭” 进入 Bus Off 状态。此时节点无法收发消息,直至被重置或自动恢复。其主要作用是防止故障节点持续干扰总线通信,确保其他正常节点能继续工作。

:
Bus Off机制的设计目的是为了避免某个设备因为自身原因(例如硬件损坏)导致无法正确收发报文而不断破坏总线的数据帧,从而影响其他正常节点通信。
基于 CAN 协议定义的错误计数器机制,主要包括发送错误计数器(TEC)和接收错误计数器(REC)。当 TEC 超过阈值(通常为 255)时,节点进入 Bus Off 状态。错误计数规则如下:
状态转换路径依次为主动错误状态 → 被动错误状态 → 总线关闭状态。
/*------监控并打印TEC计数------*/
Printf("TEC: 0x%x !rn", CANFD3- >ECR & CANFD_ECR_TEC);
Printf("ESTAT: 0x%xrn", CANFD3- >SR & CANFD_SR_ESTAT);

** 2.状态寄存器查询** :在错误中断处理逻辑中查询 CAN 控制器的状态寄存器相应位。示例代码如下:
PLIC_InitTypeDef PLIC_InitStructure;
CANFD_ITConfig(CANFD3, CANFD_IT_EBSOFF, ENABLE);//打开BUSOFF中断
/*
* Function: CANFD3_IRQ_Handler
* Description: CANFD3 interrupt handler function.
* Param: None.
* Return: None.
*/
**void** CANFD3_IRQ_Handler()
{
**if** (CANFD_GetITStatus(CANFD3, CANFD_FLAG_BSOFF) != RESET)
{
Printf("BusOff!rn");
/* Clear the interrupt pending bits */
CANFD_ClearITPendingBit(CANFD3, CANFD_CLEAR_BSOFF);
}
}
/*------打开BUS-OFF自动回复功能------*/
CANFD_AutoBusOffRecoConfig(CANFD3,ENABLE);

2.手动恢复 :需重置 CAN 控制器或重新初始化 CAN 节点。让 CAN 进入初始化模式,再进入正常工作模式。示例代码如下:
/*------打开BUS-OFF自动回复功能------*/
**if** (key3_flag)
{
key3_flag = 0;
CANFD_SetBusOff_Recovery(CANFD3);
Printf("The key3 pressed,BUS-OFF Recovery!rn");
}
3.快慢恢复策略
:快恢复适用于临时性错误,短时间内(如 50ms)尝试恢复;慢恢复适用于较长时间(如 1s)后恢复,避免频繁错误影响系统。代码示例如下:
/*------BUS-OFF慢恢复-快恢复策略------*/
**if** (Quick_Recovery_Flag < 5)
{
**if** (time50_flag)
{
time50_flag = 0;
Quick_Recovery_Flag++;
CANFD_SetBusOff_Recovery(CANFD3);
Printf("50ms BUS 0FF Quick Recovery!rn");
}
}
**if** (Slow_Recovery_Flag < 3)
{
**if** (time1000_flag)
{
time1000_flag= 0;
Slow_Recovery_Flag++;
CANFD_SetBusOff_Recovery(CANFD3);
Printf("1000ms BUS 0FF Slow Recovery!rn");
}
}
CAN Bus Off 功能作为 CAN 总线通信中的重要错误处理机制,在 AS32S601 芯片中得到了良好的支持和实现。通过深入了解其原理、产生原因、触发条件以及检测和恢复方法,我们能够更好地应对 CAN 总线通信中可能出现的问题,提高系统的可靠性。在实际应用中,应根据系统需求选择合适的检测和恢复策略,平衡系统可靠性和响应速度。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !