CanSM
1. 简介和功能概述¶
本规范描述AUTOSAR基本软件模块CAN状态管理器(CAN State Manager)的功能、API和配置。
AUTOSAR BSW堆栈为每种通信总线规定了一个总线特定的状态管理器。该模块应实现相应总线的控制流。如下图所示,CAN状态管理器(CanSM)是通信服务层(Communication Service Layer)的成员。它与通信硬件抽象层和系统服务层交互。
图1.1:从CanSM角度看的分层软件架构(Layered Software Architecture from CanSM point of view)

2. 缩略语¶
下面的词汇表包含与CAN状态管理器模块相关、但未包含在[1, AUTOSAR 术语表]中的缩略语和缩写。
表2.1:本文档范围内使用的缩略语和缩写(Acronyms and abbreviations used in the scope of this Document)
API
应用程序接口(Application Program Interface)。
BSW
基础软件(Basic Software)。
CAN
控制器局域网(Controller Area Network)。
CanIf
CAN接口(CAN Interface)。
CanSM
CAN状态管理器(CAN State Manager)。
ComM
通信管理器(Communication Manager)。
DEM
诊断事件管理器(Diagnostic Event Manager)。
DET
默认错误跟踪器(Default Error Tracer)。
EcuM
ECU状态管理器(ECU State Manager)。
PDU
协议数据单元(Protocol Data Unit)。
RX
接收(Receive)。
TX
发送(Transmit)。
SchM
BSW调度器(BSW Scheduler)。
SWC
软件组件(Software Component)。
BswM
基础软件模式管理器(Basic Software Mode Manager)。
3. 相关文档¶
3.1. 输入文件和相关标准与规范¶
- [1] AUTOSAR 术语表 AUTOSAR_FO_TR_Glossary
- [2] 基本软件模块通用规范 AUTOSAR_CP_SWS_BSWGeneral
- [3] ECU状态管理器规范 AUTOSAR_CP_SWS_ECUStateManager
- [4] RTE软件规范 AUTOSAR_CP_SWS_RTE
- [5] 通信管理器规范 AUTOSAR_CP_SWS_COMManager
- [6] CAN接口规范 AUTOSAR_CP_SWS_CANInterface
- [7] 诊断事件管理器规范 AUTOSAR_CP_SWS_DiagnosticEventManager
- [8] 基础软件模式管理器规范 AUTOSAR_CP_SWS_BSWModeManager
- [9] CAN网络管理规范 AUTOSAR_CP_SWS_CANNetworkManagement
- [10] 默认错误跟踪器规范 AUTOSAR_CP_SWS_DefaultErrorTracer
- [11] CAN收发器驱动程序规范 AUTOSAR_CP_SWS_CANTransceiverDriver
- [12] 基本软件模块的通用需求 AUTOSAR_CP_SRS_BSWGeneral
3.2. 相关规范¶
AUTOSAR提供了基本软件模块的通用规范[2, SWS BSW General],它对CAN状态管理器同样有效。
因此,规范SWS BSW General应被视为CAN状态管理器的附加且必需的规范。
4. 约束和假设¶
4.1. 限制¶
CanSM模块只能用于CAN通信。它的任务是与CanIf模块协作,以控制一个或多个下层CAN控制器和CAN收发器驱动程序。不支持CAN以外的其他协议(即LIN或FlexRay)。
4.2. 汽车域的适用性¶
只要使用CAN协议,CAN状态管理器模块就可用于所有域的应用。
5. 对其他模块的依赖¶
以下各节简要描述CanSM模块需要从其他模块获得的配置信息和服务。
图5.1:CanSM模块的模块依赖关系(Module dependencies of the CanSM module)

5.1. ECU状态管理器(EcuM)¶
EcuM模块初始化CanSM模块,并为CAN唤醒验证与CanSM模块交互(该模块的详细规范参见[3, Specification of ECU State Manager])。
5.2. BSW调度器(SchM,RTE的一部分)¶
BSW调度器模块调用CanSM模块的主函数,这是CanSM模块周期性过程所必需的。该模块的详细规范参见[4, Specification of RTE Software]。
5.3. 通信管理器(ComM)¶
ComM模块使用CanSM模块的API来请求CAN网络的通信模式,CAN网络用唯一的网络句柄标识(该模块的详细规范参见[5, Specification of Communication Manager])。
CanSM模块向ComM模块通知其CAN网络的当前通信模式。
5.4. CAN接口(CanIf)¶
CanSM模块使用CanIf模块的API来控制分配给CAN网络的CAN控制器和CAN收发器的操作模式(该模块的详细规范参见[6, Specification of CAN Interface])。
CanIf模块向CanSM模块通知外设事件。
5.5. 诊断事件管理器(DEM)¶
CanSM模块向DEM模块报告总线特定的生产错误(该模块的详细规范参见[7, Specification of Diagnostic Event Manager])。
5.6. 基础软件模式管理器(BswM)¶
CanSM需要向BswM模块通知总线特定的模式变更(该模块的详细规范参见[8, Specification of Basic Software Mode Manager])。
5.7. CAN网络管理(CanNm)¶
CanSM模块需要向CanNm模块通知部分网络的可用性,并在部分网络的情况下处理通知的CanNm超时异常(该模块的详细规范参见[9, Specification of CAN Network Management])。
5.8. 默认错误跟踪器(DET)¶
CanSM模块向DET模块报告开发错误和运行时错误。只有当开发错误处理通过配置开启时才报告开发错误(该模块的详细规范参见[10, Specification of Default Error Tracer])。
5.9. 文件结构¶
5.9.1. 代码文件结构¶
详情请参阅[2, SWS BSW General]第5.1.6章「代码文件结构」(Code file structure)。
5.9.2. 头文件结构¶
头文件CanSM.h应导出CanSM模块特定的类型以及API CanSM_GetVersionInfo和CanSM_Init。
5.9.3. 版本检查¶
详情请参阅[2, SWS BSW General]第5.1.8章「版本检查」(Version Check)。
6. 功能规格¶
本章规定AUTOSAR BSW架构中CanSM模块的不同功能。
一个ECU可以拥有不同的通信网络。每个网络必须用唯一的网络句柄标识。ComM模块向网络请求通信模式。它通过其配置知道哪个句柄被分配给哪种网络。对于CAN,它使用CanSM模块。
CanSM模块负责CAN网络的控制流抽象:
它根据来自ComM模块的模式请求更改已配置CAN网络的通信模式。
因此,CanSM模块使用CanIf模块的API。CanIf模块负责已配置CAN控制器和CAN收发器的控制流抽象(CanIf模块的数据流抽象与CanSM模块无关)。CAN控制器模式和CAN收发器模式的任何变更都将由CanIf模块通知给CanSM模块。根据这些通知和CanSM模块应为每个已配置CAN网络实现的CAN网络状态机的状态,CanSM模块向ComM和BswM发出通知(详情参见第6.2节)。
注意:
CanSM模块在初始化之后不会向ComM通知其通信模式,除非ComM已显式请求了某个通信模式。
6.1. 通用需求¶
图7.1:CANSM_BSM,一个CAN网络的状态机图(CANSM_BSM, state machine diagram for one CAN network)

CanSM模块应在内部为每个已配置的CAN网络存储当前网络模式(参见[ECUC_CanSM_00126])。
CanSM模块内部存储的网络模式可以取值COMM_NO_COMMUNICATION、COMM_SILENT_COMMUNICATION、COMM_FULL_COMMUNICATION。
CanSM状态机CANSM_BSM的所有效果(effects)应在CanSM主函数的上下文中操作(参见SWS_CanSM_00065)。
如果CanSM状态机CANSM_BSM处于状态CANSM_BSM_S_NOT_INITIALIZED,则它应拒绝来自ComM模块的网络模式请求(参见SWS_CanSM_00062)。
如果CanSM重复CanIf API调用CanIf_SetControllerMode(参见SWS_CanSM_91002)、CanIf_SetTrcvMode(参见SWS_CanSM_91002)、CanIf_ClearTrcvWufFlag(参见SWS_CanSM_91002)或CanIf_CheckTrcvWakeFlag(参见SWS_CanSM_91002)的次数超过了CanSMModeRequestRepetitionMax(参见[ECUC_CanSM_00335]),而没有得到返回值E_OK或没有得到相应的模式指示回调CanSM_ControllerModeIndication、CanSM_TransceiverModeIndication、CanSM_ClearTrcvWufFlagIndication或CanSM_CheckTransceiverWakeFlagIndication,则CanSM应以ErrorId参数CANSM_E_MODE_REQUEST_TIMEOUT调用函数Det_ReportRuntimeError(参见SWS_CanSM_91002)。
如果CanIf模块以回调函数CanSM_ConfirmPnAvailability(参见SWS_CanSM_00419)向CanSM模块通知某个已配置CAN收发器的PN可用性,则CanSM模块应以相关CAN网络作为通道调用API CanNm_ConfirmPnAvailability(参见SWS_CanSM_91002),以向CanNm模块确认PN可用性。
如果CanIf模块以回调函数CanSM_ConfirmCtrlPnAvailability(参见SWS_CanSM_91004)向CanSM模块通知某个已配置CAN控制器的PN可用性,则CanSM模块应以相关CAN网络作为通道调用API CanNm_ConfirmPnAvailability(参见SWS_CanSM_91002),以向CanNm模块确认PN可用性。
如果没有为某个CAN网络配置CanSMTransceiverId(参见[ECUC_CanSM_00137]),则CanSM模块应绕过为该CAN网络规定的所有CanIf_SetTrcvMode(参见SWS_CanSM_91002)调用(例如[SWS_CanSM_00446]),并在不同的状态迁移中按已经收到了假定的CanSM_TransceiverModeIndication那样继续(例如[SWS_CanSM_00448])。
CanSM模块应为每个已配置的CAN网络(参见[ECUC_CanSM_00126])存储已被CanSM_RequestComMode(参见[SWS_CanSM_00062]、[SWS_CanSM_00182])以返回E_OK接受的最新通信模式请求,并将其用作相关CAN网络状态机的触发([SWS_CanSM_00427]、[SWS_CanSM_00429]、[SWS_CanSM_00499]、[SWS_CanSM_00542]、[SWS_CanSM_00543]、[SWS_CanSM_00425]、[SWS_CanSM_00426])。
CanSM模块应在每次成功的CAN控制器模式变更(参见SWS_CanSM_00396)或总线关闭导致变更为CAN_CS_STOPPED(参见SWS_CanSM_00064)之后,在内部为每个CAN控制器存储变更后的模式。
6.2. 每个CAN网络的状态机¶
图(参见图7.1)规定了CanSM模块的行为状态机,它应为每个已配置的CAN网络(参见[ECUC_CanSM_00126])实现。
6.2.1. 触发:PowerOn¶
上电(PowerOn)之后,CanSM状态机应处于状态CANSM_BSM_NOT_INITIALIZED。
6.2.2. 触发:CanSM_Init¶
如果CanSM模块被以函数CanSM_Init请求,这应以触发CanSM_Init触发所有已配置CAN网络(参见[ECUC_CanSM_00126])的CanSM状态机。
6.2.3. 触发:CanSM_DeInit¶
如果CanSM模块被以函数CanSM_DeInit请求,这应以触发CanSM_DeInit触发所有已配置CAN网络(参见[ECUC_CanSM_00126])的CanSM状态机。
注意:CanSM_DeInit函数的调用者必须确保所有CAN网络都处于状态CANSM_NO_COMMUNICATION。
6.2.4. 触发:T_START_WAKEUP_SOURCE¶
如果API请求CanSM_StartWakeupSource(参见SWS_CanSM_00609)返回E_OK(参见SWS_CanSM_00616),则应以T_START_WAKEUP_SOURCE触发状态机。
6.2.5. 触发:T_STOP_WAKEUP_SOURCE¶
如果API请求CanSM_StopWakeupSource(参见SWS_CanSM_00610)返回E_OK(参见SWS_CanSM_00622),则应以T_STOP_WAKEUP_SOURCE触发状态机。
6.2.6. 触发:T_FULL_COM_MODE_REQUEST¶
ComM_Mode参数等于COMM_FULL_COMMUNICATION的API请求CanSM_RequestComMode(参见SWS_CanSM_00635),在函数参数network与配置参数CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])匹配的情况下,应以T_FULL_COM_MODE_REQUEST触发状态机。
6.2.7. 触发:T_SILENT_COM_MODE_REQUEST¶
ComM_Mode参数等于COMM_SILENT_COMMUNICATION的API请求CanSM_RequestComMode(参见SWS_CanSM_00635),在函数参数network与配置参数CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])对应的情况下,应以T_SILENT_COM_MODE_REQUEST触发子状态机CANSM_BSM_S_FULLCOM。
理由:从CanNm网络模式到CanNm Prepare Bus-Sleep模式的常规用例。
6.2.8. 触发:T_NO_COM_MODE_REQUEST¶
ComM_Mode参数等于COMM_NO_COMMUNICATION的API请求CanSM_RequestComMode(参见SWS_CanSM_00635),在函数参数network与配置参数CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])匹配的情况下,应以T_NO_COM_MODE_REQUEST触发状态机。
备注:根据ComM的配置,ComM模块将先请求COMM_SILENT_COMMUNICATION再请求COMM_NO_COMMUNICATION,或者直接请求COMM_NO_COMMUNICATION(ComMNmVariant=LIGHT)。
6.2.9. 触发:T_BUS_OFF¶
回调函数CanSM_ControllerBusOff(参见SWS_CanSM_00064)在其某个已配置CAN控制器与回调函数CanSM_ControllerBusOff的函数参数ControllerId匹配的情况下,应以T_BUS_OFF触发该CAN网络的CANSM_BSM状态机。
6.2.10. 守护条件:G_FULL_COM_MODE_REQUESTED¶
CANSM_BSM状态机的守护条件(guarding condition)G_FULL_COM_MODE_REQUESTED应评估:用CanSM_RequestComMode(参见SWS_CanSM_00635)为该状态机的相应网络句柄发出的、被接受的最新通信模式请求,其ComM_Mode参数是否等于COMM_FULL_COMMUNICATION。
6.2.11. 守护条件:G_SILENT_COM_MODE_REQUESTED¶
CANSM_BSM状态机的守护条件G_SILENT_COM_MODE_REQUESTED应评估:用CanSM_RequestComMode(参见SWS_CanSM_00635)为该状态机的相应网络句柄发出的、被接受的最新通信模式请求,其ComM_Mode参数是否等于COMM_SILENT_COMMUNICATION。
6.2.12. 效果:E_PRE_NOCOM¶
CANSM_BSM状态机的效果E_PRE_NOCOM应为相应的CAN网络调用API BswM_CanSM_CurrentState(参见SWS_CanSM_91002),参数为Network := CanSMComMNetworkHandleRef、CurrentState := CANSM_BSWM_NO_COMMUNICATION。
6.2.13. 效果:E_NOCOM¶
CANSM_BSM状态机的效果E_NOCOM应将被寻址CAN网络的内部存储网络模式(参见SWS_CanSM_00266)更改为COMM_NO_COMMUNICATION。
如果该网络的通信模式请求已经存在(参见SWS_CanSM_00635)且存储的通信模式请求为COMM_NO_COMMUNICATION,则CANSM_BSM状态机的效果E_NOCOM应以参数Channel := CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])、ComMode := COMM_NO_COMMUNICATION调用API ComM_BusSM_ModeIndication(参见SWS_CanSM_91002)。
6.2.14. 效果:E_FULL_COM¶
如果ECU passive为FALSE(参见SWS_CanSM_00646),则CANSM_BSM状态机的效果E_FULL_COM应首先为该CAN网络的每个已配置CAN控制器调用API CanIf_SetPduMode(参见SWS_CanSM_91002),参数为ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_ONLINE。
如果ECU passive为TRUE(参见SWS_CanSM_00646),则CANSM_BSM状态机的效果E_FULL_COM应首先为该CAN网络的每个已配置CAN控制器调用API CanIf_SetPduMode(参见SWS_CanSM_91002),参数为ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_TX_OFFLINE_ACTIVE。
在效果E_FULL_COM的上下文中考虑了[SWS_CanSM_00539]和[SWS_CanSM_00647]之后,CanSM模块应为相应的CAN网络调用API ComM_BusSM_ModeIndication(参见SWS_CanSM_91002),参数为Channel := CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])、ComMode := COMM_FULL_COMMUNICATION。
在效果E_FULL_COM的上下文中考虑了[SWS_CanSM_00435]之后,CanSM模块应为相应的CAN网络调用API BswM_CanSM_CurrentState(参见SWS_CanSM_91002),参数为Network := CanSMComMNetworkHandleRef、CurrentState := CANSM_BSWM_FULL_COMMUNICATION。
6.2.15. 效果:E_FULL_TO_SILENT_COM¶
CANSM_BSM状态机的效果E_FULL_TO_SILENT_COM应首先为相应的CAN网络调用API BswM_CanSM_CurrentState(参见SWS_CanSM_91002),参数为Network := CanSMComMNetworkHandleRef、CurrentState := CANSM_BSWM_SILENT_COMMUNICATION。
CANSM_BSM状态机的效果E_FULL_TO_SILENT_COM应第二为该CAN网络的每个已配置CAN控制器调用API CanIf_SetPduMode(参见SWS_CanSM_91002),参数为ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_TX_OFFLINE。
CANSM_BSM状态机的效果E_FULL_TO_SILENT_COM应第三为相应的CAN网络调用API ComM_BusSM_ModeIndication(参见SWS_CanSM_91002),参数为Channel := CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])、ComMode := COMM_SILENT_COMMUNICATION。
6.2.16. 效果:E_BR_END_FULL_COM¶
CANSM_BSM状态机的效果E_BR_END_FULL_COM应与E_FULL_COM相同。
6.2.17. 效果:E_BR_END_SILENT_COM¶
CANSM_BSM状态机的效果E_BR_END_SILENT_COM应与E_FULL_TO_SILENT_COM相同。
6.2.18. 效果:E_SILENT_TO_FULL_COM¶
CANSM_BSM状态机的效果E_SILENT_TO_FULL_COM应与E_FULL_COM相同。
6.2.19. 子状态机 CANSM_BSM_WUVALIDATION¶
图7.2:CANSM_BSM_WUVALIDATION,CANSM_BSM的子状态机(CANSM_BSM_WUVALIDATION)

6.2.19.1. 状态操作:S_TRCV_NORMAL¶
如果为该CAN网络配置了CAN收发器(参见[ECUC_CanSM_00137]),则只要子状态机CANSM_BSM_WUVALIDATION处于状态S_TRCV_NORMAL,CanSM模块就应操作do动作DO_SET_TRCV_MODE_NORMAL,因此为该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])重复API请求CanIf_SetTrcvMode(参见SWS_CanSM_91002),TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。
6.2.19.2. 守护条件 G_TRCV_NORMAL_E_OK¶
子状态机CANSM_BSM_WUVALIDATION的守护条件G_TRCV_NORMAL_E_OK应在[SWS_CanSM_00483]的API调用返回E_OK时通过。
6.2.19.3. 触发:T_TRCV_NORMAL_INDICATED¶
如果CanSM模块在相应请求(参见SWS_CanSM_00623)之后收到了该CAN网络已配置CAN收发器(参见[ECUC_CanSM_00137])的CANTRCV_TRCVMODE_NORMAL模式指示(参见SWS_CanSM_00399),这应以T_TRCV_NORMAL_INDICATED触发该CAN网络的子状态机CANSM_BSM_WUVALIDATION。
6.2.19.4. 触发:T_TRCV_NORMAL_TIMEOUT¶
在假定的收发器normal指示(参见SWS_CanSM_00625)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_WUVALIDATION。
6.2.19.5. 状态操作:S_CC_STOPPED¶
只要子状态机CANSM_BSM_WUVALIDATION处于状态S_CC_STOPPED,CanSM模块就应操作do动作DO_SET_CC_MODE_STOPPED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STOPPED。
6.2.19.6. 守护条件:G_CC_STOPPED_OK¶
子状态机CANSM_BSM_WUVALIDATION的守护条件G_CC_STOPPED_OK应在[SWS_CanSM_00627]的所有API调用都返回E_OK时通过。
6.2.19.7. 触发:T_CC_STOPPED_INDICATED¶
如果CanSM模块在为停止该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00627)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STOPPED_INDICATED触发该CAN网络的子状态机CANSM_BSM_WUVALIDATION。
6.2.19.8. 触发:T_CC_STOPPED_TIMEOUT¶
在所有假定的控制器stopped模式指示(参见SWS_CanSM_00629)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_WUVALIDATION。
6.2.19.9. 状态操作:S_CC_STARTED¶
只要子状态机CANSM_BSM_WUVALIDATION处于状态S_CC_STARTED,CanSM模块就应操作do动作DO_SET_CC_MODE_STARTED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode,ControllerMode等于CAN_CS_STARTED。
6.2.19.10. 守护条件:G_CC_STARTED_E_OK¶
子状态机CANSM_BSM_WUVALIDATION的守护条件G_CC_STARTED_OK应在[SWS_CanSM_00631]的所有API调用都返回E_OK时通过。
6.2.19.11. 触发:T_CC_STARTED_INDICATED¶
如果CanSM模块在为启动该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00631)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STARTED_INDICATED触发该CAN网络的子状态机CANSM_BSM_WUVALIDATION。
6.2.19.12. 触发:T_CC_STARTED_TIMEOUT¶
在所有假定的控制器started模式指示(参见SWS_CanSM_00633)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STARTED_TIMEOUT触发相应网络的子状态机CANSM_BSM_WUVALIDATION。
6.2.20. 子状态机:CANSM_BSM_S_PRE_NOCOM¶
图7.3:CANSM_BSM_S_PRE_NOCOM,CANSM_BSM的子状态机(CANSM_BSM_S_PRE_NOCOM)

6.2.20.1. 守护条件:CANSM_BSM_G_PN_NOT_SUPPORTED¶
子状态机CANSM_BSM_S_PRE_NO_COM的守护条件CANSM_BSM_G_PN_NOT_SUPPORTED应评估:配置参数CanTrcvPnEnabled(参见[11, ECUC_CanTrcv_00172])是否为FALSE(经由引用CanSMTransceiverId(参见[ECUC_CanSM_00137])可用),或者是否完全没有配置CanSMTransceiverId。
6.2.20.2. 守护条件:CANSM_BSM_G_PN_SUPPORTED¶
子状态机CANSM_BSM_S_PRE_NO_COM的守护条件CANSM_BSM_G_PN_SUPPORTED应评估:是否配置了CanSMTransceiverId(参见[ECUC_CanSM_00137]),并且配置参数CanTrcvPnEnabled(参见[11, ECUC_CanTrcv_00172])是否为TRUE(经由引用CanSMTransceiverId(参见[ECUC_CanSM_00137])可用)。
6.2.20.3. 子状态机:CANSM_BSM_DeinitPnSupported¶
图7.4:CANSM_BSM_DeinitPnSupported,CANSM_BSM_S_PRE_NOCOM的子状态机(CANSM_BSM_DeinitPnSupported)

