前言
最近遇到一个CAN报文超时Notification不上报导致ECU不休眠的偶发问题,本文分享解决问题的思路及影响报文超时上报的机制,希望能给各位读者一点启发。
参考文档:
1.Specification of CommunicationAUTOSAR Release 4.3.0
本文使用的AUTOSAR配置工具为:Vector公司的Davinci
正文
1.问题描述
背景:ECU下电的两个必要条件是:本地硬线IGN== IgOff && CAN报文中的点火信号等于IgOff,如果包含点火信号的CAN报文丢失,则判断该报文是否Timeout。
问题场景描述
初始状态:IgOn,CAN报文中点火信号等于IgOn
执行动作:IgOff,直接拔掉CAN工具(等同于所有报文掉线)
问题表现:偶发ECU不能休眠下电
初步分析:ECU不能下电时的Log中显示,IgOff后点火信号一直还是IgOn且没有收到点火信号所在报文的Timeout标志。
进一步分析:点火信号所在报文的超时标志是在Com模块配置的PDU的Signal的Callout函数中置位的,也就是说问题发生的时候报文超时的Callout没有被调用。

所以该问题的直接原因就是:IGN信号所在的报文偶发报文丢失不上报Timeout。
2.尝试的复现办法
按照上诉步骤尝试20次复现问题,无论是从ECU表现(ECU休眠,电流接近为0)来看还是Debug断点调试(报文Timeout的Callout进入)来看都是正常的,无法复现问题……
思考:是不是下电流程或者某种机制导致Com的超时判断不再运行导致的,而且这个机制有效的时候正好在超时判断之前就会导致这个问题。如果是这样的话,我们把报文的超时时间配置更大,这个问题应该就会必现。

把超时时间配置为10 S,果然这个问题必现了 !
3.原因分析
Step 1: 先看下正常的ComTimeoutNotification的调用栈(方便分析是哪里出问题导致的)。

正常情况下,Com_MainFunctionRx_ComMainFunctionRx àCom_MainFunctionRxInternal àCom_RxDlMon_MainFunctionRx àCom_RxDlMon_CallTimeOutNotifications调用各个Notification
-
模块
+关注
关注
7文章
2822浏览量
52802 -
CAN
+关注
关注
58文章
3013浏览量
471482 -
ecu
+关注
关注
14文章
967浏览量
56882 -
报文
+关注
关注
0文章
39浏览量
4313
原文标题:AUTOSAR架构下报文掉线超时不上报问题分析
文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
在STM32的CAN收发通信中,接收超时为什么不能发出一个报文的功能?
TC387从App跳回PBL在下载SBL,进入SBL后上位机发送的CAN报文响应超时,怎么解决?
espconn_gethostbyname接口DNS解析超时机制要自己做吗?
请问HAL库的超时机制可以修改吗?
Linux串口通信的超时机制
为什么32个CAN设备同时每隔1秒进行上报会出现有些上报不成功的现象呢
M482单片机只会上报FIFO的中断,不会上报超时中断的原因?
嵌入式网络终端报文收发机制研究与实现
基于公平心跳超时容错机制
网络管理报文的收/发与网络管理时间配置参数解析
STM32程序超时设计

影响报文超时上报的机制有哪些
评论