【Mode Management】BswM模块和其他模块的交互

目录

1.BSWM模块和COM模块

2.BSWM模块和ComM模块

3.BSWM模块和CanSM模块

4.BSWM模块和DCM模块

4.1 DCM通过BSWM控制通信

4.2 DCM通过BSWM控制ECU复位

5.BSWM模块和自定义SWC模块

6.BSWM模块和NVM模块

6.1 BswMNvMJobModeIndication

6.2 BswMNvMRequest

6.3 小结


1.BSWM模块和COM模块

I-PDU组的启动/停止状态处理不在AUTOSAR COM模块完成,一般在BSWM模块中处理。当I-PDU组状态发生变化时,管理I-PDU组状态的BSWM模块通过Com_IpduGroupControl将所有I-PDU组的一致状态传递给AUTOSAR COM模块,然后由AUTOSAR COM模块启动和停止单个I-PDU。

【Mode Management】BswM模块和其他模块的交互_第1张图片

【Mode Management】BswM模块和其他模块的交互_第2张图片

BswM是唯一一个控制I-PDU组的启动和停止,以及I-PDU组监视的启用/禁用的模块。一般在BswMActions配置容器下的BswMPduGroupSwtich子配置容器来配置BSW需要控制的IPDU Groups。也就是通过模式管理,当某个逻辑表达式满足后(例如:BswM Mode Start --> BswM Mode Run)调用控制IPUD Group开启的Action(BswM调用Com_IpduGroupControl引用BswMPduGroupSwtich配置容器里的IPDU Group参数来控制这一路CAN上的所有IPUD开启或关闭)。

2.BSWM模块和ComM模块

BSWM模块的BswMModeRequestPorts容器里面可以配置BswMComMIndication的MRP来获取ComM某个Channel的状态(ComM在通道发生切换的时候会调用BswM_ComM_CurrentMode)。

【Mode Management】BswM模块和其他模块的交互_第3张图片

【Mode Management】BswM模块和其他模块的交互_第4张图片

【Mode Management】BswM模块和其他模块的交互_第5张图片

BSWM模块的BswMActions容器里面可以配置BswMComMAllowCom的Action来改变某个Channel的状态。

【Mode Management】BswM模块和其他模块的交互_第6张图片

【Mode Management】BswM模块和其他模块的交互_第7张图片

对于ComM的用户USER(SWC通过RTE)而言,ComM_RequestComMode是唯一影响ComM状态的接口。当ECU需要关闭(Shutdown)当前Channel的时候就需要调用ComM_RequestComMode。

【Mode Management】BswM模块和其他模块的交互_第8张图片

【Mode Management】BswM模块和其他模块的交互_第9张图片

问题1:ComM_RequestComMode(NO_COM)和Com_IpduGroupControl(Can_ChannelID, False)的区别?

1)ComM_RequestComMode(NO_COM)由SWC(USER)调用,SWC调用ComM_RequestComMode(NO_COM)后报文不一定停发,但是最后如果ComM控制的网络(如调用CanSM)关闭后,ECU对外的表现就是报文停发(关闭了收发器,报文发不出去了),但是Com可能还是在尝试往外发报文的。

2)Com_IpduGroupControl(Can_ChannelID, False)由BSWM模块的Action当中调用,也就是BWM仲裁到满足报文停发的条件后,调用Com_IpduGroupControl(Can_ChannelID, False)停发报文(Com_IpduGroupControl-->ComPrv_TxIPduStop),这种情况下ComM可能还是FULL_COMM的,只是Com不往外发报文了而已。

3)

【Mode Management】BswM模块和其他模块的交互_第10张图片

【Mode Management】BswM模块和其他模块的交互_第11张图片

如上图所示:

  1. 通道所在ComM的状态是FULL_COM是报文往外发的必要条件。
  2. 报文停止发送的充要条件中没有ComM的状态是NO_COM。

问题2:ComM其实也就是对CanSM,LinSM,EthSM的分装,为啥需要ComM模块了?

答:ComM分装了CAN,LIN,ETH等通信的物理特性,以一种统一的方式来管理所有的通信通道,对于用户(SWC)而言,只需要关注通道的状态而不需要考虑通道的物理硬件特性。

3.BSWM模块和CanSM模块

BSWM模块的BswMModeRequestPorts容器里面可以配置BswMCanSMIndication的MRP来获取CanSM某个Channel的状态(CanSM在通道发生切换的时候会调用BswM_CanSM_CurrentState)。

【Mode Management】BswM模块和其他模块的交互_第12张图片

【Mode Management】BswM模块和其他模块的交互_第13张图片

【Mode Management】BswM模块和其他模块的交互_第14张图片

4.BSWM模块和DCM模块

4.1 DCM通过BSWM控制通信

BSWM模块的BswMModeRequestPorts容器里面可以配置BswMDcmComModeRequest的MRP来获取Dcm请求某个ComM通道的的通信状态(

DCM_ENABLE_RX_TX_NORM

DCM_ENABLE_RX_DISABLE_TX_NORM

DCM_DISABLE_RX_ENABLE_TX_NORM

DCM_DISABLE_RX_TX_NORMAL

DCM_ENABLE_RX_TX_NM

DCM_ENABLE_RX_DISABLE_TX_NM

DCM_DISABLE_RX_ENABLE_TX_NM

DCM_DISABLE_RX_TX_NM

DCM_ENABLE_RX_TX_NORM_NM

DCM_ENABLE_RX_DISABLE_TX_NORM_NM

DCM_DISABLE_RX_ENABLE_TX_NORM_NM

DCM_DISABLE_RX_TX_NORM_NM )。Dcm在发生通道状态切换的时候会调用BswM_Dcm_CommunicationMode_CurrentState()函数通知到BSWM。BswM获取到这个MRP的信息后回去停/发对应Channel的Ipdu_Group来实现通信的开关。