6.2.20.3.1. 状态操作:S_PN_CLEAR_WUF¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_PN_CLEAR_WUF,CanSM模块就操作do动作DO_CLEAR_TRCV_WUF,因此重复API请求CanIf_ClearTrcvWufFlag,并使用已配置的收发器(参见[ECUC_CanSM_00137])作为API函数参数。
6.2.20.3.2. 守护条件:G_PN_CLEAR_WUF_E_OK¶
子状态机CANSM_BSM_DeinitPnSupported的守护条件G_PN_CLEAR_WUF_E_OK应在[SWS_CanSM_00438]的API调用返回E_OK时通过。
6.2.20.3.3. 触发:T_CLEAR_WUF_INDICATED¶
回调函数CanSM_ClearTrcvWufFlagIndication(参见SWS_CanSM_00413)在其函数参数Transceiver与该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])匹配的情况下,应以T_CLEAR_WUF_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.4. 触发:T_CLEAR_WUF_TIMEOUT¶
在回调函数CanSM_ClearTrcvWufFlagIndication(参见SWS_CanSM_00440)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CLEAR_WUF_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.5. 状态操作:S_CC_STOPPED¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CC_STOPPED,CanSM模块就应操作do动作DO_SET_CC_MODE_STOPPED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode,ControllerMode等于CAN_CS_STOPPED。
6.2.20.3.6. 守护条件:G_CC_STOPPED_E_OK¶
子状态机CANSM_BSM_DeinitPnSupported的守护条件G_CC_STOPPED_E_OK应在[SWS_CanSM_00441]的所有API调用都返回E_OK时通过。
6.2.20.3.7. 触发:T_CC_STOPPED_INDICATED¶
如果CanSM模块在为停止该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00442)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STOPPED_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.8. 触发:T_CC_STOPPED_TIMEOUT¶
在所有假定的控制器stopped模式指示(参见SWS_CanSM_00444)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.9. 状态操作:S_TRCV_NORMAL¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_TRCV_NORMAL,CanSM模块就应操作do动作DO_SET_TRCV_MODE_NORMAL,因此为该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])重复API请求CanIf_SetTrcvMode(参见SWS_CanSM_91002),TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。
6.2.20.3.10. 守护条件:G_TRCV_NORMAL_E_OK¶
子状态机CANSM_BSM_DeinitPnSupported的守护条件G_TRCV_NORMAL_E_OK应在[SWS_CanSM_00446]的API调用返回E_OK时通过。
6.2.20.3.11. 触发:T_TRCV_NORMAL_INDICATED¶
如果CanSM模块在相应请求(参见SWS_CanSM_00446)之后收到了该CAN网络已配置CAN收发器(参见[ECUC_CanSM_00137])的CANTRCV_TRCVMODE_NORMAL模式指示(参见SWS_CanSM_00399),这应以T_TRCV_NORMAL_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.12. 触发:T_TRCV_NORMAL_TIMEOUT¶
在假定的收发器normal指示(参见SWS_CanSM_00448)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.13. 状态操作:S_TRCV_STANDBY¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_TRCV_STANDBY,CanSM模块就应操作do动作DO_SET_TRCV_STANDBY,因此为该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])重复API请求CanIf_SetTrcvMode(参见SWS_CanSM_91002),TransceiverMode等于CANTRCV_TRCVMODE_STANDBY。
6.2.20.3.14. 守护条件:G_TRCV_STANDBY_E_OK¶
子状态机CANSM_BSM_DeinitPnSupported的守护条件G_TRCV_STANDBY_E_OK应在[SWS_CanSM_00450]的API调用返回E_OK时通过。
6.2.20.3.15. 触发:T_TRCV_STANDBY_INDICATED¶
如果CanSM模块在相应请求(参见SWS_CanSM_00450)之后收到了该CAN网络已配置CAN收发器(参见[ECUC_CanSM_00137])的CANTRCV_TRCVMODE_STANDBY模式指示(参见SWS_CanSM_00399),这应以T_TRCV_STANDBY_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.16. 触发:T_TRCV_STANDBY_TIMEOUT¶
在假定的收发器standby指示(参见SWS_CanSM_00452)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_TRCV_STANDBY_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.17. 状态操作:S_CC_SLEEP¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CC_SLEEP,CanSM模块就应操作do动作DO_SET_CC_MODE_SLEEP,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_SLEEP。
6.2.20.3.18. 守护条件:G_CC_SLEEP_E_OK¶
子状态机CANSM_BSM_DeinitPnSupported的守护条件G_CC_SLEEP_E_OK应在[SWS_CanSM_00453]的所有API调用都返回E_OK时通过。
6.2.20.3.19. 触发:T_CC_SLEEP_INDICATED¶
如果CanSM模块在为将该CAN网络的CAN控制器设置为睡眠模式而发出的相应请求(参见SWS_CanSM_00453)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_SLEEP_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.20. 触发:CANSM_BSM_T_CC_SLEEP_TIMEOUT¶
在所有假定的控制器sleep模式指示(参见SWS_CanSM_00456)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以CANSM_BSM_T_CC_SLEEP_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported(参见图7-4)。
6.2.20.3.21. 状态操作:S_CHECK_WFLAG_IN_CC_SLEEP¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CHECK_WFLAG_IN_CC_SLEEP,CanSM模块就操作do动作DO_CHECK_WFLAG,因此重复API请求CanIf_CheckTrcvWakeFlag(参见SWS_CanSM_91002),并使用相关网络(参见[ECUC_CanSM_00137])的已配置CAN收发器作为Transceiver参数。
6.2.20.3.22. 守护条件:G_CHECK_WFLAG_E_OK¶
子状态机CANSM_BSM_DeinitPnSupported的守护条件G_CHECK_WFLAG_E_OK应在[SWS_CanSM_00458]或[SWS_CanSM_00462]的API调用返回E_OK时通过。
6.2.20.3.23. 触发:T_CHECK_WFLAG_INDICATED¶
回调函数CanSM_CheckTransceiverWakeFlagIndication(参见SWS_CanSM_00416)在其函数参数Transceiver与该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])匹配的情况下,应以T_CHECK_WFLAG_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.24. 触发:T_CHECK_WFLAG_TIMEOUT¶
在回调函数CanSM_CheckTransceiverWakeFlagIndication(参见SWS_CanSM_00460)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CHECK_WFLAG_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnSupported。
6.2.20.3.25. 状态操作:S_CHECK_WFLAG_IN_NOT_CC_SLEEP¶
只要子状态机CANSM_BSM_DeinitPnSupported处于状态S_CHECK_WFLAG_IN_NOT_CC_SLEEP,CanSM模块就操作do动作DO_CHECK_WFLAG,因此重复API请求CanIf_CheckTrcvWakeFlag(参见SWS_CanSM_91002),并使用相关网络(参见[ECUC_CanSM_00137])的已配置CAN收发器作为Transceiver参数。
6.2.20.4. 子状态机:CANSM_BSM_DeinitPnNotSupported¶
图7.5:CANSM_BSM_DeinitPnNotSupported,CANSM_BSM_S_PRE_NOCOM的子状态机(CANSM_BSM_DeinitPnNotSupported)

6.2.20.4.1. 状态操作:S_CC_STOPPED¶
只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_CC_STOPPED,CanSM模块就应操作do动作DO_SET_CC_MODE_STOPPED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STOPPED。
6.2.20.4.2. 守护条件:CANSM_BSM_G_CC_STOPPED_OK¶
子状态机CANSM_BSM_DeinitPnNotSupported的守护条件CANSM_BSM__CC_STOPPED_OK应在[SWS_CanSM_00464]的所有API调用都返回E_OK时通过。
6.2.20.4.3. 触发:T_CC_STOPPED_INDICATED¶
如果CanSM模块在为停止该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00464)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STOPPED_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.4. 触发:T_CC_STOPPED_TIMEOUT¶
在所有假定的控制器stopped模式指示(参见SWS_CanSM_00466)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.5. 状态操作:S_CC_SLEEP¶
只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_CC_SLEEP,CanSM模块就应操作do动作DO_SET_CC_MODE_SLEEP,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_SLEEP。
6.2.20.4.6. 守护条件:G_CC_SLEEP_E_OK¶
子状态机CANSM_BSM_DeinitPnNotSupported的守护条件G_CC_SLEEP_E_OK应在[SWS_CanSM_00468]的所有API调用都返回E_OK时通过。
6.2.20.4.7. 触发:T_CC_SLEEP_INDICATED¶
如果CanSM模块在为将该CAN网络的CAN控制器设置为睡眠模式而发出的相应请求(参见SWS_CanSM_00468)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_SLEEP_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.8. 触发:T_CC_SLEEP_TIMEOUT¶
在所有假定的控制器sleep模式指示(参见SWS_CanSM_00470)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_SLEEP_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.9. 状态操作:S_TRCV_NORMAL¶
如果为该CAN网络配置了CAN收发器(参见[ECUC_CanSM_00137]),则只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_TRCV_NORMAL,CanSM模块就应操作do动作DO_SET_TRCV_MODE_NORMAL,因此为该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])重复API请求CanIf_SetTrcvMode(参见SWS_CanSM_91002),TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。
6.2.20.4.10. 守护条件:G_TRCV_NORMAL_E_OK¶
子状态机CANSM_BSM_DeinitPnNotSupported的守护条件G_TRCV_NORMAL_E_OK应在[SWS_CanSM_00472]的API调用返回E_OK时通过。
6.2.20.4.11. 触发:T_TRCV_NORMAL_INDICATED¶
如果CanSM模块在相应请求(参见SWS_CanSM_00472)之后收到了该CAN网络已配置CAN收发器(参见[ECUC_CanSM_00137])的CANTRCV_TRCVMODE_NORMAL模式指示(参见SWS_CanSM_00399),这应以T_TRCV_NORMAL_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。
如果没有为该CAN网络配置CAN收发器,则这应以T_TRCV_NORMAL_INDICATED触发该CAN网络处于状态S_TRCV_NORMAL的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.12. 触发:T_TRCV_NORMAL_TIMEOUT¶
在假定的收发器normal指示(参见SWS_CanSM_00474)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.13. 状态操作:S_TRCV_STANDBY¶
如果为该CAN网络配置了CAN收发器(参见[ECUC_CanSM_00137]),则只要子状态机CANSM_BSM_DeinitPnNotSupported处于状态S_TRCV_STANDBY,CanSM模块就应操作do动作DO_SET_TRCV_MODE_STANDBY,因此为该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])重复API请求CanIf_SetTrcvMode(参见SWS_CanSM_91002),TransceiverMode等于CANTRCV_TRCVMODE_STANDBY。
6.2.20.4.14. 守护条件:G_TRCV_STANDBY_E_OK¶
子状态机CANSM_BSM_DeinitPnNotSupported的守护条件G_TRCV_STANDBY_E_OK应在[SWS_CanSM_00476]的API调用返回E_OK时通过。
6.2.20.4.15. 触发:T_TRCV_STANDBY_INDICATED¶
如果CanSM模块在相应请求(参见SWS_CanSM_00476)之后收到了该CAN网络已配置CAN收发器(参见[ECUC_CanSM_00137])的CANTRCV_TRCVMODE_STANDBY模式指示(参见SWS_CanSM_00399),这应以T_TRCV_STANDBY_INDICATED触发该CAN网络的子状态机CANSM_BSM_DeinitPnNotSupported。
如果没有为该CAN网络(参见[ECUC_CanSM_00137])配置CAN收发器,则这应以T_TRCV_STANDBY_INDICATED触发该CAN网络处于状态S_TRCV_STANDBY的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.20.4.16. 触发:CANSM_BSM_T_TRCV_STANDBY_TIMEOUT¶
在假定的收发器standby指示(参见SWS_CanSM_00478)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以CANSM_BSM_T_TRCV_STANDBY_TIMEOUT触发相应网络的子状态机CANSM_BSM_DeinitPnNotSupported。
6.2.21. 子状态机:CANSM_BSM_S_SILENTCOM_BOR¶
图7.6:CANSM_BSM_S_SILENTCOM_BOR,CANSM_BSM的子状态机(CANSM_BSM_S_SILENTCOM_BOR)

