TJA1043T实现特定报文唤醒

目前在项目我们采用了NXP 1043T这款CAN收发器,但是客户要求我们要做特定帧的唤醒。

根据收发器的特定,可以知道任意报文都可以激活收发器,INH会被拉高,由于我们采用是断电系统,INH是直接连在PMIC上的,PMIC上电后就会给MCU上电,就会导致异常上电。

要想实现特定帧唤醒,就需要在软件层面实现过滤,下面是通讯的数据流:

CanDrv->CanIf->CanNM

我是在CanDrv实现的过滤,主要配置如下,只允许0x400-0x4FF范围内报文唤醒。

 这里特别要注意的网络管理帧选择BASIC CAN,特定的范围是通过Hwfilter来设置,但是实际修改filterMask,需要先将Object count改为2后才能修改,但是改完后请改回。

基本过程是:

CAN中断接收报文->CanDrv过滤->CanNM识别置标志位。

在最开始的调试中,发现了一个问题,为了能让CAN中断接收报文,所以在上电过程了写了如下代码,这样就会导致任意报文都会激活CanNm的状态机,进到networkmode。根据客户的需求,当非网络管理报文唤醒时,需要延时下电(3min),这个时间段内不发任何报文,只接收,但是由于异常唤醒走完了nm状态机后,进入bussleep,Can中断处于关闭状态,所以无法再次被唤醒。

需要实现的效果:非网络管理帧异常唤醒,不进nm状态机,但一直维持接收报文能力

实现方案,这里我们采用了EcuM的校验机制,上电过程中EcuM_MainFunction会调用循环EcuM_EnableWakeupSources(),没有调用需要先设置EcuM_SetWakeupEvent,在Pending状态下,只要超时时间没到,就一直检是否有有效唤醒源,有的会调用ComM_EcuM_WakeupIndication(),通知变更通讯状态,进而调用CanNM_passiveStartup,激活NM状态机。超时时间超过后还没有接收到有效唤醒源,会调用EcuM_StopWakeupSources.

 

EcuM_EnableWakeupSources():这里面需要初始化CanTrcv和CanDrv的驱动。

FUNC(void,ECUM_APPL_CODE) EcuM_StartWakeupSources
(EcuM_WakeupSourceType wakeupSource
)
{if(wakeupSource == ((EcuM_WakeupSourceType)1U << EcuMConf_EcuMWakeupSource_ECUM_WKSOURCE_PUBLIC_CAN)){CanIf_SetTrcvMode(0,CANTRCV_TRCVMODE_NORMAL);CanIf_SetTrcvMode(1,CANTRCV_TRCVMODE_NORMAL);//Can_17_McmCan_Init(&Can_17_McmCan_Config);Can_17_McmCan_SetControllerMode (0, CAN_T_WAKEUP);Can_17_McmCan_SetControllerMode (0, CAN_T_START);Can_17_McmCan_SetControllerMode (1, CAN_T_WAKEUP);Can_17_McmCan_SetControllerMode (1, CAN_T_START);Can_17_McmCan_EnableControllerInterrupts(0);(void)CanIf_SetPduMode(0,CANIF_ONLINE);(void)CanIf_SetPduMode(1,CANIF_ONLINE);}
}

 EcuM_SetWakeupEvent:上电过程中设置。

EcuM_ClearWakeupEvent:进入下电流程后,需要清除唤醒源。

EcuM_CheckValidation:超时时间内检测是否接收到NM报文,有的话设置当前唤醒事件为有效。

 EcuM_StopWakeupSources:超时后这里建议是执行复位。

 当检测到有效网络报文后,调用程序流如下:

Can中断/main_Read()->CanIf_RxIndication()->CanNm_RxIndication()->Nm_PduRxIndication()

Nm_PduRxIndication()是开放给user的api,进入此函数表示接到NM报文。 

 EcuM中需要配置唤醒时间的超时时间和ComMChannel.

 总结:

1.怎么才能保证非网络管理报文异常唤醒不进状态,保持在bussleep mode?

A:上电过程中不去请求FULL_COMMUNICATION。

2.怎么才能异常唤醒时保持接收网络报文的能力?

A:ECUM中设置唤醒源检测。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部