ComM的内外部唤醒
ComM可以通过NM保持网络的唤醒,同时也可以通过SM激活通信,总之就像一个通信的总管。
下面通过两种唤醒源来解释ComM的状态机。
1、内部唤醒
① 当ComM上电初始化时会首先进入NO COMMUNICATION状态,在该状态下ComM会持续循环判断是否有本地唤醒请求。
② 如果检查到有本地通信请求API执行(本地请求可以由SWC,DCM或者BSWM发起,API为Rte_Call_UR_XXX_RequestComMode()或者ComM_RequestComMode()),状态则将往FULL COMMUNICATION迁移(过程中ComM会Allow通信通道,让CanSM打开Transceiver和Controller,BswM启动收发IPDU),网络被激活。
③ 进入FULL COMMUNICATION后,由于是本地唤醒,NM首先会进入Network Requested,执行正常的报文收发,能一直主动去保持Network的唤醒状态。
④ 一旦本地ComM释放后,则Network进入Ready Sleep状态,NM PDU停发。
⑤ 如果这时其它ECU也都不需要通信,等收到NM Prepare-Bus-Sleep的指示后,Network进入Prepare Bus Sleep状态并停止发送Tx IPDUs。ComM进入SILENT COMMUNICATION状态。
⑥ 在SILENT COMMUNICATION状态下如果收到了NM Message,则ComM又回到FULL COMMUNICATION中,并重新开始发送Tx IPDUs。
⑦ 在SILENT COMMUNICATION状态下如果没有收到NM Message,并且这时收到了NM Bus-Sleep的指示,则让CanSM去关闭通道(包括切换Transceiver和Controller的状态,停止接收Rx IPDUs),然后ComM进入NO COMMUNICATION状态。
2、外部唤醒
如果被外部唤醒,NM会进入被动状态(Passive)。然后当ComM进入Full Communication后也会默认往Ready Sleep状态里面去跑,除非持续收到外部的唤醒,否则不会去保持Network的唤醒状态
EcuM、ComM和CanNm的状态关联
① 在ComM处于NO COMMUNICATION状态时,由BswM来管理通信的允许与禁止。
② 只有当EcuM处于UP状态下才能保持ComM的FULL COMMUNICATION状态和SILENT COMMUNICATION状态。
③ ComM的FULL COMMUNICATION状态对应着CanNm的Normal/Repeat/Ready Sleep三个子状态。
④ EcuM负责验证ECU的唤醒事件,然后发送指示给ComM,ComM请求ComM模式变更,但是需要由EcuM和BswM一起来配合执行。
⑤ 可以请求ComM切换通信模式的用户有SWC、DCM、BswM;DCM在诊断通讯激活DCM_ActiveDiagnostic时可以请求ComM进入FULL COMMUNICATION状态,BswM可以根据用户配置的行为列表请求ComM执行相应通信请求。
⑥ 用户只能请求FULL或者NO COMMUNICATION,SILENT模式及其子状态只是为了同步AUTOSAR NM。