点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
01
需求描述
ECU在休眠(断电)状态下收到第一帧NM报文需要唤醒ECU(对外表现就是电流从低功耗开始上升,但无CAN报文发出),在T wakeup timeout内收到第二帧NM报文需要唤醒网络(对外表现就是ECU有CAN报文发出)。要求 1s <= T wakeup timeout <= 3s.
02
测试方法
因为要求1s <= T wakeup timeout <= 3s, 则T wakeup timeout可以为[1s, 3s]内的任一值,如果开发工程师实现T wakeup timeout = 2s. 则测试case如下:
第一帧NM报文和第二帧NM报文的间隔时间 | ECU对外表现 |
0.5s, 1s, 1.95s | ECU被唤醒,电流上升且有报文外发 |
2.05s, 2.5s3.5s | ECU被唤醒,电流上升无报文外发 |
注意:ECU在休眠状态下测试只能通过CANoe工具来测试该需求,通过其他CAN工具(比如TMaster)无法进行测试(TMaster发送一帧NM报文对外表现就把ECU唤醒且唤醒了网络),在使用CANoe工具发送NM报文时必须勾选如下图所示的TxSelf-ACK(其他工具如TMaster无此配置选项)。
03
完成需求的方法
这里直接给出方法,只要按照下图所示配置EcuM中的CAN唤醒源即可(当然前提是CanIf, Cantrcv…等模块已经配置正确)。
Validation Timeout:配置唤醒源的校验时间。
Wakeup Source Polling:定义是否需要轮询检测该唤醒源。
04
原理详解
4.1 CanTrcv 接收到第一帧NM报文
如果采用非SBC方案,采用Infineon芯片的ECU在进入休眠状态后一般会设置Tricore核到Standby状态,也会设置Can transceiver到Sleep状态。收到第一帧NM报文后,CanTrcv获取到远程唤醒事件,CanTcv的INH引脚会拉高到High Level唤醒ECU,ECU醒来后程序从头开始运行,CanTcv的Init函数会Check唤醒事件,Check到唤醒事件后会调用EcuM_SetWakeupEvent(ECUM_WAKEUP_SOURCE_CAN). EcuM就会设置ECUM_WAKEUP_SOURCE_CAN状态到ECUM_WKSTATUS_PENDING状态。
ECU接收到第一帧NM报文时ECU被唤醒,Can Cantroller处于Stop状态且CanTrcv处于Sleep状态,Cantroller不会产生CAN接收中断,所以第一帧报文不会被软件处理。
注意:Vector的代码在CanTrcv_Init就能Check唤醒事件,ETAS的代码只能在CanTrcv_MainFuncton里面Check唤醒源事件。
4.2 EcuM接收到唤醒事件
EcuM检测唤醒源状态到ECUM_WKSTATUS_PENDING后就会调用EcuM_StartWakeupSources().
EcuM_StartWakeupSources是一个callout函数,一般在EcuM_StartWakeupSources函数中调用CanSM_StartWakeupSource, CanSM_StartWakeupSource正常会设置Can Controller到Normal状态且设置Can Cantrcv到Normal状态,同时开始唤醒源的校验,也就是开始T wakeup timeout的计时。
EcuM同时开始唤醒源的校验其实就是调用EcuM_CheckValidation函数,EcuM_CheckValidation也是一个Callout函数,一般会在EcuM_CheckValidation函数中调用CanIf_CheckValidation检测有没有收到有效的NM报文:
a.如果在T wakeup timeout也就是Validation Timeout时间内收到有效的NM报文就会设置CAN唤醒源事件状态到ECUM_WKSTATUS_VALIDATED,同时调用ComM_EcuM_WakeUpIndication通知到ComM, ComM一般就会切换到Full状态,Com模块就会发送周期报文,CanNm模块被动唤醒发送进入到RM状态开始慢发NM报文。
b. 如果在T wakeup timeout也就是Validation Timeout时间内没有收到有效的NM报文就会设置CAN唤醒源事件状态到ECUM_WKSTATUS_EXPIRED,EcuM就会调用EcuM_StopWakeupSources(), EcuM_StopWakeupSources是一个callout函数,因EcuM_StopWakeupSources()会调用CanSM_StartWakeupSource, CanSM_StartWakeupSource又会设置Can Controller到Stop状态且设置CanTrcv到Standby状态。
4.3 CanTcv接收到第二帧NM报文
EcuM调用EcuM_StartWakeupSources后Can Cantroller和CanTrcv被打开,如果CanTrcv接收到第二帧NM报文,Can controller就会产生接收中断,Can controller就会调用CanIf_RxIndication将有效报文传递到CanIf模块。这个时候EcuM_CheckValidation -> CanIf_CheckValidation就能完成唤醒源校验。
4.4 EcuM完成唤醒源校验
如4.1, 4.2, 4.3章节所述,ECU 在T wakeup timeout时间内收到2帧有效的NM报文,EcuM就能完成唤醒源检验,对外就是有CAN报文发出。
05
总结
ECU的休眠唤醒(CAN报文唤醒)需要CanTrcv, Can Controller, CanIf, CanSM, EcuM, Com, ComM这么多模块的共同参与,非常的复杂,通过一篇文章很难全部都讲清楚,本文从T wakeup timeout实际需求出发,简要的介绍了完成这个需求各个模块的功能和动作,希望能给大家带来一些启发。
来源:汽车嵌入式
end
专业社群
精品活动推荐
更多文章
关于涉嫌仿冒AutoSec会议品牌的律师声明
一文带你了解智能汽车车载网络通信安全架构
网络安全:TARA方法、工具与案例
汽车数据安全合规重点分析
浅析汽车芯片信息安全之安全启动
域集中式架构的汽车车载通信安全方案探究
系统安全架构之车辆网络安全架构
车联网中的隐私保护问题
智能网联汽车网络安全技术研究
AUTOSAR 信息安全框架和关键技术分析
AUTOSAR 信息安全机制有哪些?
信息安全的底层机制
汽车网络安全
Autosar硬件安全模块HSM的使用
首发!小米雷军两会上就汽车数据安全问题建言:关于构建完善汽车数据安全管理体系的建议