6.2.21.1. 效果:E_BUS_OFF¶
子状态机CANSM_BSM_S_SILENTCOM_BOR的效果E_BUS_OFF应以参数EventId := CANSM_E_BUS_OFF(参见[ECUC_CanSM_00070])、EventStatus := DEM_EVENT_STATUS_PRE_FAILED调用Dem_SetEventStatus(参见SWS_CanSM_91002)。
6.2.21.2. 状态操作:S_RESTART_CC¶
只要子状态机CANSM_BSM_S_SILENTCOM_BOR处于状态S_RESTART_CC,CanSM模块就应操作do动作DO_SET_CC_MODE_STARTED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STARTED。
6.2.21.3. 守护条件 G_RESTART_CC_E_OK¶
子状态机CANSM_BSM_S_SILENTCOM_BOR的守护条件G_RESTART_CC_OK应在[SWS_CanSM_00604]的所有API调用都返回E_OK时通过。
6.2.21.4. 触发:T_RESTART_CC_INDICATED¶
如果CanSM模块在为启动该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00604)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_RESTART_CC_INDICATED触发该CAN网络的子状态CANSM_BSM_S_SILENTCOM_BOR。
6.2.21.5. 触发 T_RESTART_CC_TIMEOUT¶
在所有假定的控制器started模式指示(参见SWS_CanSM_00600)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_RESTART_CC_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_SILENTCOM_BOR。
6.2.21.6. 效果:E_TX_OFF¶
效果E_TX_OFF不做任何事(CAN控制器重启之后的默认PDU模式已经是TX OFF,参见CanIf SWS)。
6.2.22. 子状态机:CANSM_BSM_S_PRE_FULLCOM¶
图7.7:CANSM_BSM_S_PRE_FULLCOM,CANSM_BSM的子状态机(CANSM_BSM_S_PRE_FULLCOM)

6.2.22.1. 状态操作:S_TRCV_NORMAL¶
如果为该CAN网络配置了CAN收发器(参见[ECUC_CanSM_00137]),则只要子状态机CANSM_BSM_S_PRE_FULLCOM处于状态S_TRCV_NORMAL,CanSM模块就应操作do动作DO_SET_TRCV_MODE_NORMAL,因此为该CAN网络的已配置CAN收发器(参见[ECUC_CanSM_00137])重复API请求CanIf_SetTrcvMode(参见SWS_CanSM_91002),TransceiverMode等于CANTRCV_TRCVMODE_NORMAL。
6.2.22.2. 守护条件:G_TRCV_NORMAL_E_OK¶
子状态机CANSM_BSM_S_PRE_FULLCOM的守护条件G_TRCV_NORMAL_E_OK应在[SWS_CanSM_00483]的API调用返回E_OK时通过。
6.2.22.3. 触发:T_TRCV_NORMAL_INDICATED¶
如果CanSM模块在相应请求(参见SWS_CanSM_00483)之后收到了该CAN网络已配置CAN收发器(参见[ECUC_CanSM_00137])的CANTRCV_TRCVMODE_NORMAL模式指示(参见SWS_CanSM_00399),这应以T_TRCV_NORMAL_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
如果没有为该CAN网络(参见[ECUC_CanSM_00137])配置CAN收发器,则这应以T_TRCV_NORMAL_INDICATED触发该CAN网络处于状态S_TRCV_NORMAL的子状态机CANSM_BSM_S_PRE_FULLCOM。
6.2.22.4. 触发:T_TRCV_NORMAL_TIMEOUT¶
在假定的收发器normal指示(参见SWS_CanSM_00485)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_TRCV_NORMAL_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
6.2.22.5. 状态操作:S_CC_STOPPED¶
只要子状态机CANSM_BSM_S_PRE_FULLCOM处于状态S_CC_STOPPED,CanSM模块就应操作do动作DO_SET_CC_MODE_STOPPED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STOPPED。
6.2.22.6. 守护条件:G_CC_STOPPED_OK¶
子状态机CANSM_BSM_S_PRE_FULLCOM的守护条件G_CC_STOPPED_OK应在[SWS_CanSM_00487]的所有API调用都返回E_OK时通过。
6.2.22.7. 触发:T_CC_STOPPED_INDICATED¶
如果CanSM模块在为停止该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00487)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STOPPED_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
6.2.22.8. 触发:T_CC_STOPPED_TIMEOUT¶
在所有假定的控制器stopped模式指示(参见SWS_CanSM_00489)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
6.2.22.9. 状态操作:S_CC_STARTED¶
只要子状态机CANSM_BSM_S_PRE_FULLCOM处于状态S_CC_STARTED,CanSM模块就应操作do动作DO_SET_CC_MODE_STARTED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STARTED。
6.2.22.10. 守护条件:G_CC_STARTED_OK¶
子状态机CANSM_BSM_S_PRE_FULLCOM的守护条件G_CC_STARTED_OK应在[SWS_CanSM_00491]的所有API调用都返回E_OK时通过。
6.2.22.11. 触发:T_CC_STARTED_INDICATED¶
如果CanSM模块在为启动该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00491)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STARTED_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
6.2.22.12. 触发:T_CC_STARTED_TIMEOUT¶
在所有假定的控制器started模式指示(参见SWS_CanSM_00493)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STARTED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_PRE_FULLCOM。
6.2.23. 子状态机 CANSM_BSM_S_FULLCOM¶
图7.8:CANSM_BSM_S_FULLCOM,CANSM_BSM的子状态机(CANSM_BSM_S_FULLCOM)

6.2.23.1. 守护条件:G_BUS_OFF_PASSIVE¶
子状态机CANSM_BSM_S_FULLCOM的守护条件G_BUS_OFF_PASSIVE应在CANSM_BOR_TX_CONFIRMATION_POLLING被禁用(参见[ECUC_CanSM_00339])且自效果E_TX_ON以来经过的时间大于等于配置参数CANSM_BOR_TIME_TX_ENSURED(参见[ECUC_CanSM_00130])时通过。
子状态机CANSM_BSM_S_FULLCOM的守护条件G_BUS_OFF_PASSIVE应在CANSM_BOR_TX_CONFIRMATION_POLLING被启用(参见[ECUC_CanSM_00339])且API CanIf_GetTxConfirmationState(参见SWS_CanSM_91002)为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])返回CANIF_TX_RX_NOTIFICATION时通过。
6.2.23.2. 效果:E_BUS_OFF_PASSIVE¶
子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF_PASSIVE应以参数EventId := CANSM_E_BUS_OFF(参见[ECUC_CanSM_00070])、EventStatus := DEM_EVENT_STATUS_PASSED调用Dem_SetEventStatus(参见SWS_CanSM_91002)。
6.2.23.3. 触发:T_CHANGE_BR_REQUEST¶
如果不存在拒绝CanSM_SetBaudrate请求的条件(参见SWS_CanSM_00503),这应以T_CHANGE_BR_REQUEST触发状态机CANSM_BSM_S_FULLCOM以及相应的父状态机CanSM_BSM(导致在可能的情况下经由CanIf_SetBaudrate(参见SWS_CanSM_91003)直接更改波特率,或启动所需的异步过程来完成该操作)。
6.2.23.4. 效果:E_CHANGE_BR_BSW_MODE¶
子状态机CANSM_BSM_S_FULLCOM的效果E_CHANGE_BR_BSW_MODE应为相应的CAN网络调用API BswM_CanSM_CurrentState(参见SWS_CanSM_91002),参数为Network := CanSMComMNetworkHandleRef、CurrentState := CANSM_BSWM_CHANGE_BAUDRATE。
6.2.23.5. 触发:T_BUS_OFF¶
回调函数CanSM_ControllerBusOff(参见SWS_CanSM_00064)在其某个已配置CAN控制器与回调函数CanSM_ControllerBusOff的函数参数ControllerId匹配的情况下,应以T_BUS_OFF触发该CAN网络的子状态机CANSM_BSM_S_FULLCOM。
如果一个CAN网络拥有多个CAN控制器,且其中一个控制器的总线关闭经由CanSM_ControllerBusOff被指示,则CanSM应在效果E_BUS_OFF的上下文中也停止该CAN网络的其他CAN控制器。
6.2.23.6. 效果:E_BUS_OFF¶
子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF应首先为相应的CAN网络调用API BswM_CanSM_CurrentState(参见SWS_CanSM_91002),参数为Network := CanSMComMNetworkHandleRef、CurrentState := CANSM_BSWM_BUS_OFF。
子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF应第二为相应的CAN网络调用API ComM_BusSM_ModeIndication(参见SWS_CanSM_91002),参数为Channel := CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])、ComMode := COMM_SILENT_COMMUNICATION。
子状态机CANSM_BSM_S_FULLCOM的效果E_BUS_OFF应以参数EventId := CANSM_E_BUS_OFF(参见[ECUC_CanSM_00070])、EventStatus := DEM_EVENT_STATUS_PRE_FAILED调用Dem_SetEventStatus(参见SWS_CanSM_91002)。
6.2.23.7. 状态操作:S_RESTART_CC¶
只要子状态机CANSM_BSM_S_FULLCOM处于状态S_RESTART_CC,CanSM模块就应操作do动作DO_SET_CC_MODE_STARTED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STARTED。
6.2.23.8. 守护条件:G_RESTART_CC_OK¶
子状态机CANSM_BSM_S_FULLCOM的守护条件G_RESTART_CC_OK应在[SWS_CanSM_00509]的所有API调用都返回E_OK时通过。
6.2.23.9. 触发:T_RESTART_CC_INDICATED¶
如果CanSM模块在为启动该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00509)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_RESTART_CC_INDICATED触发该CAN网络的子状态CANSM_BSM_S_FULLCOM。
6.2.23.10. 触发:T_RESTART_CC_TIMEOUT¶
在所有假定的控制器started模式指示(参见SWS_CanSM_00511)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_RESTART_CC_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_FULLCOM。
6.2.23.11. 效果:E_TX_OFF¶
效果E_TX_OFF不做任何事。
6.2.23.12. 守护条件:G_TX_ON¶
如果CanSMEnableBusOffDelay为FALSE,则子状态机CANSM_BSM_S_FULLCOM的守护条件G_TX_ON应在相对于最后一次T_BUS_OFF经过CanSMBorTimeL1(参见[ECUC_CanSM_00128])的时间持续时间之后通过,前提是未通过守护条件G_BUS_OFF_PASSIVE的、使用E_BUS_OFF的总线关闭恢复重试次数低于CanSMBorCounterL1ToL2(参见[ECUC_CanSM_00131])。
如果CanSMEnableBusOffDelay为FALSE,则子状态机CANSM_BSM_S_FULLCOM的守护条件G_TX_ON应在相对于最后一次T_BUS_OFF经过CanSMBorTimeL2(参见[ECUC_CanSM_00129])的时间持续时间之后通过,前提是未通过守护条件G_BUS_OFF_PASSIVE的、使用E_BUS_OFF的总线关闭恢复重试次数大于等于CanSMBorCounterL1ToL2(参见[ECUC_CanSM_00131])。
如果CanSMEnableBusOffDelay为TRUE,则[SWS_CanSM_00514]和[SWS_CanSM_00515]的守护条件应分别在各自规定的时间持续时间加上附加的随机延迟值之后通过;该随机延迟值应在总线关闭事件之后通过已配置的callout函数<User_GetBusOffDelay>(API名称由CanSMGetBusOffDelayFunction定义)请求。
6.2.23.13. 效果:E_TX_ON¶
如果ECU passive为FALSE(参见SWS_CanSM_00646),则子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应首先为该CAN网络的已配置CAN控制器(参见[ECUC_CanSM_00141])调用API函数CanIf_SetPduMode(参见SWS_CanSM_91002),参数为ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_ONLINE。
如果ECU passive为TRUE(参见SWS_CanSM_00646),则子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应首先为该CAN网络的已配置CAN控制器(参见[ECUC_CanSM_00141])调用API函数CanIf_SetPduMode(参见SWS_CanSM_91002),参数为ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_TX_OFFLINE_ACTIVE。
子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应第二为相应的CAN网络调用API BswM_CanSM_CurrentState(参见SWS_CanSM_91002),参数为Network := CanSMComMNetworkHandleRef、CurrentState := CANSM_BSWM_FULL_COMMUNICATION。
子状态机CANSM_BSM_S_FULLCOM的效果E_TX_ON应第三调用API ComM_BusSM_ModeIndication(参见SWS_CanSM_91002),参数为Channel := CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])、ComMode := COMM_FULL_COMMUNICATION。
6.2.23.14. 触发:T_TX_TIMEOUT_EXCEPTION¶
回调函数CanSM_TxTimeoutException(参见SWS_CanSM_00410)应以T_TX_TIMEOUT_EXCEPTION触发子状态机CANSM_BSM_S_FULLCOM。
6.2.23.15. 注释¶
在状态S_NO_BUS_OFF中,CanSM模块不需要任何状态操作。
6.2.23.16. 子状态机:CANSM_BSM_S_TX_TIMEOUT_EXCEPTION¶
图7.9:CANSM_BSM_S_TX_TIMEOUT_EXCEPTION,CANSM_BSM_S_FULLCOM的子状态机(CANSM_BSM_S_TX_TIMEOUT_EXCEPTION)

6.2.23.16.1. 触发:T_CC_STOPPED_TIMEOUT¶
在所有假定的控制器stopped模式指示(参见SWS_CanSM_00579)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION。
6.2.23.16.2. 守护条件:G_CC_STOPPED_E_OK¶
子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION的守护条件G_CC_STOPPED_E_OK应在[SWS_CanSM_00578]的所有API调用都返回E_OK时通过。
6.2.23.16.3. 状态操作:DO_SET_CC_MODE_STOPPED ()¶
只要子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION处于状态S_CC_STOPPED,CanSM模块就应操作do动作DO_SET_CC_MODE_STOPPED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STOPPED。
6.2.23.16.4. 触发:T_CC_STOPPED_INDICATED¶
如果CanSM模块在为停止该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00524)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STOPPED_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION。
6.2.23.16.5. 触发:T_CC_STARTED_INDICATED¶
如果CanSM模块在为启动该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00582)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STARTED_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION。
6.2.23.16.6. 守护条件:G_CC_STARTED_E_OK¶
子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION的守护条件G_CC_STARTED_E_OK应在[SWS_CanSM_00582]的所有API调用都返回E_OK时通过。
6.2.23.16.7. 状态操作:DO_SET_CC_MODE_STARTED¶
只要子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION处于状态S_CC_STARTED,CanSM模块就应操作do动作DO_SET_CC_MODE_STARTED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STARTED。
6.2.23.16.8. 出口点:TxTimeout¶
如果子状态机CANSM_BSM_S_TX_TIMEOUT_EXCEPTION被以T_CC_STARTED_INDICATED触发,则应以CANIF_ONLINE调用API CanIf_SetPduMode(参见SWS_CanSM_91002)。
6.2.24. 子状态机:CANSM_BSM_S_CHANGE_BAUDRATE¶
图7.10:CANSM_BSM_S_CHANGE_BAUDRATE,CANSM_BSM的子状态机(CANSM_BSM_S_CHANGE_BAUDRATE)

