AUTOSAR进阶图解==>AUTOSAR_SWS_EthernetStateManager
AUTOSAR以太网状态管理器(EthSM)详解文档
目录
- 1. 概述
- 2. EthSM架构设计
- 3. 网络模式状态机
- 4. 操作序列分析
- 5. 配置模型
- 6. API规范
- 7. 错误处理机制
- 8. 总结
1. 概述
1.1 EthSM的作用
**AUTOSAR以太网状态管理器(EthSM)**是AUTOSAR Classic Platform中的一个关键基础软件模块,位于ECU抽象层,主要负责:
- 网络通信模式管理:为通信管理器(ComM)提供抽象接口来启动或关闭以太网集群上的通信
- 硬件抽象:不直接访问以太网硬件,而是通过以太网接口(EthIf)重定向请求到相应的驱动模块
- 状态协调:协调以太网控制器、收发器和TcpIp模块的状态,确保通信的可靠性
1.2 主要特性
-
分层架构:
- 应用层通过ComM请求通信模式
- EthSM协调各层模块状态
- 硬件层提供实际的通信能力
-
状态机管理:
- 实现复杂的6状态网络模式状态机
- 处理各种状态转换条件
- 支持错误恢复和异常处理
-
多网络支持:
- 支持多个独立的以太网网络
- 每个网络有独立的状态机实例
- 支持VLAN等虚拟网络
2. EthSM架构设计
2.1 架构层次分析
应用层
- 应用软件组件(Application SWC):
- 功能:业务逻辑处理,通信需求发起方
- 职责:根据应用需求请求网络通信服务
服务层
-
通信管理器(ComM):
- 功能:统一的通信模式管理接口
- 职责:
- 接收应用层的通信请求
- 调用EthSM的API进行网络状态管理
- 向应用层反馈通信状态变化
-
基础软件模式管理器(BswM):
- 功能:基础软件状态协调
- 职责:
- 接收EthSM的状态通知
- 协调其他BSW模块的状态
- 实现系统级的模式管理
-
ECU状态管理器(EcuM):
- 功能:ECU生命周期管理
- 职责:负责EthSM模块的初始化
ECU抽象层
- 以太网状态管理器(EthSM):
- 功能:以太网网络状态管理的核心模块
- 职责:
- 实现网络模式状态机
- 协调硬件和服务层状态
- 提供错误处理和诊断支持
- 管理配置参数
EthSM内部组件:
- 网络模式状态机:实现6个状态的复杂状态转换逻辑
- 错误处理:处理开发错误、运行时错误和生产错误
- 配置管理:管理网络特定的配置参数
2.2 关键接口说明
上层接口
- EthSM_RequestComMode():ComM调用以请求通信模式
- EthSM_GetCurrentComMode():ComM调用以获取当前通信模式
- BswM_EthSM_CurrentState():向BswM通知状态变化
下层接口
- TcpIp_RequestComMode():向TcpIp模块请求状态变化
- EthIf_SetControllerMode():控制以太网控制器模式
- EthIf_GetControllerMode():获取以太网控制器状态
回调接口
- EthSM_TcpIpModeIndication():TcpIp状态变化回调
- EthSM_CtrlModeIndication():控制器状态变化回调
- EthSM_TrcvLinkStateChg():收发器链路状态变化回调
2.3 代码示例
/* AUTOSAR EthSM模块接口定义 */
#include "EthSM.h"
#include "ComM.h"
#include "BswM.h"
#include "TcpIp.h"
#include "EthIf.h"/* EthSM状态类型定义 */
typedef enum {ETHSM_STATE_OFFLINE, /* 离线状态 */ETHSM_STATE_WAIT_TRCVLINK, /* 等待收发器链路 */ETHSM_STATE_WAIT_ONLINE, /* 等待在线 */ETHSM_STATE_ONLINE, /* 在线状态 */ETHSM_STATE_ONHOLD, /* 保持状态 */ETHSM_STATE_WAIT_OFFLINE /* 等待离线 */
} EthSM_NetworkModeStateType;/* EthSM配置结构体 */
typedef struct {NetworkHandleType networkHandle; /* 网络句柄 */uint8 ethIfControllerId; /* EthIf控制器ID */boolean demEventsConfigured; /* DEM事件配置标志 */Dem_EventIdType linkDownEventId; /* 链路断开事件ID */
} EthSM_NetworkConfigType;/* EthSM通信模式请求实现示例 */
Std_ReturnType EthSM_RequestComMode(NetworkHandleType NetworkHandle, ComM_ModeType ComM_Mode)
{EthSM_NetworkModeStateType currentState;Std_ReturnType result = E_NOT_OK;/* 参数检查 */if (EthSM_ModuleInitialized == FALSE) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID, ETHSM_SID_REQUEST_COM_MODE, ETHSM_E_UNINIT);return E_NOT_OK;}/* 验证网络句柄 */if (NetworkHandle >= ETHSM_NUMBER_OF_NETWORKS) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_REQUEST_COM_MODE, ETHSM_E_INVALID_NETWORK_HANDLE);return E_NOT_OK;}/* 验证通信模式 */if ((ComM_Mode != COMM_NO_COMMUNICATION) && (ComM_Mode != COMM_FULL_COMMUNICATION)) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_REQUEST_COM_MODE, ETHSM_E_INVALID_NETWORK_MODE);return E_NOT_OK;}/* 获取当前状态 */currentState = EthSM_Internal_GetCurrentState(NetworkHandle);/* 状态机处理 */switch (ComM_Mode) {case COMM_FULL_COMMUNICATION:if (currentState == ETHSM_STATE_OFFLINE) {/* 启动以太网控制器 */result = EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId, ETH_MODE_ACTIVE);if (result == E_OK) {/* 更新请求的通信模式 */EthSM_Internal_SetRequestedComMode(NetworkHandle, ComM_Mode);/* 触发状态转换将在主函数中处理 */}}break;case COMM_NO_COMMUNICATION:if ((currentState == ETHSM_STATE_ONLINE) || (currentState == ETHSM_STATE_ONHOLD)) {/* 请求TcpIp离线 */result = TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);if (result == E_OK) {/* 更新请求的通信模式 */EthSM_Internal_SetRequestedComMode(NetworkHandle, ComM_Mode);/* 状态转换到WAIT_OFFLINE */EthSM_Internal_SetCurrentState(NetworkHandle, ETHSM_STATE_WAIT_OFFLINE);/* 通知BswM状态变化 */BswM_EthSM_CurrentState(NetworkHandle, ETHSM_STATE_WAIT_OFFLINE);}}break;default:/* 不支持的通信模式 */result = E_NOT_OK;break;}return result;
}/* EthSM主函数实现示例 */
void EthSM_MainFunction(void)
{NetworkHandleType networkHandle;EthSM_NetworkModeStateType currentState;ComM_ModeType requestedMode;/* 遍历所有配置的网络 */for (networkHandle = 0; networkHandle < ETHSM_NUMBER_OF_NETWORKS; networkHandle++) {currentState = EthSM_Internal_GetCurrentState(networkHandle);requestedMode = EthSM_Internal_GetRequestedComMode(networkHandle);/* 状态机处理 */switch (currentState) {case ETHSM_STATE_OFFLINE:/* 处理从离线到等待收发器链路的转换 */if (requestedMode == COMM_FULL_COMMUNICATION) {EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);}break;case ETHSM_STATE_WAIT_TRCVLINK:/* 等待收发器链路状态变化 */if (EthSM_Internal_IsTransceiverLinkActive(networkHandle)) {/* 请求TcpIp上线 */TcpIp_RequestComMode(EthSM_NetworkConfig[networkHandle].ethIfControllerId,TCPIP_STATE_ONLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);}break;case ETHSM_STATE_WAIT_ONLINE:/* 等待TcpIp状态变化 */if (EthSM_Internal_IsTcpIpOnline(networkHandle)) {EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_FULL_COMMUNICATION);}break;/* 其他状态处理... */default:break;}}
}
3. 网络模式状态机
3.1 状态机概述
EthSM为每个配置的网络句柄实现一个网络模式状态机,包含6个子状态,用于管理从无通信到全通信的完整生命周期。
3.2 状态详细说明
状态 ETHSM_STATE_OFFLINE
- 含义:EthSM初始化时进入的状态,所有通信功能处于关闭状态
- 特征:
- Controller Mode: DOWN
- Transceiver Mode: DOWN
- Transceiver Link: DOWN
- TcpIP Address: OFFLINE
- ComM Mode: No Communication
- 进入条件:
- EthSM模块初始化
- 从其他状态收到COMM_NO_COMMUNICATION请求后的最终状态
- 退出条件:收到COMM_FULL_COMMUNICATION请求
状态 ETHSM_STATE_WAIT_TRCVLINK
- 含义:控制器已激活,等待收发器链路建立
- 特征:
- Controller Mode: ACTIVE
- Transceiver Mode: ACTIVE
- Transceiver Link: DOWN
- TcpIP Address: OFFLINE
- ComM Mode: No Communication
- 进入条件:从OFFLINE状态收到COMM_FULL_COMMUNICATION请求
- 退出条件:
- 收发器链路变为ACTIVE状态
- 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_WAIT_ONLINE
- 含义:收发器链路已建立,等待IP通信建立
- 特征:
- Controller Mode: ACTIVE
- Transceiver Mode: ACTIVE
- Transceiver Link: ACTIVE
- TcpIP Address: OFFLINE
- ComM Mode: No Communication
- 进入条件:从WAIT_TRCVLINK状态收到链路ACTIVE通知
- 退出条件:
- TcpIp状态变为ONLINE
- 收发器链路断开
- 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_ONLINE
- 含义:完全通信状态,所有条件满足
- 特征:
- Controller Mode: ACTIVE
- Transceiver Mode: ACTIVE
- Transceiver Link: ACTIVE
- TcpIP Address: ONLINE
- ComM Mode: Full Communication
- 进入条件:从WAIT_ONLINE状态收到TcpIp ONLINE通知
- 退出条件:
- 收发器链路断开(转到ONHOLD)
- TcpIp状态变为OFFLINE
- 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_ONHOLD
- 含义:链路断开但保持通信状态,用于快速恢复
- 特征:
- Controller Mode: ACTIVE
- Transceiver Mode: ACTIVE
- Transceiver Link: DOWN
- TcpIP Address: ONLINE
- ComM Mode: Full Communication
- 进入条件:从ONLINE状态收到链路DOWN通知
- 退出条件:
- 收发器链路恢复ACTIVE
- TcpIp状态变为OFFLINE
- 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_WAIT_OFFLINE
- 含义:正在关闭通信,等待TcpIp离线确认
- 特征:
- Controller Mode: ACTIVE
- Transceiver Mode: ACTIVE
- Transceiver Link: ACTIVE
- TcpIP Address: ONLINE
- ComM Mode: Full Communication
- 进入条件:从ONLINE状态收到COMM_NO_COMMUNICATION请求
- 退出条件:收到TcpIp OFFLINE确认
3.3 关键状态转换
转换 OFFLINE -> WAIT_TRCVLINK
- 触发条件:EthSM_RequestComMode(COMM_FULL_COMMUNICATION)
- 执行动作:
- EthIf_SetControllerMode(ETH_MODE_ACTIVE)
- BswM_EthSM_CurrentState(ETHSM_STATE_WAIT_TRCVLINK)
转换 WAIT_TRCVLINK -> WAIT_ONLINE
- 触发条件:EthSM_TrcvLinkStateChg(ETHTRCV_LINK_STATE_ACTIVE)
- 执行动作:
- TcpIp_RequestComMode(TCPIP_STATE_ONLINE)
- BswM_EthSM_CurrentState(ETHSM_STATE_WAIT_ONLINE)
转换 WAIT_ONLINE -> ONLINE
- 触发条件:EthSM_TcpIpModeIndication(TCPIP_STATE_ONLINE)
- 执行动作:
- BswM_EthSM_CurrentState(ETHSM_STATE_ONLINE)
- ComM_BusSM_ModeIndication(COMM_FULL_COMMUNICATION)
3.4 代码示例
/* 状态机处理函数 */
void EthSM_Internal_StateMachineHandler(NetworkHandleType NetworkHandle)
{EthSM_NetworkModeStateType currentState;EthSM_NetworkModeStateType nextState;ComM_ModeType requestedMode;boolean stateChanged = FALSE;currentState = EthSM_Internal_GetCurrentState(NetworkHandle);requestedMode = EthSM_Internal_GetRequestedComMode(NetworkHandle);nextState = currentState;/* 状态转换逻辑 */switch (currentState) {case ETHSM_STATE_OFFLINE:if (requestedMode == COMM_FULL_COMMUNICATION) {/* 启动控制器 */if (EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_ACTIVE) == E_OK) {nextState = ETHSM_STATE_WAIT_TRCVLINK;stateChanged = TRUE;}}break;case ETHSM_STATE_WAIT_TRCVLINK:if (requestedMode == COMM_NO_COMMUNICATION) {/* 关闭控制器 */EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;} else if (EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 请求TcpIp上线 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_ONLINE);nextState = ETHSM_STATE_WAIT_ONLINE;stateChanged = TRUE;}break;case ETHSM_STATE_WAIT_ONLINE:if (requestedMode == COMM_NO_COMMUNICATION) {/* 请求TcpIp离线并关闭控制器 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;} else if (!EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 链路断开,请求TcpIp离线 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);nextState = ETHSM_STATE_WAIT_TRCVLINK;stateChanged = TRUE;} else if (EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp已上线 */nextState = ETHSM_STATE_ONLINE;stateChanged = TRUE;/* 通知ComM达到全通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_FULL_COMMUNICATION);}break;case ETHSM_STATE_ONLINE:if (requestedMode == COMM_NO_COMMUNICATION) {/* 请求TcpIp离线 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);nextState = ETHSM_STATE_WAIT_OFFLINE;stateChanged = TRUE;} else if (!EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 链路断开,进入保持状态 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_ONHOLD);nextState = ETHSM_STATE_ONHOLD;stateChanged = TRUE;/* 报告链路断开事件 */if (EthSM_NetworkConfig[NetworkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[NetworkHandle].linkDownEventId,DEM_EVENT_STATUS_FAILED);}} else if (!EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp离线 */nextState = ETHSM_STATE_WAIT_ONLINE;stateChanged = TRUE;/* 通知ComM失去通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_ONHOLD:if (requestedMode == COMM_NO_COMMUNICATION) {/* 完全关闭 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;/* 通知ComM无通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);} else if (EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 链路恢复 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_ONLINE);nextState = ETHSM_STATE_ONLINE;stateChanged = TRUE;/* 清除链路断开事件 */if (EthSM_NetworkConfig[NetworkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[NetworkHandle].linkDownEventId,DEM_EVENT_STATUS_PASSED);}} else if (!EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp离线 */nextState = ETHSM_STATE_WAIT_TRCVLINK;stateChanged = TRUE;/* 通知ComM无通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_WAIT_OFFLINE:if (!EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp已离线,关闭控制器 */EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;/* 通知ComM无通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);}break;default:/* 未知状态,复位到离线 */nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;break;}/* 更新状态并通知BswM */if (stateChanged) {EthSM_Internal_SetCurrentState(NetworkHandle, nextState);BswM_EthSM_CurrentState(NetworkHandle, nextState);}
}/* 收发器链路状态变化回调 */
void EthSM_TrcvLinkStateChg(uint8 CtrlIdx, EthTrcv_LinkStateType TransceiverLinkState)
{NetworkHandleType networkHandle;/* 参数检查 */if (EthSM_ModuleInitialized == FALSE) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_TRCV_LINK_STATE_CHG, ETHSM_E_UNINIT);return;}/* 查找对应的网络句柄 */networkHandle = EthSM_Internal_GetNetworkHandleByCtrlIdx(CtrlIdx);if (networkHandle == ETHSM_INVALID_NETWORK_HANDLE) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_TRCV_LINK_STATE_CHG, ETHSM_E_PARAM_CONTROLLER);return;}/* 更新链路状态 */EthSM_Internal_SetTransceiverLinkState(networkHandle, TransceiverLinkState);/* 触发状态机处理将在下一个主函数周期执行 */
}
4. 操作序列分析
4.1 序列图概述
该序列图展示了EthSM在不同场景下的操作序列,包括从无通信到全通信的转换、从全通信到无通信的转换,以及链路状态变化处理。
4.2 参与者说明
参与者 ComM
- 角色:通信管理器,系统的通信协调中心
- 职责:
- 接收应用层的通信请求
- 向EthSM请求网络通信模式
- 接收EthSM的模式指示回调
参与者 EthSM
- 角色:以太网状态管理器,网络状态协调核心
- 职责:
- 处理ComM的通信模式请求
- 协调各层模块状态
- 实现复杂的状态机逻辑
- 向上层通知状态变化
参与者 BswM
- 角色:基础软件模式管理器
- 职责:
- 接收EthSM的状态通知
- 协调系统级的模式管理
参与者 TcpIp
- 角色:TCP/IP协议栈
- 职责:
- 处理EthSM的状态请求
- 向EthSM通知协议栈状态变化
参与者 EthIf
- 角色:以太网接口,硬件抽象层
- 职责:
- 执行EthSM的控制器操作请求
- 向EthSM通知硬件状态变化
4.3 操作组详细分析
操作组 从无通信到全通信的转换
- 场景:系统启动或应用请求建立网络通信
- 触发条件:ComM收到应用层的全通信请求
关键步骤序列:
-
ComM -> EthSM:
EthSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION)
- 目的:请求建立全通信
- 参数:网络句柄和通信模式
- 返回:E_OK表示请求被接受
-
EthSM -> EthIf:
EthIf_SetControllerMode(CtrlIdx, ETH_MODE_ACTIVE)
- 目的:激活以太网控制器
- 参数:控制器索引和目标模式
- 返回:操作结果
-
EthIf -> EthSM:
EthSM_CtrlModeIndication(CtrlIdx, ETH_MODE_ACTIVE)
- 目的:确认控制器模式变化
- 参数:控制器索引和当前模式
-
EthSM -> BswM:
BswM_EthSM_CurrentState(Network, ETHSM_STATE_WAIT_TRCVLINK)
- 目的:通知状态机进入等待收发器链路状态
- 参数:网络句柄和新状态
-
EthIf -> EthSM:
EthSM_TrcvLinkStateChg(NetworkHandle, ETHTRCV_LINK_STATE_ACTIVE)
- 目的:通知收发器链路变为活动状态
- 参数:网络句柄和链路状态
-
EthSM -> TcpIp:
TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONLINE)
- 目的:请求TcpIp协议栈上线
- 参数:控制器索引和目标状态
-
TcpIp -> EthSM:
EthSM_TcpIpModeIndication(CtrlIdx, TCPIP_STATE_ONLINE)
- 目的:确认TcpIp协议栈已上线
- 参数:控制器索引和当前状态
-
EthSM -> ComM:
ComM_BusSM_ModeIndication(Channel, COMM_FULL_COMMUNICATION)
- 目的:通知ComM已达到全通信状态
- 参数:通道和通信模式
操作组 从全通信到无通信的转换
- 场景:系统关闭或应用请求断开网络通信
- 触发条件:ComM收到应用层的无通信请求
操作组 链路状态变化处理(ONHOLD状态)
- 场景:网络通信过程中发生链路断开
- 触发条件:物理链路断开但TcpIp会话仍需保持
4.4 函数详细说明
函数 EthSM_RequestComMode
- 描述:ComM调用此函数请求EthSM改变网络通信模式,这是EthSM对外的主要API接口
- 参数:
- NetworkHandle [输入]: 标识特定以太网网络的句柄, 类型: NetworkHandleType, 取值范围: 0到配置的网络数量-1
- ComM_Mode [输入]: 请求的通信模式, 类型: ComM_ModeType, 取值范围: COMM_NO_COMMUNICATION或COMM_FULL_COMMUNICATION
- 返回值:
- E_OK: 请求被接受,状态机将在下一个主函数周期处理
- E_NOT_OK: 请求被拒绝,可能是参数无效或当前状态不允许
- 相关函数:
- 上层: ComM_RequestComMode调用此函数
- 下层: 此函数会调用EthIf_SetControllerMode和TcpIp_RequestComMode
- 并列: EthSM_GetCurrentComMode提供状态查询功能
函数 EthSM_TrcvLinkStateChg
- 描述:EthIf调用此函数通知EthSM收发器链路状态变化,是硬件状态向软件状态的关键桥梁
- 参数:
- CtrlIdx [输入]: EthIf控制器索引,用于识别通信网络, 类型: uint8, 取值范围: 0-255
- TransceiverLinkState [输入]: 收发器的实际链路状态, 类型: EthTrcv_LinkStateType, 取值范围: ETHTRCV_LINK_STATE_DOWN或ETHTRCV_LINK_STATE_ACTIVE
- 返回值:
- 无返回值(void函数)
- 相关函数:
- 上层: EthIf模块调用此函数
- 下层: 此函数会触发状态机在主函数中的处理
- 并列: EthSM_CtrlModeIndication处理控制器状态变化
函数 EthSM_TcpIpModeIndication
- 描述:TcpIp模块调用此函数报告实际的TcpIp状态,确保状态机与协议栈状态同步
- 参数:
- CtrlIdx [输入]: 控制器索引,标识TcpIp状态变化的网络, 类型: uint8, 取值范围: 0-255
- TcpIpState [输入]: TcpIp模块的实际状态, 类型: TcpIp_StateType, 取值范围: TCPIP_STATE_OFFLINE, TCPIP_STATE_ONLINE, TCPIP_STATE_ONHOLD
- 返回值:
- 无返回值(void函数)
- 相关函数:
- 上层: TcpIp模块调用此函数
- 下层: 此函数会触发状态机处理和ComM通知
- 并列: EthSM_TrcvLinkStateChg处理链路层状态变化
4.5 代码示例
/* 完整的通信建立序列实现 */
Std_ReturnType EthSM_EstablishCommunication(NetworkHandleType NetworkHandle)
{EthSM_NetworkModeStateType currentState;uint8 ethIfCtrlIdx;Std_ReturnType result = E_NOT_OK;uint32 timeout = 0;const uint32 MAX_TIMEOUT = 1000; /* 最大等待时间(主函数周期数) *//* 获取当前状态 */currentState = EthSM_Internal_GetCurrentState(NetworkHandle);ethIfCtrlIdx = EthSM_NetworkConfig[NetworkHandle].ethIfControllerId;/* 只能从OFFLINE状态开始建立通信 */if (currentState != ETHSM_STATE_OFFLINE) {return E_NOT_OK;}/* 步骤1: 请求全通信模式 */result = EthSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION);if (result != E_OK) {return result;}/* 等待状态转换到WAIT_TRCVLINK */timeout = 0;do {EthSM_MainFunction(); /* 触发状态机处理 */currentState = EthSM_Internal_GetCurrentState(NetworkHandle);timeout++;} while ((currentState != ETHSM_STATE_WAIT_TRCVLINK) && (timeout < MAX_TIMEOUT));if (currentState != ETHSM_STATE_WAIT_TRCVLINK) {return E_NOT_OK; /* 超时 */}/* 步骤2: 等待收发器链路激活 *//* 这通常由硬件事件触发,这里模拟等待过程 */timeout = 0;do {EthSM_MainFunction();currentState = EthSM_Internal_GetCurrentState(NetworkHandle);timeout++;/* 检查链路状态 */if (EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {break;}} while (timeout < MAX_TIMEOUT);if (!EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {return E_NOT_OK; /* 链路建立失败 */}/* 步骤3: 等待TcpIp上线 */timeout = 0;do {EthSM_MainFunction();currentState = EthSM_Internal_GetCurrentState(NetworkHandle);timeout++;} while ((currentState != ETHSM_STATE_ONLINE) && (timeout < MAX_TIMEOUT));if (currentState == ETHSM_STATE_ONLINE) {return E_OK; /* 通信建立成功 */} else {return E_NOT_OK; /* 建立失败 */}
}/* 链路状态变化处理的完整实现 */
void EthSM_HandleLinkStateChange(uint8 CtrlIdx, EthTrcv_LinkStateType LinkState)
{NetworkHandleType networkHandle;EthSM_NetworkModeStateType currentState;/* 查找对应的网络句柄 */networkHandle = EthSM_Internal_GetNetworkHandleByCtrlIdx(CtrlIdx);if (networkHandle == ETHSM_INVALID_NETWORK_HANDLE) {return;}currentState = EthSM_Internal_GetCurrentState(networkHandle);/* 根据当前状态和链路状态处理 */switch (currentState) {case ETHSM_STATE_WAIT_TRCVLINK:if (LinkState == ETHTRCV_LINK_STATE_ACTIVE) {/* 链路建立,请求TcpIp上线 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);}break;case ETHSM_STATE_WAIT_ONLINE:if (LinkState == ETHTRCV_LINK_STATE_DOWN) {/* 链路断开,回到等待链路状态 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_OFFLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);}break;case ETHSM_STATE_ONLINE:if (LinkState == ETHTRCV_LINK_STATE_DOWN) {/* 链路断开,进入保持状态 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONHOLD);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONHOLD);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONHOLD);/* 报告生产错误 */if (EthSM_NetworkConfig[networkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[networkHandle].linkDownEventId,DEM_EVENT_STATUS_FAILED);}}break;case ETHSM_STATE_ONHOLD:if (LinkState == ETHTRCV_LINK_STATE_ACTIVE) {/* 链路恢复,回到在线状态 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONLINE);/* 清除生产错误 */if (EthSM_NetworkConfig[networkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[networkHandle].linkDownEventId,DEM_EVENT_STATUS_PASSED);}}break;default:/* 其他状态下的链路变化暂时忽略 */break;}/* 更新内部链路状态记录 */EthSM_Internal_SetTransceiverLinkState(networkHandle, LinkState);
}/* TcpIp状态指示处理 */
void EthSM_ProcessTcpIpModeIndication(uint8 CtrlIdx, TcpIp_StateType TcpIpState)
{NetworkHandleType networkHandle;EthSM_NetworkModeStateType currentState;/* 查找对应的网络句柄 */networkHandle = EthSM_Internal_GetNetworkHandleByCtrlIdx(CtrlIdx);if (networkHandle == ETHSM_INVALID_NETWORK_HANDLE) {return;}currentState = EthSM_Internal_GetCurrentState(networkHandle);/* 根据当前状态和TcpIp状态处理 */switch (currentState) {case ETHSM_STATE_WAIT_ONLINE:if (TcpIpState == TCPIP_STATE_ONLINE) {/* TcpIp上线,进入在线状态 */EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_FULL_COMMUNICATION);}break;case ETHSM_STATE_ONLINE:if (TcpIpState == TCPIP_STATE_OFFLINE) {/* TcpIp离线,回到等待在线状态 */EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_ONHOLD:if (TcpIpState == TCPIP_STATE_OFFLINE) {/* TcpIp离线,回到等待收发器链路状态 */EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);ComM_BusSM_ModeIndication(networkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_WAIT_OFFLINE:if (TcpIpState == TCPIP_STATE_OFFLINE) {/* TcpIp已离线,关闭控制器并进入离线状态 */EthIf_SetControllerMode(CtrlIdx, ETH_MODE_DOWN);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_OFFLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_OFFLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_NO_COMMUNICATION);}break;default:/* 其他状态下的TcpIp状态变化暂时忽略 */break;}/* 更新内部TcpIp状态记录 */EthSM_Internal_SetTcpIpState(networkHandle, TcpIpState);
}
5. 配置模型
5.1 配置模型概述
EthSM的配置模型定义了模块的静态配置结构,支持预编译时配置变体,包含全局配置参数和网络特定配置参数。
5.2 配置容器详细说明
类 EthSM
- 功能:EthSM模块的根配置容器
- 关键属性:
- description:
- 描述:配置容器的描述信息
- 类型:字符串
- 取值范围:固定值"Configuration of the Ethernet State Manager"
- 默认值:N/A
- 约束:不可修改
- 来源:AUTOSAR规范定义
- supportedConfigVariants:
- 描述:支持的配置变体类型
- 类型:枚举
- 取值范围:VARIANT-PRE-COMPILE
- 默认值:VARIANT-PRE-COMPILE
- 约束:当前版本仅支持预编译配置
- 来源:AUTOSAR BSW通用要求
- postBuildVariantSupport:
- 描述:是否支持构建后配置变体
- 类型:布尔值
- 取值范围:true/false
- 默认值:false
- 约束:当前版本不支持构建后配置
- 来源:模块实现限制
- description:
类 EthSMGeneral
- 功能:包含EthSM的全局配置参数
- 关键属性:
- description:
- 描述:全局参数容器的说明
- 类型:字符串
- 取值范围:固定值"This container contains the global parameter of the Ethernet State Manager"
- 默认值:N/A
- 约束:描述性文本,不可配置
- 来源:AUTOSAR规范要求
- multiplicity:
- 描述:容器的多重性
- 类型:整数
- 取值范围:1
- 默认值:1
- 约束:每个EthSM模块只能有一个全局配置容器
- 来源:模块架构设计
- description:
类 EthSMNetwork
- 功能:包含以太网网络特定的配置参数
- 关键属性:
- description:
- 描述:网络配置容器的说明
- 类型:字符串
- 取值范围:固定值"This container contains the Ethernet network-specific parameters"
- 默认值:N/A
- 约束:描述性文本
- 来源:AUTOSAR规范要求
- multiplicity:
- 描述:容器的多重性
- 类型:范围
- 取值范围:1…*
- 默认值:N/A
- 约束:至少需要配置一个网络,支持多个网络
- 来源:多网络支持需求
- description:
5.3 配置参数详细说明
类 EthSMDevErrorDetect
- 功能:控制开发错误检测和通知的开关
- 关键属性:
- name:
- 描述:参数名称标识符
- 类型:字符串
- 取值范围:固定值"EthSMDevErrorDetect"
- 默认值:N/A
- 约束:符合AUTOSAR命名规范
- 来源:AUTOSAR BSW通用要求
- type:
- 描述:参数数据类型
- 类型:类型定义
- 取值范围:EcucBooleanParamDef
- 默认值:N/A
- 约束:必须是布尔类型
- 来源:AUTOSAR ECUC规范
- defaultValue:
- 描述:参数的默认值
- 类型:布尔值
- 取值范围:true/false
- 默认值:false
- 约束:开发阶段建议设为true,生产阶段设为false
- 来源:性能和调试需求平衡
- scope:
- 描述:参数的作用域
- 类型:枚举
- 取值范围:local/global
- 默认值:local
- 约束:仅影响本模块
- 来源:模块封装原则
- name:
类 EthSMMainFunctionPeriod
- 功能:指定主函数的调用周期
- 关键属性:
- type:
- 描述:参数数据类型
- 类型:类型定义
- 取值范围:EcucFloatParamDef
- 默认值:N/A
- 约束:必须是浮点数类型
- 来源:时间精度要求
- range:
- 描述:参数的有效取值范围
- 类型:数值范围
- 取值范围:]0 … INF[
- 默认值:N/A
- 约束:必须大于0,单位为秒
- 来源:系统实时性要求
- type:
类 EthSMComMNetworkHandleRef
- 功能:引用ComM模块的网络句柄
- 关键属性:
- type:
- 描述:引用类型
- 类型:符号名引用
- 取值范围:Symbolic name reference to [ComMChannel]
- 默认值:N/A
- 约束:必须引用有效的ComM通道
- 来源:模块间接口一致性要求
- multiplicity:
- 描述:引用的多重性
- 类型:整数
- 取值范围:1
- 默认值:N/A
- 约束:每个EthSM网络必须对应一个ComM通道
- 来源:一对一映射关系
- type:
5.4 状态枚举说明
类 EthSM_NetworkModeStateType
- 功能:定义网络模式状态机的所有状态
- 关键属性:
- ETHSM_STATE_OFFLINE:
- 描述:EthSM初始化时的状态
- 类型:枚举值
- 取值范围:0
- 默认值:N/A
- 约束:系统启动时的默认状态
- 来源:状态机设计
- ETHSM_STATE_WAIT_TRCVLINK:
- 描述:ComM请求COMM_FULL_COMMUNICATION时进入的状态
- 类型:枚举值
- 取值范围:1
- 默认值:N/A
- 约束:控制器已激活但链路未建立
- 来源:硬件激活序列
- ETHSM_STATE_ONLINE:
- 描述:IP通信可用时的状态
- 类型:枚举值
- 取值范围:3
- 默认值:N/A
- 约束:所有通信条件满足
- 来源:全通信状态定义
- ETHSM_STATE_OFFLINE:
5.5 关系说明
关系 EthSM–EthSMGeneral
- 关系类型:组合关系(包含)
- 多重性:1对1
- 业务含义:每个EthSM模块包含一个全局配置容器
关系 EthSM–EthSMNetwork
- 关系类型:组合关系(包含)
- 多重性:1对多(1…*)
- 业务含义:每个EthSM模块可以包含多个网络配置,支持多网络环境
关系 EthSMComMNetworkHandleRef–ComMChannel
- 关系类型:引用关系
- 多重性:1对1
- 业务含义:EthSM网络配置必须引用有效的ComM通道配置
5.6 代码示例
/* AUTOSAR EthSM配置数据结构定义 *//* 全局配置参数结构 */
typedef struct {boolean devErrorDetect; /* 开发错误检测开关 */float32 mainFunctionPeriod; /* 主函数周期(秒) */boolean dummyMode; /* 虚拟模式开关 */boolean versionInfoApi; /* 版本信息API开关 */
} EthSM_GeneralConfigType;/* DEM事件参数引用结构 */
typedef struct {boolean configured; /* 是否配置了DEM事件 */Dem_EventIdType linkDownEventId; /* 链路断开事件ID */
} EthSM_DemEventParameterRefsType;/* 网络特定配置结构 */
typedef struct {NetworkHandleType commNetworkHandleRef; /* ComM网络句柄引用 */uint8 ethIfControllerRef; /* EthIf控制器引用 */EthSM_DemEventParameterRefsType demEventParameterRefs; /* DEM事件参数引用 */
} EthSM_NetworkConfigType;/* EthSM完整配置结构 */
typedef struct {EthSM_GeneralConfigType general; /* 全局配置 */uint8 numberOfNetworks; /* 网络数量 */EthSM_NetworkConfigType* networkConfigs; /* 网络配置数组 */
} EthSM_ConfigType;/* 配置数据实例 */
const EthSM_GeneralConfigType EthSM_GeneralConfig = {.devErrorDetect = TRUE, /* 开发阶段启用错误检测 */.mainFunctionPeriod = 0.01f, /* 10ms周期 */.dummyMode = FALSE, /* 非虚拟模式 */.versionInfoApi = TRUE /* 启用版本信息API */
};const EthSM_DemEventParameterRefsType EthSM_Network0_DemEvents = {.configured = TRUE,.linkDownEventId = DemConf_DemEventParameter_EthSM_E_LINK_DOWN_Network0
};const EthSM_NetworkConfigType EthSM_NetworkConfigs[ETHSM_NUMBER_OF_NETWORKS] = {{.commNetworkHandleRef = ComMConf_ComMChannel_EthNetwork0,.ethIfControllerRef = EthIfConf_EthIfController_EthController0,.demEventParameterRefs = EthSM_Network0_DemEvents},/* 可以添加更多网络配置 */
};const EthSM_ConfigType EthSM_Config = {.general = EthSM_GeneralConfig,.numberOfNetworks = ETHSM_NUMBER_OF_NETWORKS,.networkConfigs = (EthSM_NetworkConfigType*)EthSM_NetworkConfigs
};/* 配置访问函数 */
boolean EthSM_IsDevErrorDetectEnabled(void)
{return EthSM_Config.general.devErrorDetect;
}float32 EthSM_GetMainFunctionPeriod(void)
{return EthSM_Config.general.mainFunctionPeriod;
}NetworkHandleType EthSM_GetComMNetworkHandle(NetworkHandleType EthSMNetworkHandle)
{if (EthSMNetworkHandle < EthSM_Config.numberOfNetworks) {return EthSM_Config.networkConfigs[EthSMNetworkHandle].commNetworkHandleRef;}return COMM_INVALID_NETWORK_HANDLE;
}uint8 EthSM_GetEthIfControllerIndex(NetworkHandleType EthSMNetworkHandle)
{if (EthSMNetworkHandle < EthSM_Config.numberOfNetworks) {return EthSM_Config.networkConfigs[EthSMNetworkHandle].ethIfControllerRef;}return ETHIF_INVALID_CONTROLLER_IDX;
}/* 配置验证函数 */
Std_ReturnType EthSM_ValidateConfiguration(const EthSM_ConfigType* ConfigPtr)
{uint8 networkIndex;/* 检查配置指针 */if (ConfigPtr == NULL) {return E_NOT_OK;}/* 检查全局配置 */if (ConfigPtr->general.mainFunctionPeriod <= 0.0f) {return E_NOT_OK; /* 主函数周期必须大于0 */}/* 检查网络数量 */if ((ConfigPtr->numberOfNetworks == 0) || (ConfigPtr->numberOfNetworks > ETHSM_MAX_NUMBER_OF_NETWORKS)) {return E_NOT_OK;}/* 检查网络配置数组 */if (ConfigPtr->networkConfigs == NULL) {return E_NOT_OK;}/* 验证每个网络配置 */for (networkIndex = 0; networkIndex < ConfigPtr->numberOfNetworks; networkIndex++) {const EthSM_NetworkConfigType* networkConfig = &ConfigPtr->networkConfigs[networkIndex];/* 检查ComM网络句柄引用 */if (networkConfig->commNetworkHandleRef >= COMM_NUMBER_OF_CHANNELS) {return E_NOT_OK;}/* 检查EthIf控制器引用 */if (networkConfig->ethIfControllerRef >= ETHIF_NUMBER_OF_CONTROLLERS) {return E_NOT_OK;}/* 检查DEM事件配置 */if (networkConfig->demEventParameterRefs.configured) {if (networkConfig->demEventParameterRefs.linkDownEventId >= DEM_NUMBER_OF_EVENTS) {return E_NOT_OK;}}}return E_OK; /* 配置验证通过 */
}/* 配置初始化函数 */
void EthSM_InitializeFromConfig(const EthSM_ConfigType* ConfigPtr)
{uint8 networkIndex;/* 验证配置 */if (EthSM_ValidateConfiguration(ConfigPtr) != E_OK) {/* 配置无效,使用默认配置或报告错误 */Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID, ETHSM_SID_INIT, ETHSM_E_PARAM_CONFIG);return;}/* 初始化全局状态 */EthSM_ModuleInitialized = FALSE;EthSM_ConfigPtr = ConfigPtr;/* 初始化每个网络的状态 */for (networkIndex = 0; networkIndex < ConfigPtr->numberOfNetworks; networkIndex++) {EthSM_Internal_InitializeNetwork(networkIndex);}/* 标记模块已初始化 */EthSM_ModuleInitialized = TRUE;
}
6. API规范
6.1 主要API函数
6.1.1 初始化函数
EthSM_Init()
- 功能:初始化EthSM模块
- 语法:
void EthSM_Init(void)
- 参数:无
- 返回值:无
- 说明:该函数初始化EthSM模块,必须在使用其他API之前调用
6.1.2 通信模式管理
EthSM_RequestComMode()
- 功能:请求网络通信模式
- 语法:
Std_ReturnType EthSM_RequestComMode(NetworkHandleType NetworkHandle, ComM_ModeType ComM_Mode)
- 参数:
NetworkHandle
:目标网络句柄ComM_Mode
:请求的通信模式
- 返回值:
E_OK
:请求被接受E_NOT_OK
:请求被拒绝
- 错误条件:
ETHSM_E_UNINIT
:模块未初始化ETHSM_E_INVALID_NETWORK_HANDLE
:无效的网络句柄ETHSM_E_INVALID_NETWORK_MODE
:无效的通信模式
EthSM_GetCurrentComMode()
- 功能:获取当前网络通信模式
- 语法:
Std_ReturnType EthSM_GetCurrentComMode(NetworkHandleType NetworkHandle, ComM_ModeType* ComM_ModePtr)
- 参数:
NetworkHandle
:网络句柄ComM_ModePtr
:输出当前通信模式的指针
- 返回值:
E_OK
:服务成功E_NOT_OK
:服务失败
6.2 回调函数
6.2.1 硬件状态回调
EthSM_CtrlModeIndication()
- 功能:控制器模式变化通知
- 语法:
void EthSM_CtrlModeIndication(uint8 CtrlIdx, Eth_ModeType CtrlMode)
- 参数:
CtrlIdx
:控制器索引CtrlMode
:当前控制器模式
EthSM_TrcvLinkStateChg()
- 功能:收发器链路状态变化通知
- 语法:
void EthSM_TrcvLinkStateChg(uint8 CtrlIdx, EthTrcv_LinkStateType TransceiverLinkState)
- 参数:
CtrlIdx
:控制器索引TransceiverLinkState
:收发器链路状态
6.2.2 协议栈状态回调
EthSM_TcpIpModeIndication()
- 功能:TcpIp状态变化通知
- 语法:
void EthSM_TcpIpModeIndication(uint8 CtrlIdx, TcpIp_StateType TcpIpState)
- 参数:
CtrlIdx
:控制器索引TcpIpState
:TcpIp状态
6.3 调度函数
EthSM_MainFunction()
- 功能:EthSM主函数,执行状态机处理
- 语法:
void EthSM_MainFunction(void)
- 参数:无
- 返回值:无
- 说明:该函数必须周期性调用,处理状态机转换和内部逻辑
7. 错误处理机制
7.1 错误分类
7.1.1 开发错误
- ETHSM_E_UNINIT (0x02):模块未初始化
- ETHSM_E_INVALID_NETWORK_HANDLE (0x04):无效的网络句柄
- ETHSM_E_PARAM_POINTER (0x03):参数列表中的无效指针
- ETHSM_E_INVALID_NETWORK_MODE (0x01):无效的通信模式
- ETHSM_E_PARAM_CONTROLLER (0x07):无效的控制器参数
- ETHSM_E_INVALID_TCP_IP_MODE (0x05):无效的TcpIp状态
7.1.2 生产错误
- ETHSM_E_LINK_DOWN:链路断开检测
- 检测条件:收发器从"up"状态切换到"down"状态时报告
- 报告时机:
- FAIL:从ETHSM_STATE_ONLINE转换到ETHSM_STATE_ONHOLD时
- PASS:从ETHSM_STATE_ONHOLD转换到ETHSM_STATE_ONLINE时
- 监控频率:连续监控
- 推荐DTC:N/A
7.2 错误处理策略
- 开发错误:通过DET模块报告,用于开发和调试阶段
- 生产错误:通过DEM模块报告,用于生产环境的故障诊断
- 错误恢复:EthSM实现自动错误恢复机制,如链路断开后的自动重连
8. 总结
8.1 EthSM的优势
-
标准化接口:
- 提供AUTOSAR标准化的以太网状态管理接口
- 确保不同供应商模块间的兼容性
- 简化系统集成复杂度
-
灵活的状态管理:
- 6状态状态机覆盖所有通信场景
- 支持快速链路恢复(ONHOLD状态)
- 优雅的错误处理和恢复机制
-
多网络支持:
- 支持多个独立以太网网络
- 每个网络独立的状态管理
- 支持VLAN等虚拟网络技术
8.2 应用场景
-
车载以太网通信:
- 信息娱乐系统网络管理
- ADAS系统高带宽数据传输
- 车载诊断和远程升级
-
工业以太网应用:
- 实时控制网络管理
- 设备间高速数据交换
- 分布式系统协调
-
嵌入式网络系统:
- IoT设备网络连接管理
- 边缘计算节点通信
- 系统级网络状态协调
EthSM作为AUTOSAR架构中的关键组件,为复杂的以太网通信系统提供了可靠、标准化的状态管理解决方案,是现代车载和工业网络系统不可或缺的基础软件模块。