【Mode Management】BswM模块和其他模块的交互_第15张图片

【Mode Management】BswM模块和其他模块的交互_第16张图片

【Mode Management】BswM模块和其他模块的交互_第17张图片

4.2 DCM通过BSWM控制ECU复位

BSWM中没有特别定义的BswMModeRequestPorts和DCM进行ECU复位(Reset)的交互,而是使用BswMSwcModeNotification的MRP来进行交互。

【Mode Management】BswM模块和其他模块的交互_第18张图片

但是不像SWC中需要自己定义ModeDeclarationGroup及Mode Switch Interface,DCM模块中已经预定好ModeDeclarationGroup及Mode Switch Interface。

【Mode Management】BswM模块和其他模块的交互_第19张图片

【Mode Management】BswM模块和其他模块的交互_第20张图片

【Mode Management】BswM模块和其他模块的交互_第21张图片

在Dcm_Cfg_SWC.arxml中就会有关于DcmEcuReset的Pport的定义描述,在BswM_Cfg_SWC.arxml中有关于DcmEcuReset的R-port的定义描述。

【Mode Management】BswM模块和其他模块的交互_第22张图片

【Mode Management】BswM模块和其他模块的交互_第23张图片

DCM和BswM通过DcmEcuReset这个Interface进行连接后,Dcm中关于ECU Reset复位的请求能过通过RTE传递到BswM模块的MRP作为模式仲裁的条件输入。

【Mode Management】BswM模块和其他模块的交互_第24张图片

5.BSWM模块和自定义SWC模块

SWC模块和BSWM模块的可以通过BswMSwcModeRequest或者BswMSwcModeNotification配置进行交互。

【Mode Management】BswM模块和其他模块的交互_第25张图片

【Mode Management】BswM模块和其他模块的交互_第26张图片

【Mode Management】BswM模块和其他模块的交互_第27张图片

【Mode Management】BswM模块和其他模块的交互_第28张图片

至于二者的用法,在BswM模块详细介绍一文中有详细介绍,简单的概括就是:如果SWC是模式仲裁者和执行者,BSWM仅需要知道当前这个SWC的模式的状态,则使用 BswMSwcModeNotification将模式状态通知到BSWM模块;如果SWC仅仅是模式的请求者,BSWM获得模式请求后执行模式的仲裁和控制,则使用BswMSwcModeRequest。

当我们在BSWM模块配置了BswMSwcModeNotification后,在Components-->Services SW component-->BswM组件下就会生成对应的Mode Switch Port-R-port。

【Mode Management】BswM模块和其他模块的交互_第29张图片

然后我们在SWC的配置当中需要配置对应的Mode Switch Port-P-port,同时在SWC中要定义ModeDeclarationGroup及Mode Switch Interface然后引用定义的ModeDeclarationGroup。

【Mode Management】BswM模块和其他模块的交互_第30张图片

6.BSWM模块和NVM模块

6.1 BswMNvMJobModeIndication

BSWM模块的BswMModeRequestPorts容器里面可以配置BswMNvMJobModeIndication的MRP来获取NVM multiblock job的状态(NVM在multiblock job的状态发生变化得的时候会调用BswM_NvM_CurrentJobMode)。

【Mode Management】BswM模块和其他模块的交互_第31张图片

【Mode Management】BswM模块和其他模块的交互_第32张图片

NVM模块已经预定义了8种multiblock job的状态:

NVM_REQ_OK

NVM_REQ_NOT_OK

NVM_REQ_PENDING

NVM_REQ_INTEGRITY_FAILED

NVM_REQ_BLOCK_SKIPPED

NVM_REQ_NV_INVALIDATED

NVM_REQ_CANCELED

NVM_REQ_REDUNDANCY_FAILED

NVM_REQ_RESTORED_FROM_ROM

【Mode Management】BswM模块和其他模块的交互_第33张图片

6.2 BswMNvMRequest

BSWM模块的BswMModeRequestPorts容器里面可以配置BswMNvMRequest的MRP来获取NVM special block(任意block)的状态(NVM在special block的状态发生变化得的时候会调用BswM_NvM_CurrentBlockMode,NVM的静态代码中没有这个实现,需要在集成Integration代码中实现)。

【Mode Management】BswM模块和其他模块的交互_第34张图片

【Mode Management】BswM模块和其他模块的交互_第35张图片

【Mode Management】BswM模块和其他模块的交互_第36张图片

【Mode Management】BswM模块和其他模块的交互_第37张图片

6.3 小结

BswM模块通过和NVM相关得MRP拿到NVM模块multi block或者special block的状态作为输入,通过模式状态判断及模式逻辑表达式进行仲裁后执行对应的模式Action。一般来讲,ECU下电Shutdown的时候NvMWriteAll完成是一个必要条件;ECU重启/上电的时候NvMReadAll完成是一个必要条件。

你可能感兴趣的:(AUTOSAR基础,AUTOSAR,BswM)