6.2.24.1. 入口处执行的状态操作:DO_SET_BAUDRATE_DIRECT¶
状态操作DO_SET_BAUDRATE_DIRECT应为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])以相应的ControllerId参数调用API请求CanIf_SetBaudrate(参见SWS_CanSM_91003)。它应使用来自CanSM_SetBaudrate调用的相应函数参数BaudRateConfigID作为BaudRateConfigID参数。
6.2.24.2. 守护条件:G_SET_BAUDRATE_DIRECT_OK¶
如果所有CanIf_SetBaudrate(参见SWS_CanSM_91003)(参见SWS_CanSM_00639)请求都返回E_OK,则守护条件G_SET_BAUDRATE_DIRECT_OK应通过。
6.2.24.3. 守护条件:G_SET_BAUDRATE_DIRECT_NOT_OK¶
如果任何CanIf_SetBaudrate(参见SWS_CanSM_91003)(参见SWS_CanSM_00639)请求返回了E_NOT_OK,则状态CANSM_BSM_CHANGE_BR_SYNC的守护条件G_SET_BAUDRATE_NOT_OK应通过。
6.2.24.4. 状态操作:S_CC_STOPPED¶
只要子状态机CANSM_BSM_S_CHANGE_BAUDRATE处于状态S_CC_STOPPED,CanSM模块就应操作do动作DO_SET_CC_MODE_STOPPED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STOPPED。
6.2.24.5. 守护条件:G_CC_STOPPED_OK¶
子状态机CANSM_BSM_S_CHANGE_BAUDRATE的守护条件G_CC_STOPPED_OK应在[SWS_CanSM_00524]的所有API调用都返回E_OK时通过。
6.2.24.6. 触发:T_CC_STOPPED_INDICATED¶
如果CanSM模块在为停止该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00524)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STOPPED_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。
6.2.24.7. 触发:T_CC_STOPPED_TIMEOUT¶
在所有假定的控制器stopped模式指示(参见SWS_CanSM_00526)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STOPPED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。
6.2.24.8. 效果:E_CHANGE_BAUDRATE¶
子状态机CANSM_BSM_S_CHANGE_BAUDRATE的效果E_CHANGE_BAUDRATE应首先为相应的CAN网络调用API ComM_BusSM_ModeIndication(参见SWS_CanSM_91002),参数为Channel := CanSMComMNetworkHandleRef(参见[ECUC_CanSM_00161])、ComMode := COMM_NO_COMMUNICATION。
子状态机CANSM_BSM_S_CHANGE_BAUDRATE的效果E_CHANGE_BAUDRATE应第二为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])以相应的ControllerId参数调用API请求CanIf_SetBaudrate(参见SWS_CanSM_91003),并使用从CanSM_SetBaudrate调用中记住的BaudRateConfigID作为BaudRateConfigID参数。
6.2.24.9. 状态操作:S_CC_STARTED¶
只要子状态机CANSM_BSM_S_CHANGE_BAUDRATE处于状态S_CC_STARTED,CanSM模块就应操作do动作DO_SET_CC_MODE_STARTED,因此在当前CAN控制器模式(参见SWS_CanSM_00638)不同的情况下,为该CAN网络的所有已配置CAN控制器(参见[ECUC_CanSM_00141])重复API请求CanIf_SetControllerMode(参见SWS_CanSM_91002),ControllerMode等于CAN_CS_STARTED。
6.2.24.10. 守护条件:G_CC_STARTED_OK¶
子状态机CANSM_BSM_S_CHANGE_BAUDRATE的守护条件G_CC_STARTED_OK应在[SWS_CanSM_00532]的所有API调用都返回E_OK时通过。
6.2.24.11. 触发:T_CC_STARTED_INDICATED¶
如果CanSM模块在为启动该CAN网络的CAN控制器而发出的相应请求(参见SWS_CanSM_00532)之后,收到了该CAN网络所有已配置CAN控制器(参见[ECUC_CanSM_00141])的所有模式指示(参见SWS_CanSM_00396),这应以T_CC_STARTED_INDICATED触发该CAN网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。
6.2.24.12. 触发:T_CC_STARTED_TIMEOUT¶
在所有假定的控制器started模式指示(参见SWS_CanSM_00534)超过CANSM_MODEREQ_REPEAT_TIME(参见[ECUC_CanSM_00336])超时之后,该条件应以T_CC_STARTED_TIMEOUT触发相应网络的子状态机CANSM_BSM_S_CHANGE_BAUDRATE。
6.2.24.13. 守护条件:G_NO_COM_MODE_REQUESTED¶
在用CanSM_RequestComMode(参见SWS_CanSM_00635)为该状态机的相应网络句柄发出的、被接受的最新通信模式请求,其ComM_Mode参数等于COMM_NO_COMMUNICATION的情况下,子状态机CANSM_BSM_S_CHANGE_BAUDRATE应通过守护条件G_NO_COM_MODE_REQUESTED。
6.2.24.14. 守护条件:G_NO_COM_MODE_NOT_REQUESTED¶
在用CanSM_RequestComMode(参见SWS_CanSM_00635)为该状态机的相应网络句柄发出的、被接受的最新通信模式请求,其ComM_Mode参数等于COMM_SILENT_COMMUNICATION或COMM_FULL_COMMUNICATION的情况下,子状态机CANSM_BSM_S_CHANGE_BAUDRATE应通过守护条件G_NO_COM_MODE_NOT_REQUESTED。
6.3. 错误分类¶
文档[2]「基本软件模块通用规范」的「错误处理」章详细描述了基本软件的错误处理。首先,它构成了一个由五种错误类型组成的分类方案,这些错误可能发生在BSW模块中。
在此基础上,以下各节在相应的小节中规定了具体的错误。
6.3.1. 开发错误¶
CanSM模块开发错误的定义:
| 错误类型 | 相关错误代码 | 错误值 |
|---|---|---|
| 在模块未初始化的情况下使用API服务 | CANSM_E_UNINIT | 0x01 |
| 以错误的指针调用API服务 | CANSM_E_PARAM_POINTER | 0x02 |
| 以错误的参数调用API服务 | CANSM_E_INVALID_NETWORK_HANDLE | 0x03 |
| 以错误的参数调用API服务 | CANSM_E_PARAM_CONTROLLER | 0x04 |
| 以错误的参数调用API服务 | CANSM_E_PARAM_TRANSCEIVER | 0x05 |
| 在并非所有CAN网络都处于状态CANSM_NO_COMMUNICATION时调用DeInit API服务 | CANSM_E_NOT_IN_NO_COM | 0x0B |
6.3.2. 运行时错误¶
CanSM模块运行时错误的定义:
| 错误类型 | 相关错误代码 | 错误值 |
|---|---|---|
| 某个网络的模式请求失败次数超过了配置允许的次数 | CANSM_E_MODE_REQUEST_TIMEOUT | 0x0A |
6.3.3. 瞬态故障¶
没有瞬态故障。
6.3.4. 生产错误¶
没有生产错误。
6.3.5. 扩展生产错误¶
没有扩展生产错误。
6.3.5.1. CANSM_E_BUS_OFF¶
| 错误名称 | CANSM_E_BUS_OFF(参见ECUC_CanSM_00070) |
|---|---|
| 简要描述 | 总线关闭检测(Bus-off detection)。 |
| 详细描述 | 某个CAN网络的总线关闭恢复状态机检测到了一定数量的、未成功恢复的连续总线关闭。 |
| 推荐DTC | 由DEM分配。 |
| 检测条件 | Fail:当CanSM_ControllerBusOff被调用时(T_BUS_OFF/E_BUS_OFF)PRE_FAILED,去抖动由OEM在DEM中定义。 |
| 检测条件 | Pass:在CAN帧成功发送之后(G_BUS_OFF_PASSIVE/E_BUS_OFF_PASSIVE)。 |
| 次要参数 | 无。 |
| 所需时间 | 立即PRE_FAILED(在错误中断上下文中),FAILED取决于DEM的去抖动配置。 |
| 监控频率 | Continuous |
| MIL点亮 | 由DEM分配。 |
6.4. ECU在线主动/被动模式¶
CanSM模块应存储所请求的ECU passive模式的状态(参见SWS_CanSM_00644)。
当以CanSM_Passive = true调用CanSM_SetEcuPassive时(参见SWS_CanSM_00644),CanSM应通过以参数ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_TX_OFFLINE_ACTIVE调用API CanIf_SetPduMode(参见SWS_CanSM_91002),将当前为CANIF_ONLINE的所有已配置CAN控制器的所有PDU模式更改为CANIF_TX_OFFLINE_ACTIVE。
如果以CanSM_Passive = false调用CanSM_SetEcuPassive(参见SWS_CanSM_00644),则CanSM应通过以参数ControllerId := CanSMControllerId(参见[ECUC_CanSM_00141])、PduModeRequest := CANIF_ONLINE调用API CanIf_SetPduMode(参见SWS_CanSM_91002),将当前为CANIF_TX_OFFLINE_ACTIVE的所有已配置CAN控制器的所有PDU模式更改为CANIF_ONLINE。
如果CanSM模块需要关于实际PduMode的信息,则CanSM应调用API CanIf_GetPduMode(参见SWS_CanSM_91002)以获取CanIf的当前PDU模式。
6.5. 非功能性设计规则¶
CanSM应满足[12, General Requirements on Basic Software Modules]的软件模块设计需求。
7. API规范¶
7.1. 导入的类型¶
在本章中,列出从以下模块中包含的所有类型:
| 模块 | 头文件 | 导入的类型 |
|---|---|---|
| Can | Can_GeneralTypes.h | Can_ControllerStateType |
| CanIf | CanIf.h | CanIf_NotifStatusType |
| CanIf | CanIf.h | CanIf_PduModeType |
| CanTrcv | Can_GeneralTypes.h | CanTrcv_TrcvModeType |
| ComM | Rte_ComM_Type.h | ComM_ModeType |
| ComStack_Types | ComStack_Types.h | NetworkHandleType |
| Dem | Rte_Dem_Type.h | Dem_EventIdType |
| Dem | Rte_Dem_Type.h | Dem_EventStatusType |
| Std | Std_Types.h | Std_ReturnType |
| Std | Std_Types.h | Std_VersionInfoType |
7.2. 类型定义¶
以下各表包含CanSM模块的类型定义。
7.2.1. CanSM_ConfigType¶
| 名称 | CanSM_ConfigType |
|---|---|
| 类型(Kind) | Structure(结构体) |
| 元素 | - |
| 元素 | 类型:- |
| 元素 | 注释:- |
| 描述 | 该类型定义了CanSM的Post-Build参数的数据结构。在初始化时,CanSM获得一个指向该类型结构的指针,以访问其初始化所需的配置数据。 |
| 可通过 | CanSM.h |
7.2.2. CanSM_BswMCurrentStateType¶
| 名称 | CanSM_BswMCurrentStateType |
|---|---|
| 类型(Kind) | Enumeration(枚举) |
| 范围 | CANSM_BSWM_NO_COMMUNICATION(-):-;CANSM_BSWM_SILENT_COMMUNICATION(-):-;CANSM_BSWM_FULL_COMMUNICATION(-):-;CANSM_BSWM_BUS_OFF(-):-;CANSM_BSWM_CHANGE_BAUDRATE(-):- |
| 描述 | 通知给BswM模块的CAN特定的通信模式/状态。 |
| 可通过 | CanSM.h |
7.3. 函数定义¶
以下各节规定CanSM模块提供的API函数。
7.3.1. CanSM_Init¶
说明:
| 服务名 | CanSM_Init |
|---|---|
| 服务ID[hex] | 0x00 |
| 同步/异步 | 同步 |
| 可重入 | 不可重入 |
| 参数(in) | ConfigPtr |
| 指向CanSM的Post-Build参数初始化结构的指针。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该服务初始化CanSM模块。 |
| 可通过 | CanSM.h |
7.3.2. CanSM_DeInit¶
说明:
| 服务名 | CanSM_DeInit |
|---|---|
| 服务ID[hex] | 0x14 |
| 同步/异步 | 同步 |
| 可重入 | 不可重入 |
| 参数(in) | 无 |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该服务去初始化CanSM模块。 |
| 可通过 | CanSM.h |
注意:去初始化函数的一般行为和约束由SWS_BSW_00152、SWS_BSW_00072、SWS_BSW_00232、SWS_BSW_00233规定。
注意事项:CanSM_DeInit函数的调用者必须确保所有CAN网络都处于状态CANSM_NO_COMMUNICATION。
如果为CanSM模块启用了开发错误检测:在并非所有CAN网络都处于状态CANSM_NO_COMMUNICATION的情况下,函数CanSM_DeInit应引发错误CANSM_E_NOT_IN_NO_COM。
7.3.3. CanSM_RequestComMode¶
说明:
| 服务名 | CanSM_RequestComMode |
|---|---|
| 服务ID[hex] | 0x02 |
| 同步/异步 | 异步 |
| 可重入 | 可重入(仅针对不同的网络句柄) |
| 参数(in) | network |
| 请求的目标通信网络的句柄。 | |
| ComM_Mode | |
| 请求的通信模式。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Std_ReturnType |
| E_OK:服务被接受;E_NOT_OK:服务被拒绝。 | |
| 说明 | 该服务应将某个CAN网络的通信模式更改为所请求的模式。 |
| 可通过 | CanSM.h |
备注:关于通信模式的详细描述,请参阅[5, Specification of Communication Manager]。
函数CanSM_RequestComMode应在请求的NetworkHandle参数是CanSM模块配置(参见[ECUC_CanSM_00161])中包含的句柄时接受其请求。
函数CanSM_RequestComMode应在请求的NetworkHandle参数不是CanSM模块配置(参见[ECUC_CanSM_00161])中包含的句柄时拒绝其请求。
在CanSM_Init请求(参见[SWS_CanSM_00423]、[SWS_CanSM_00430])之后,所请求CAN网络的初始迁移尚未完成的情况下,CanSM模块应拒绝API请求CanSM_RequestComMode。
函数CanSM_RequestComMode在不接受请求的网络句柄的情况下,应以ErrorId参数CANSM_E_INVALID_NETWORK_HANDLE调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果函数CanSM_RequestComMode接受了该请求,则CanSM状态机(参见SWS_CanSM_00635)应考虑该请求。
如果在调用函数CanSM_RequestComMode时CanSM模块未初始化,则该函数应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.3.4. CanSM_GetCurrentComMode¶
说明:
| 服务名 | CanSM_GetCurrentComMode |
|---|---|
| 服务ID[hex] | 0x03 |
| 同步/异步 | 同步 |
| 可重入 | 可重入 |
| 参数(in) | network |
| 应输出其当前通信模式的网络句柄。 | |
| 参数(inout) | 无 |
| 参数(out) | ComM_ModePtr |
| 输出当前通信模式的位置的指针。 | |
| 返回值 | Std_ReturnType |
| E_OK:服务被接受。 | |
| 说明 | 该服务应输出某个CAN网络的当前通信模式。 |
| 可通过 | CanSM.h |
在调用所提供的API CanSM_Init(参见SWS_CanSM_00023)之前,CanSM模块应为API请求CanSM_GetCurrentComMode返回E_NOT_OK。
函数CanSM_GetCurrentComMode应在请求的NetworkHandle参数是CanSM模块配置(参见[ECUC_CanSM_00161])中包含的句柄时接受其请求。
函数CanSM_GetCurrentComMode应在请求的NetworkHandle参数不是CanSM模块配置(参见[ECUC_CanSM_00161])中包含的句柄时拒绝其请求。
函数CanSM_GetCurrentComMode在不接受请求的网络句柄的情况下,应以ErrorId参数CANSM_E_INVALID_NETWORK_HANDLE调用函数Det_ReportError(参见SWS_CanSM_91003)。
函数CanSM_GetCurrentComMode在接受请求的情况下,应将网络句柄(参见SWS_CanSM_00266)的当前通信模式输出到ComM_ModeType类型的指定指针。
如果在调用函数CanSM_GetCurrentComMode时CanSM模块未初始化(参见SWS_CanSM_00282),则该函数应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果该函数的用户传入NULL指针作为ComM_ModePtr,则函数CanSM_GetCurrentComMode应向DET报告开发错误CANSM_E_PARAM_POINTER。
7.3.5. CanSM_StartWakeupSource¶
说明:
| 服务名 | CanSM_StartWakeupSource |
|---|---|
| 服务ID[hex] | 0x11 |
| 同步/异步 | 同步 |
| 可重入 | 不可重入 |
| 参数(in) | network |
| 受影响的CAN网络。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Std_ReturnType |
| E_OK:请求被接受;E_NOT_OK:请求被拒绝。 | |
| 说明 | 当某个唤醒源应被启动时,EcuM应调用该函数。 |
| 可通过 | CanSM.h |
在CanSM模块尚未以CanSM_Init(参见SWS_CanSM_00023)初始化的情况下,API函数CanSM_StartWakeupSource应返回E_NOT_OK。
在CanSM模块尚未以CanSM_Init(参见SWS_CanSM_00023)初始化的情况下,函数CanSM_StartWakeupSource应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
在CanSM模块已初始化且请求的network参数不是CanSM模块配置(参见[ECUC_CanSM_00161])中包含的句柄的情况下,函数CanSM_StartWakeupSource应返回E_NOT_OK。
在CanSM模块已初始化且所请求的句柄相对于CanSM配置(参见[ECUC_CanSM_00161])无效的情况下,函数CanSM_StartWakeupSource应以ErrorId参数CANSM_E_INVALID_NETWORK_HANDLE调用函数Det_ReportError(参见SWS_CanSM_91003)。
在CanSM模块已初始化且所请求的句柄相对于CanSM配置(参见[ECUC_CanSM_00161])有效的情况下,函数CanSM_StartWakeupSource应返回E_OK,并且它应被视为相关网络状态机的触发(参见SWS_CanSM_00607)。
7.3.6. CanSM_StopWakeupSource¶
说明:
| 服务名 | CanSM_StopWakeupSource |
|---|---|
| 服务ID[hex] | 0x12 |
| 同步/异步 | 同步 |
| 可重入 | 不可重入 |
| 参数(in) | network |
| 受影响的CAN网络。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Std_ReturnType |
| E_OK:请求被接受;E_NOT_OK:请求被拒绝。 | |
| 说明 | 当某个唤醒源应被停止时,EcuM应调用该函数。 |
| 可通过 | CanSM.h |
在CanSM模块尚未以CanSM_Init(参见SWS_CanSM_00023)初始化的情况下,API函数CanSM_StopWakeupSource应返回E_NOT_OK。
在CanSM模块尚未以CanSM_Init(参见SWS_CanSM_00023)初始化的情况下,函数CanSM_StopWakeupSource应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
在CanSM模块已初始化且请求的network参数不是CanSM模块配置(参见[ECUC_CanSM_00161])中包含的句柄的情况下,函数CanSM_StopWakeupSource应返回E_NOT_OK。
在CanSM模块已初始化且所请求的句柄相对于CanSM配置(参见[ECUC_CanSM_00161])无效的情况下,函数CanSM_StopWakeupSource应以ErrorId参数CANSM_E_INVALID_NETWORK_HANDLE调用函数Det_ReportError(参见SWS_CanSM_91003)。
在CanSM模块已初始化且所请求的句柄相对于CanSM配置(参见[ECUC_CanSM_00161])有效的情况下,函数CanSM_StopWakeupSource应返回E_OK,并且它应被视为相关网络状态机的触发(参见SWS_CanSM_00608)。
7.3.7. 可选(Optional)¶
7.3.7.1. CanSM_GetVersionInfo¶
说明:
| 服务名 | CanSM_GetVersionInfo |
|---|---|
| 服务ID[hex] | 0x01 |
| 同步/异步 | 同步 |
| 可重入 | 可重入 |
| 参数(in) | 无 |
| 参数(inout) | 无 |
| 参数(out) | VersionInfo |
| 指向存储该模块版本信息位置的指针。 | |
| 返回值 | 无 |
| 说明 | 该服务输出该模块的版本信息(模块ID、厂商ID、与BSW00407相关的厂商特定版本号)。 |
| 可通过 | CanSM.h |
如果该函数的用户传入NULL指针作为VersionInfo,则函数CanSM_GetVersionInfo应向DET报告开发错误CANSM_E_PARAM_POINTER。
7.3.7.2. CanSM_SetBaudrate¶
说明:
| 服务名 | CanSM_SetBaudrate |
|---|---|
| 服务ID[hex] | 0x0d |
| 同步/异步 | 同步 |
| 可重入 | 不同的Network可重入;相同的Network不可重入 |
| 参数(in) | Network |
| 波特率变更所针对的CAN网络的句柄。 | |
| BaudRateConfigID | |
| 通过ID引用一个波特率配置(见CanController BaudRateConfigID)。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Std_ReturnType |
| E_OK:服务请求被接受,(新)波特率的设置已启动;E_NOT_OK:服务请求未被接受。 | |
| 说明 | 该服务应启动一个异步过程来更改某个CAN网络的已配置CAN控制器的波特率。根据所需的波特率修改,控制器可能必须复位。 |
| 可通过 | CanSM.h |
如果参数CanSMSetBaudrateApi配置为值TRUE,则CanSM模块应提供API函数CanSM_SetBaudrate。
如果CanSMSetBaudrateApi配置为值FALSE,则CanSM模块不应提供API函数CanSM_SetBaudrate。
在NetworkHandle参数与CanSM模块已配置的网络句柄(参见[ECUC_CanSM_00161])不匹配的情况下,CanSM模块应拒绝CanSM_SetBaudrate API请求。
函数CanSM_SetBaudrate在不接受请求的网络句柄的情况下,应以ErrorId参数CANSM_E_INVALID_NETWORK_HANDLE调用函数Det_ReportError(参见SWS_CanSM_91003)。
在所请求的CAN网络不处于通信模式COMM_FULL_COMMUNICATION的情况下,函数CanSM_SetBaudrate应拒绝其请求。
在CanSM模块未初始化的情况下,CanSM模块应拒绝CanSM_SetBaudrate API请求。
如果调用函数CanSM_SetBaudrate时CanSM模块未初始化,则该函数应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果根据[SWS_CanSM_00502]、[SWS_CanSM_00505]、[SWS_CanSM_00530]不存在拒绝CanSM_SetBaudrate请求的条件,则CanSM模块应返回E_OK,并按照[SWS_CanSM_00507]的规定执行所请求的波特率变更过程。
7.3.7.3. CanSM_SetEcuPassive¶
说明:
| 服务名 | CanSM_SetEcuPassive |
|---|---|
| 服务ID[hex] | 0x13 |
| 同步/异步 | 同步 |
| 可重入 | 不可重入 |
| 参数(in) | CanSM_Passive |
| TRUE:将所有CanSM通道设置为被动(passive),即只接收;FALSE:将所有CanSM通道恢复为非被动。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Std_ReturnType |
| E_OK:请求被接受;E_NOT_OK:请求未被接受。 | |
| 说明 | 该函数可用于将ECU的所有CanSM通道设置为只接收模式。 |
| 可通过 | CanSM.h |
如果参数CanSMTxOfflineActiveSupport配置为值TRUE,则CanSM模块应提供API函数CanSM_SetEcuPassive。
7.4. 回调通知¶
这是提供给其他模块的函数列表。
7.4.1. CanSM_ControllerBusOff¶
说明:
| 服务名 | CanSM_ControllerBusOff |
|---|---|
| 服务ID[hex] | 0x04 |
| 同步/异步 | 同步 |
| 可重入 | 可重入(仅针对不同的CanController) |
| 参数(in) | ControllerId |
| 检测到总线关闭事件的CAN控制器。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调函数就某个CAN控制器上的总线关闭事件通知CanSM,该事件需要通过针对受影响CAN网络规定的总线关闭恢复处理来加以考虑。 |
| 可通过 | CanSM_CanIf.h |
如果函数CanSM_ControllerBusOff得到的Controller在CanSM模块的配置中未配置为CanSMControllerId,则它应以ErrorId参数CANSM_E_PARAM_CONTROLLER调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果在调用函数CanSM_ControllerBusOff时CanSM模块未初始化,则函数CanSM_ControllerBusOff应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果CanSM模块已初始化且输入参数Controller是配置了参数CanSMControllerId的CAN控制器之一,则该总线关闭事件应由CAN网络状态机考虑(参见SWS_CanSM_00500)。
附加说明:
- 调用上下文要么在中断级(中断模式),要么在任务级(轮询模式)。
- 多CAN控制器使用需要可重入性。
7.4.2. CanSM_ControllerModeIndication¶
说明:
| 服务名 | CanSM_ControllerModeIndication |
|---|---|
| 服务ID[hex] | 0x07 |
| 同步/异步 | 同步 |
| 可重入 | 可重入(仅针对不同的CAN控制器) |
| 参数(in) | ControllerId |
| 模式已变更的CAN控制器。 | |
| ControllerMode | |
| 通知的CAN控制器模式。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调应就CAN控制器模式变更通知CanSM模块。 |
| 可通过 | CanSM_CanIf.h |
如果函数CanSM_ControllerModeIndication得到的ControllerId在CanSM模块的配置中未配置为CanSMControllerId,则它应以ErrorId参数CANSM_E_PARAM_CONTROLLER调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果在调用函数CanSM_ControllerModeIndication时CanSM模块未初始化,则函数CanSM_ControllerModeIndication应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.4.3. CanSM_TransceiverModeIndication¶
说明:
| 服务名 | CanSM_TransceiverModeIndication |
|---|---|
| 服务ID[hex] | 0x09 |
| 同步/异步 | 同步 |
| 可重入 | 不同的CAN收发器可重入 |
| 参数(in) | TransceiverId |
| 模式已变更的CAN收发器。 | |
| TransceiverMode | |
| 通知的CAN收发器模式。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调应就CAN收发器模式变更通知CanSM模块。 |
| 可通过 | CanSM_CanIf.h |
注意:CANTRCV_TRCVMODE_SLEEP状态只能由集成代码请求Can_Trcv模块,而不能由CanSM模块请求。因此,当为CANTRCV_TRCVMODE_SLEEP调用CanSM_TransceiverModeIndication()时,CanSM模块应忽略该请求。
如果函数CanSM_TransceiverModeIndication得到的TransceiverId在CanSM模块的配置中未配置为CanSMTransceiverId,则它应以ErrorId参数CANSM_E_PARAM_TRANSCEIVER调用函数Det_ReportError(参见SWS_CanSM_91003)。
如果在调用函数CanSM_TransceiverModeIndication时CanSM模块未初始化,则函数CanSM_TransceiverModeIndication应以ErrorId参数CANSM_E_UNINIT调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.4.4. CanSM_TxTimeoutException¶
说明:
| 服务名 | CanSM_TxTimeoutException |
|---|---|
| 服务ID[hex] | 0x0b |
| 同步/异步 | 同步 |
| 可重入 | 可重入 |
| 参数(in) | Channel |
| 受影响的CAN网络。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该函数应通知CanSM模块:CanNm已为受影响的部分CAN网络检测到tx超时异常,该异常应在CanSM模块的相应网络状态机内恢复。 |
| 可通过 | CanSM_CanIf.h |
在CanSM模块尚未初始化的情况下,函数CanSM_TxTimeoutException应向DET报告CANSM_E_UNINIT。
如果函数CanSM_TxTimeoutException被引用的Channel在CanSM配置中未配置为CanSMNetworkHandle,则它应向DET报告CANSM_E_INVALID_NETWORK_HANDLE。
备注:不同的Channel需要可重入性。
7.4.5. CanSM_ClearTrcvWufFlagIndication¶
说明:
| 服务名 | CanSM_ClearTrcvWufFlagIndication |
|---|---|
| 服务ID[hex] | 0x08 |
| 同步/异步 | 同步 |
| 可重入 | 不同的CAN收发器可重入 |
| 参数(in) | Transceiver |
| 被请求的收发器。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调函数应为被通知的CAN收发器指示CanIf_ClearTrcvWufFlag API过程结束。 |
| 可通过 | CanSM_CanIf.h |
在CanSM模块尚未初始化的情况下,函数CanSM_ClearTrcvWufFlagIndication应向DET报告CANSM_E_UNINIT。
如果函数CanSM_ClearTrcvWufFlagIndication得到的TransceiverId在CanSM模块的配置中未配置(参见[ECUC_CanSM_00137]),则它应以ErrorId参数CANSM_E_PARAM_TRANSCEIVER调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.4.6. CanSM_CheckTransceiverWakeFlagIndication¶
说明:
| 服务名 | CanSM_CheckTransceiverWakeFlagIndication |
|---|---|
| 服务ID[hex] | 0x0a |
| 同步/异步 | 同步 |
| 可重入 | 不同的CAN收发器可重入 |
| 参数(in) | Transceiver |
| 被请求的收发器。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调函数为被通知的CAN收发器指示CanIf_CheckTrcvWakeFlag API过程结束。 |
| 可通过 | CanSM_CanIf.h |
在CanSM模块尚未初始化的情况下,函数CanSM_CheckTransceiverWakeFlagIndication应向DET报告CANSM_E_UNINIT。
如果函数CanSM_CheckTransceiverWakeFlagIndication得到的TransceiverId在CanSM模块的配置中未配置(参见[ECUC_CanSM_00137]),则它应以ErrorId参数CANSM_E_PARAM_TRANSCEIVER调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.4.7. CanSM_ConfirmPnAvailability¶
说明:
| 服务名 | CanSM_ConfirmPnAvailability |
|---|---|
| 服务ID[hex] | 0x06 |
| 同步/异步 | 同步 |
| 可重入 | 可重入 |
| 参数(in) | TransceiverId |
| 已被检查PN可用性的CAN收发器。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调函数指示该收发器正在PN通信模式下运行。 |
| 可通过 | CanSM_CanIf.h |
函数CanSM_ConfirmPnAvailability在以一个已配置的收发器作为输入参数(参见[ECUC_CanSM_00137])被调用的情况下,应通知Can_Nm模块(参见SWS_CanSM_00422)。
在CanSM模块尚未初始化的情况下,函数CanSM_ConfirmPnAvailability应向DET报告CANSM_E_UNINIT。
如果函数CanSM_ConfirmPnAvailability得到的TransceiverId在CanSM模块的配置中未配置(参见[ECUC_CanSM_00137]),则它应以ErrorId参数CANSM_E_PARAM_TRANSCEIVER调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.4.8. CanSM_ConfirmCtrlPnAvailability¶
说明:
| 服务名 | CanSM_ConfirmCtrlPnAvailability |
|---|---|
| 服务ID[hex] | 0x15 |
| 同步/异步 | 同步 |
| 可重入 | 可重入 |
| 参数(in) | ControllerId |
| 已被检查PN可用性的CAN控制器。 | |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 说明 | 该回调函数指示该控制器正在PN通信模式下运行。 |
| 可通过 | CanSM_CanIf.h |
函数CanSM_ConfirmCtrlPnAvailability在以一个已配置的Controller作为输入参数(参见[ECUC_CanSM_00141])被调用的情况下,应通知CanNm模块(参见SWS_CanSM_00667)。
在CanSM模块尚未初始化的情况下,函数CanSM_ConfirmCtrlPnAvailability应向DET报告CANSM_E_UNINIT。
如果函数CanSM_ConfirmCtrlPnAvailability得到的ControllerId在CanSM模块的配置中未配置(参见[ECUC_CanSM_00141]),则它应以ErrorId参数CANSM_E_PARAM_CONTROLLER调用函数Det_ReportError(参见SWS_CanSM_91003)。
7.5. 调度函数¶
详情请参阅SWS_BSWGeneral第8.5章「调度函数」(Scheduled functions)。
7.5.1. CanSM_MainFunction¶
说明:
| 服务名 | CanSM_MainFunction |
|---|---|
| 服务ID[hex] | 0x05 |
| 说明 | CanSM的调度函数。 |
| 可通过 | SchM_CanSM.h |
CanSM模块的主函数应操作CanSM状态机的效果,CanSM模块应为每个已配置的CAN网络实现该状态机。
7.6. 期望接口¶
在本章中,列出了从其他模块需要的所有接口。
7.6.1. 必需接口(Mandatory Interfaces)¶
本章定义了实现模块核心功能所需的全部接口。
| API函数 | 头文件 | 描述 |
|---|---|---|
| BswM_CanSM_CurrentState | BswM_CanSM.h | 由CanSM调用以指示其当前状态的函数。 |
| CanIf_CheckTrcvWakeFlag | CanIf.h | 请求CanIf模块检查指定CAN收发器的唤醒(Wake)标志。 |
| CanIf_ClearTrcvWufFlag | CanIf.h | 请求CanIf模块清除指定CAN收发器的WUF标志。 |
| CanIf_GetPduMode | CanIf.h | 该服务报告所请求PDU通道的当前模式。 |
| CanIf_GetTxConfirmationState | CanIf.h | 该服务报告自上次CAN控制器启动以来,整个CAN控制器是否进行过任何TX确认。 |
| CanIf_SetControllerMode | CanIf.h | 该服务调用相应的CAN驱动程序服务来更改CAN控制器模式。 |
| CanIf_SetPduMode | CanIf.h | 该服务在预定义的逻辑PDU通道的L-PDU上设置所请求的模式。 |
| CanIf_SetTrcvMode | CanIf.h | 该服务通过调用相应的CAN收发器驱动程序服务来更改收发器TransceiverId的操作模式。 |
| CanNm_ConfirmPnAvailability | CanNm.h | 在所指示的NM通道上启用PN过滤功能。可用性:仅当CanNmGlobalPnSupport为TRUE时该API才可用。 |
| ComM_BusSM_ModeIndication | ComM.h | 由相应的总线状态管理器指示实际的总线模式。ComM应经由RTE和BswM将所指示的状态传播给用户。 |
| Dem_SetEventStatus | Dem.h | 由SWC或BSW模块调用,向Dem报告监控状态信息。调用Dem_SetEventStatus的BSW模块可以安全地忽略返回值。仅当{Dem/DemConfigSet/DemEventParameter/DemEventReportingType} == STANDARD_REPORTING时此API才可用。 |
| Det_ReportRuntimeError | Det.h | 报告运行时错误的服务。如果配置了callout,则应调用该callout。 |
7.6.1.1. 备注:CanIf_SetPduMode的使用¶
尽管CanIf模块提供了更多可请求的PDU模式,但CanSM模块在调用API CanIf_SetPduMode时只使用参数CANIF_ONLINE、CANIF_TX_OFFLINE_ACTIVE和CANIF_TX_OFFLINE。
CANIF_OFFLINE模式由CanIf自动假定,不需要由CanSM设置。
7.6.2. 可选接口(Optional Interfaces)¶
本章定义了实现模块可选功能所需的全部接口。
| API函数 | 头文件 | 描述 |
|---|---|---|
| CanIf_SetBaudrate | CanIf.h | 该服务应设置CAN控制器的波特率配置。根据所需的波特率修改,控制器可能必须复位。 |
| Det_ReportError | Det.h | 报告开发错误的服务。 |
7.6.3. 可配置接口(Configurable Interfaces)¶
在本章中,列出了目标函数可以配置的所有接口。目标函数通常是回调函数。这类接口的名称不是固定的,因为它们是可配置的。
7.6.3.1. <User_GetBusOffDelay>¶
说明:
| 服务名 | <User_GetBusOffDelay> |
|---|---|
| 同步/异步 | 同步 |
| 可重入 | 不同的网络可重入 |
| 参数(in) | network |
| 发生了总线关闭(BusOff)的CAN网络。 | |
| 参数(inout) | 无 |
| 参数(out) | delayCyclesPtr |
| 在发生总线关闭之后,除L1/L2之外额外等待的CanSM基础周期数。 | |
| 返回值 | 无 |
| 说明 | 该callout函数返回在发生总线关闭之后,除L1/L2之外额外等待的CanSM基础周期数。 |
| 可通过 | 配置参数CanSM/CanSMGeneral/CanSMGetBusOffDelayHeader |
8. 时序图¶
CanSM模块与依赖模块CanIf、ComM、BswM、Dem和CanNm的所有交互都在状态机图(参见图7-1至图7-10)中规定。因此,CanSM SWS只为启动和停止某个CAN网络的CAN控制器这一用例提供了一些示例序列。
备注:关于带有部分网络支持的CAN网络去初始化这一特殊用例,请参阅[11, Specification of CAN Transceiver Driver]的第9章。
8.1. 时序图 CanSm_StartCanController¶
图9.1:CanSm_StartCanController(CanSm_StartCanController)

