这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【CAN】S32K3 CAN Busoff 硬件自恢复机制

共2条 1/1 1 跳转至

【CAN】S32K3 CAN Busoff 硬件自恢复机制

高工
2026-08-27 10:11:01   被打赏 45 分(兑奖)     打赏

【简介】

在CAN 标准中对CAN的Busoff 的状态机的转换如下:

image.png

按照上述状态机的定义can 初始化完成后进入error active状态,在此状态下接收错误计数REC >127 或者发送错误计数TEC>127 时进入error passive状态,在 error passive 状态REC < 128,TEC < 128 状态恢复到 error active,在 error passive 状态 TEC > 255控制器进入到bus off 状态,bus off状态检测到 128  次 11 位隐性电平,才会离开 Bus‑Off 状态恢复到error active状态。

以下是S32K3 芯片手册中对bus off 状态机的实现说明,对应ECR寄存器来记录当前的错误计数状态。

image.png

S32K3的Busoff 状态管理是按照上述的CAN标准来实现的以下是S32K3 中硬件设计中busoff 恢复的策略。

image.png

以下是busoff 中断硬件自恢复硬件中断描述

image.png

添加如下的测试代码在busoff 触发和busoff  done 状态下翻转IO来计算触发Bus off 

void FlexCanX_Err_Callback(uint8 instance, Flexcan_Ip_EventType eventType,
                                              uint32 u32ErrStatus,
                                              const Flexcan_Ip_StateType * flexcanState)
{
	Siul2_Dio_Ip_TogglePins(TRIGER_IO_PORT,(0x01<<TRIGER_IO_PIN));
    // Handle FlexCAN error callback
    printf("eventType=%d, u32ErrStatus=0x%lX\r\n", eventType, u32ErrStatus);
    /* dump can ip ECR ESR1 ESR2 ERRSR */
    printf("CAN[1] %x %x %x %x \r\n", (*(volatile uint32_t*)(0X4030401c)),(*(volatile uint32_t*)(0X40304020)),(*(volatile uint32_t*)(0X40304038)),(*(volatile uint32_t*)(0X40304afc)));
}

本地测试数据如下

image.png




   


           




关键词: S32K3学习整理    

管理员
2026-09-04 23:55:46     打赏
2楼

对特定芯片高级功能的深度挖掘,技术门槛高,对汽车电子或工业控制的工程师非常有价值!


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]