一、ComM
1.1 ComM提供的状态
ComM控制的是各Channel状态管理,提供以下主状态
- COMM_NO_COMMUNICATION
- COMM_FULL_COMMUNICATION
- COMM_SILENT_COMMUNICATION
COMM_NO_COMMUNICATION的两个子状态:
- COMM_NO_COM_NO_PENDING_REQUEST
- COMM_NO_COM_REQUEST_PENDING
COMM_FULL_COMMUNICATION的两个子状态:
- COMM_FULL_COM_NETWORK_REQUESTED
- COMM_FULL_COM_READY_SLEEP
1.2 状态切换:
step1:系统上电后进入COMM_NO_COMMUNICATION
step2:在初始化完成后进入COMM_NO_COM_NO_PENDING_REQUEST,该状态下总线不能进行任何的通信活动,需要等待FULL_COM请求
请求来源:
① user request;
② Dcm Notification需要激活对应的通道ComM_DCM_ActiveDiagnostic(ChX);
③ 来自EcuM或者NM的Passive WakeUp通知;
step3:收到FULL_COM请求后,切换至COMM_NO_COM_REQUEST_PENDING状态,等待Communication Allowed的触发信号,只有 “CommunicationAllowed=TRUE” 才能将通信模式转换为FULL_COM,如果没有Allowed的使能,则FULL_COM请求不会被执行;Allow Communication可以通过函数调用的方式来完成,ComM_CoumunicationAllowed(ChX,Ture),或者通过设置BswM Action来完成,BswMComMAllowCom中的“BswMComMAllowed ”使能
step4:FULL_COM被执行成功后进入COMM_FULL_COMMUNICATION,此状态下可正常通信,
COMM_SILENT_COMMUNICATION,此状态主要是用来支持NM的睡眠流程,只有NM进入Prepare Sleep阶段,才进入静默通信状态。
二、CanSM
1.1 CanSM提供的状态
CanSM切换的是总线模式,下层模块为CanIf,调用CanIf提供的接口对can控制器和can收发器的模式进行切换,详细状态及子状态见《CAN State Manager Module》
Autosar的分层架构上看,user向ComM请求通信,而真正干活的是NM和CanSM,ComM就是将用户的请求传达给NM和CanSM模块
三、NM
网络状态管理,详细见前面文章: