上电:
主动唤醒:
由bswm主动请求ComM_RequestComMode(User, COMM_FULL_COMMUNICATION)以及ComM_CommunicationAllowed从默认COMM_NO_COM_NO_PENDING_REQUEST ->COMM_NO_COM_REQUEST_PENDING ->COMM_FULL_COM_NETWORK_REQUESTED;
ComM_Prv_ChannelMainFunction函数中迁移状态机至
ComM_Prv_FullComNetworkReq_StateHandling请求网络Nm_NetworkRequest,ComM_Prv_RequestBusSm,CanSM_NetworkModeTrans控制controller和cantrcv;
CANSM扮演的角色就是在ComM发起请求后,ComM会轮询等待channelRamPtr_pst->ChannelState_e和当前请求一致,否则会卡在死循环
被动唤醒:
根据ECUM的配置有多种途径,仅介绍其中一种做法,则是通过ComM_EcuM_Wakeupindication通知;
CanTrcv_MainFunction
CanTrcv_MainFunction_SPI
EcuM_SetWakeupEvent
设置事件EcuM_Prv_dataValWkpEventsInd_u32
在EcuM_MainFunction周期轮询中根据事件判断是否为有效唤醒源,
EcuM_Prv_WakeupValidation中
BswM_EcuM_CurrentWakeup 通知BSWM ,在此调用ComM_CommunicationAllowed;
ComM_EcuM_WakeUpIndication 确认CAN Channel唤醒源为被动唤醒ComM_ChannelStruct[X].PassiveRequestState_u8
后续会在ComM_Prv_ChannelMainFunction函数中迁移状态机
COMM_NO_COM_NO_PENDING_REQUEST ->COMM_NO_COM_REQUEST_PENDING ->COMM_FULL_COM_NETWORK_REQUESTED -> COMM_FULL_COM_READY_SLEEP;
调用ComM_Prv_RequestBusSm,CanSM_NetworkModeTrans控制controller和cantrcv,Nm_PassiveStartUp, CanNm_PassiveStartUp至此开始网络;
下电:
参考这个状态机,CANNM先切状态,根据配置timer到期后切入prepare,Nm_PrepareBusSleepMode调用ComM_Nm_PrepareBusSleepMode,等待bus sleep以及CANSM释放后进入COMM_NO_COMMUNICATION,然后BSWM再根据 ComM状态是否进入
COMM_NO_COMMUNICATION选择进入shutdown,关闭pdugroup和NVM_WriteAll,然后状态机流转停止调度器以及1145和SBC下电;