8.2. 时序图 CanSm_StopCanController¶
图9.2:CanSm_StopCanController(CanSm_StopCanController)

9. 配置规范¶
第9.2节规定模块CanSM的结构(容器)和参数。
第9.2节规定模块CanSM的发布信息。
9.1. 容器与配置参数¶
以下各章汇总了所有配置参数。参数的详细含义在第6章和第7章中描述。
以太网交换机驱动程序模块应拒绝实现不支持的、带有分区映射的配置。
9.2.1. CanSM¶
| SWS 条目 | [] |
|---|---|
| 容器名称 | CanSM |
| 配置参数 | 见下方参数表 |
| 包含的容器 | 容器名称 | 多重性 | 作用域/依赖 |
|---|---|---|---|
| 包含的容器 | CanSMConfiguration | 1 | 该容器包含CanSM的全局参数以及用于CAN网络特定配置的子容器。 |
| 包含的容器 | CanSMGeneral | 1 | CanSM模块的通用预编译参数的容器。 |
9.2.2. CanSMConfiguration¶
| SWS 条目 | [] |
|---|---|
| 容器名称 | CanSMConfiguration |
| 配置参数 | 见下方参数表 |
| 包含的容器 | 容器名称 | 多重性 | 作用域/依赖 |
|---|---|---|---|
| 包含的容器 | CanSMManagerNetwork | 1..* | This container contains the CAN network specific parameters of each CAN network |
| SWS 条目 | [ECUC_CanSM_00336] |
|---|---|
| 参数名称 | CanSMModeRequestRepetitionMax |
| 描述 | 规定在没有来自CanIf模块的相应模式指示的情况下,模式请求重复的最大次数;超过该次数后,CanSM模块将向Det报告开发错误并尝试回到无通信状态。 |
| 多重性 | 1 |
| 类型 | EcucIntegerParamDef |
| 范围 | 0 .. 255 |
| 默认值 | - |
| Post-Build 变体值 | true |
| 值配置类 | Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD |
| 作用域/依赖 | scope: local |
| SWS 条目 | [ECUC_CanSM_00336] |
|---|---|
| 参数名称 | CanSMModeRequestRepetitionTime |
| 描述 | 规定CanSM模块应使用CanIf模块的API在多长的时间间隔内重复模式变更请求。 |
| 多重性 | 1 |
| 类型 | EcucFloatParamDef |
| 范围 | [0 .. 65.535] |
| 默认值 | - |
| Post-Build 变体值 | true |
| 值配置类 | Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD |
| 作用域/依赖 | scope: local |
9.2.3. CanSMGeneral¶
| SWS 条目 | [] |
|---|---|
| 容器名称 | CanSMGeneral |
| 配置参数 | 见下方参数表 |
无包含的容器。
| SWS 条目 | [ECUC_CanSM_00347] |
|---|---|
| 参数名称 | CanSMDevErrorDetect |
| 描述 | 开启或关闭开发错误检测与通知(true:启用检测与通知;false:禁用检测与通知)。 |
| 多重性 | 1 |
| 类型 | EcucBooleanParamDef |
| 默认值 | false |
| Post-Build 变体值 | false |
| 值配置类 | Pre-compile:time X All Variants;Link:time -;Post-build:time - |
| 作用域/依赖 | scope: local |
| SWS 条目 | [ECUC_CanSM_00348] |
|---|---|
| 参数名称 | CanSMGetBusOffDelayFunction |
| 描述 | 该参数配置<User_GetBusOffDelay> callout函数的名称,CanSM使用它来获取额外的L1/L2延迟时间。该函数只为启用了CanSMEnableBusOffDelay的通道调用。 |
| 多重性 | 0..1 |
| 类型 | EcucFunctionNameDef |
| 默认值 | - |
| Post-Build 变体值 | false |
| 值配置类 | Pre-compile:time X;Link:time -;Post-build:time -;Pre-compile:time X;Link:time -;Post-build:time - |
| 作用域/依赖 | scope: local |
| SWS 条目 | [ECUC_CanSM_00348] |
|---|---|
| 参数名称 | CanSMGetBusOffDelayHeader |
| 描述 | 该参数配置包含<User_GetBusOffDelay> callout函数原型的头文件。 |
9.2.4. CanSMManagerNetwork¶
| SWS 条目 | [] |
|---|---|
| 容器名称 | CanSMManagerNetwork |
| 配置参数 | 见下方参数表 |
| 包含的容器 | 容器名称 | 多重性 | 作用域/依赖 |
|---|---|---|---|
| 包含的容器 | 0 .. 255 | Range | |
| 包含的容器 | [0 .. 65.535] | Range | |
| 包含的容器 | CanSMController | 1..* | 该容器包含分配给某个CAN网络的控制器ID。 |
| 包含的容器 | CanSMDemEventParameterRefs | 0..1 | Container for the references to DemEventParameter elements which shall be invoked using the API Dem_SetEventStatus in case the corresponding error occurs. The EventId is taken from the referenced DemEventParameter's DemEventId symbolic value. The standardized errors are provided in this container and can be extended by vendor-specific error references. |
| SWS 条目 | [ECUC_CanSM_00141] |
|---|---|
| 参数名称 | CanSMControllerId |
| 描述 | 用于标识某个特定CAN控制器的唯一句柄。对CanIf模块所管理的CAN控制器之一的引用。 |
| 多重性 | 1 |
| 类型 | Symbolic name reference to CanIfCtrlCfg |
| Post-Build 变体值 | true |
| 值配置类 | Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD |
| 作用域/依赖 | scope: local |
9.2.5. CanSMDemEventParameterRefs¶
| SWS 条目 | [] |
|---|---|
| 容器名称 | CanSMDemEventParameterRefs |
| 配置参数 | 见下方参数表 |
无包含的容器。
| SWS 条目 | [ECUC_CanSM_00352] |
|---|---|
| 参数名称 | CANSM_E_BUS_OFF |
| 描述 | 对已配置DEM事件的引用,用于报告该CAN网络的总线关闭错误。 |
| 多重性 | 0..1 |
| 类型 | Symbolic name reference to DemEventParameter |
| Post-Build 变体值 | true |
| 值配置类 | Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD;Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD |
| 作用域/依赖 | scope: local dependency: Dem scope: local dependency: Dem scope: local dependency: Dem |
| SWS 条目 | [ECUC_CanSM_00352] |
|---|---|
| 参数名称 | CANSM_E_MODE_REQUEST_TIMEOUT |
| 描述 | 对已配置DEM事件的引用,用于报告该CAN网络的总线关闭错误。 |
| 多重性 | 0..1 |
| 类型 | Symbolic name reference to DemEventParameter |
| Post-Build 变体值 | true |
| 值配置类 | Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD;Pre-compile:time X VARIANT-PRE-COMPILE;Link:time X VARIANT-LINK-TIME;Post-build:time X VARIANT-POST-BUILD |
| 作用域/依赖 | scope: local |
9.2. 发布信息¶
第9.1节中定义的配置参数没有发布信息。