AUTOSAR模式管理系统详解
目录
1. 概述
1.1 模式管理的作用
AUTOSAR模式管理是汽车电子控制单元(ECU)的核心功能之一,负责协调ECU各组件的运行状态、通信能力和功耗管理。模式管理确保汽车电子系统在不同工作环境下能够高效、可靠地运行,同时优化能源消耗和系统性能。
在AUTOSAR架构中,模式管理涉及多个层次和组件,包括应用层、中间层和基础软件层的模式状态和转换。模式管理对于实现以下关键功能至关重要:
- 电源管理:控制ECU的启动、运行和关闭状态
- 通信协调:管理网络通信的不同模式
- 功能降级:在异常情况下实现安全的系统降级
- 资源优化:根据实际需求调整系统资源分配
1.2 模式管理组件
AUTOSAR模式管理主要由以下四个关键组件组成:
- ECU状态管理器(EcuM):管理ECU的启动和关闭,控制ECU的电源状态
- 通信管理器(ComM):协调ECU的通信需求,管理通信网络的状态
- BSW模式管理器(BswM):组织模式处理和模式相关交互,是模式管理的中央协调器
- 看门狗管理器(WdgM):监控应用程序的活动状态,确保系统运行的安全性
这些组件相互协作,共同构成了AUTOSAR模式管理系统的完整解决方案。
2. AUTOSAR模式管理架构
2.1 整体架构图
2.2 关键组件解析
组件 ECU状态管理器(EcuM):
- 职责: ECU状态管理器是一个基础软件模块,负责管理ECU的状态。
- 功能点:
- 控制ECU的启动和关闭流程
- 管理所有唤醒事件
- 支持多种关闭目标,包括关闭电源和睡眠模式
- 配置ECU进入睡眠模式以降低功耗
组件 通信管理器(ComM):
- 职责: 通信管理器控制各个物理通道的通信模式,协调通信需求。
- 功能点:
- 提供API允许收集通信请求
- 支持每个物理通道的两种通信模式:全通信和无通信
- 根据请求启动和维持通道唤醒
- 提供通信模式变更的通知机制
组件 BSW模式管理器(BswM):
- 职责: BSW模式管理器负责支持模式管理,协调不同层次的模式交互。
- 功能点:
- 接收并仲裁来自不同源的模式请求
- 管理模式声明组及其状态转换
- 在各种模式级别之间建立关系
- 提供模式变更通知给模式用户
组件 看门狗管理器(WdgM):
- 职责: 看门狗管理器收集独立应用程序的活动指示和正确执行顺序,并将其传递给硬件看门狗。
- 功能点:
- 监控应用程序的活动状态
- 检测执行顺序错误
- 在启动、关闭和睡眠过程中提供活动监督
- 控制硬件看门狗的触发机制
这些组件通过明确定义的接口和依赖关系相互协作,共同实现ECU的模式管理功能。以下是对应的代码示例,展示这些组件之间的接口关系:
/* ECU状态管理器初始化函数 */
Std_ReturnType EcuM_Init(void)
{
/* 初始化ECU状态机 */
EcuM_State = ECUM_STATE_STARTUP;
/* 初始化其他模式管理模块 */
WdgM_Init();
ComM_Init();
BswM_Init();
/* 设置默认关闭目标 */
EcuM_ShutdownTarget = ECUM_SHUTDOWN_TARGET_SLEEP;
return E_OK;
}
/* 通信管理器通信请求函数 */
Std_ReturnType ComM_RequestComMode(ComM_UserHandleType User, ComM_ModeType ComMode)
{
Std_ReturnType result = E_NOT_OK;
/* 检查参数有效性 */
if (User < COMM_NUM_USERS && (ComMode == COMM_FULL_COMMUNICATION || ComMode == COMM_NO_COMMUNICATION)) {
/* 更新用户请求 */
ComM_UserRequests[User] = ComMode;
/* 通知BSW模式管理器通信模式请求变更 */
BswM_ComM_ModeUpdate(User, ComMode);
result = E_OK;
}
return result;
}
/* BSW模式管理器模式切换函数 */
void BswM_ModeSwitch(BswM_ModeDeclarationGroupType Group, BswM_ModeType Mode)
{
/* 更新模式组状态 */
BswM_ModeGroups[Group] = Mode;
/* 根据模式变更执行相应操作 */
switch (Group) {
case BSWM_MDG_ECU_STATE:
/* 通知ECU状态管理器 */
EcuM_SetState(Mode);
break;
case BSWM_MDG_COMM_MODE:
/* 通知通信管理器 */
ComM_SetMode(Mode);
break;
default:
/* 处理其他模式组 */
break;
}
}
3. ECU状态管理器
3.1 状态转换流程
3.2 关键状态解析
状态 RESET:
- 描述: ECU上电或复位后的初始状态,负责硬件初始化和基本驱动初始化。
- 触发条件: ECU上电或系统复位。
- 职责:
- 执行硬件初始化
- 初始化基本驱动程序
- 确定复位原因(上电、看门狗、软件复位等)
状态 STARTUP_I:
- 描述: 操作系统(OS)启动前的预初始化阶段。
- 触发条件: 从RESET状态转换过来。
- 职责:
- 执行OS前初始化
- 初始化核心模块
- 准备OS启动环境
状态 STARTUP_II:
- 描述: 操作系统启动后的初始化阶段。
- 触发条件: OS初始化完成。
- 职责:
- 初始化所有BSW模块
- 启动应用软件
- 配置通信和诊断功能
状态 RUN:
- 描述: ECU的正常运行状态。
- 触发条件: 所有初始化完成。
- 职责:
- 维持所有BSW模块的活动状态
- 允许应用软件运行
- 处理所有用户请求
状态 POST_RUN:
- 描述: 准备进入关闭流程的过渡状态。
- 触发条件: 收到关闭请求。
- 职责:
- 通知相关模块即将关闭
- 准备系统关闭
- 完成关键任务
状态 SLEEP:
- 描述: ECU的低功耗模式。
- 触发条件: 选择睡眠模式关闭。
- 职责:
- 维持最低功耗状态
- 保持配置的唤醒源处于活动状态
- 等待唤醒事件
以下是ECU状态管理器状态转换的代码示例:
/* ECU状态管理器状态处理函数 */
void EcuM_MainFunction(void)
{
switch (EcuM_State) {
case ECUM_STATE_STARTUP_ONE:
/* 执行STARTUP_I阶段任务 */
if (EcuM_StartupOneCompleted) {
/* 初始化操作系统 */
StartOS(OSDEFAULTAPPMODE);
EcuM_State = ECUM_STATE_STARTUP_TWO;
}
break;
case ECUM_STATE_STARTUP_TWO:
/* 执行STARTUP_II阶段任务 */
if (EcuM_StartupTwoCompleted) {
/* 通知BSW模式管理器进入RUN状态 */
BswM_EcuM_CurrentState(ECUM_STATE_APP_RUN);
EcuM_State = ECUM_STATE_APP_RUN;
}
break;
case ECUM_STATE_APP_RUN:
/* 检查是否有关闭请求 */
if (EcuM_ShutdownRequested) {
/* 通知进入POST_RUN状态 */
BswM_EcuM_CurrentState(ECUM_STATE_APP_POST_RUN);
EcuM_State = ECUM_STATE_APP_POST_RUN;
}
break;
case ECUM_STATE_APP_POST_RUN:
/* 执行关闭准备 */
if (EcuM_PostRunCompleted) {
/* 根据关闭目标选择下一个状态 */
if (EcuM_ShutdownTarget == ECUM_SHUTDOWN_TARGET_SLEEP) {
EcuM_State = ECUM_STATE_GO_SLEEP;
} else {
EcuM_State = ECUM_STATE_GO_OFF;
}
}
break;
case ECUM_STATE_GO_SLEEP:
/* 配置MCU进入睡眠模式 */
Mcu_SetMode(MCU_MODE_SLEEP);
EcuM_State = ECUM_STATE_SLEEP;
break;
case ECUM_STATE_SLEEP:
/* 睡眠状态,等待唤醒中断 */
/* 唤醒后会由ISR处理 */
break;
case ECUM_STATE_WAKEUP:
/* 处理唤醒 */
EcuM_State = ECUM_STATE_STARTUP_ONE;
break;
case ECUM_STATE_GO_OFF:
/* 关闭所有外设和MCU */
Mcu_SetMode(MCU_MODE_OFF);
EcuM_State = ECUM_STATE_OFF;
break;
default:
/* 处理未知状态 */
break;
}
}
4. 通信管理器
4.1 通信状态转换
4.2 通信模式控制
状态 NO_COM:
- 描述: 无通信状态,通信硬件完全关闭。
- 触发条件: 初始化完成或无通信请求超时。
- 职责:
- 通信硬件处于关闭状态
- 网络管理模块处于睡眠状态
- 系统处于最低功耗通信状态
状态 PASSIVE_WAKEUP:
- 描述: 被动唤醒状态,由外部网络消息触发。
- 触发条件: 接收到网络消息。
- 职责:
- 监听网络消息
- 等待本地通信请求
- 如无用户请求则超时返回睡眠
状态 FULL_COM:
- 描述: 全通信状态,允许发送和接收操作。
- 触发条件: 用户请求通信或被动唤醒后收到通信请求。
- 职责:
- 通信网络完全激活
- 允许发送和接收操作
- 网络管理处于活动状态
状态 READY_SLEEP:
- 描述: 准备睡眠状态,等待进入无通信状态。
- 触发条件: 无通信请求时从FULL_COM转换。
- 职责:
- 通信请求已释放
- 等待超时再关闭通信
- 可以由新请求重新激活
通信管理器支持两种通信模式:全通信和无通信。从源文档中可以看出,这些模式有隐含的顺序,全通信是"最高"模式,而无通信是"最低"模式。以下是通信管理器的代码示例:
/* 通信管理器状态处理函数 */
void ComM_MainFunction(void)
{
uint8 channel;
/* 处理每个通信通道 */
for (channel = 0; channel < COMM_CHANNEL_COUNT; channel++) {
switch (ComM_ChannelState[channel]) {
case COMM_NO_COMMUNICATION:
/* 检查是否有通信请求 */
if (ComM_HasRequest(channel)) {
/* 有用户请求通信,直接进入全通信状态 */
ComM_ChannelState[channel] = COMM_FULL_COMMUNICATION;
ComM_ActivateNetworkCommunication(channel);
} else if (ComM_IsNetworkMessageReceived(channel)) {
/* 接收到网络消息,进入被动唤醒状态 */
ComM_ChannelState[channel] = COMM_PASSIVE_WAKE_UP;
ComM_StartTimer(channel, COMM_T_PASSIVE_WAKE_UP);
}
break;
case COMM_PASSIVE_WAKE_UP:
/* 检查是否有通信请求 */
if (ComM_HasRequest(channel)) {
/* 有用户请求通信,进入全通信状态 */
ComM_ChannelState[channel] = COMM_FULL_COMMUNICATION;
ComM_ActivateNetworkCommunication(channel);
} else if (ComM_IsTimerExpired(channel)) {
/* 超时无请求,返回无通信状态 */
ComM_ChannelState[channel] = COMM_NO_COMMUNICATION;
ComM_DeactivateNetworkCommunication(channel);
}
break;
case COMM_FULL_COMMUNICATION:
/* 检查是否仍有通信请求 */
if (!ComM_HasRequest(channel)) {
/* 无通信请求,进入准备睡眠状态 */
ComM_ChannelState[channel] = COMM_READY_SLEEP;
ComM_StartTimer(channel, COMM_T_MIN_FULL_COM_MODE_DURATION);
}
break;
case COMM_READY_SLEEP:
/* 检查是否有新的通信请求 */
if (ComM_HasRequest(channel)) {
/* 有新的通信请求,返回全通信状态 */
ComM_ChannelState[channel] = COMM_FULL_COMMUNICATION;
} else if (ComM_IsTimerExpired(channel)) {
/* 超时无请求,进入无通信状态 */
ComM_ChannelState[channel] = COMM_NO_COMMUNICATION;
ComM_DeactivateNetworkCommunication(channel);
}
break;
default:
/* 处理未知状态 */
break;
}
/* 通知状态变化 */
ComM_NotifyStateChange(channel, ComM_ChannelState[channel]);
}
}
/* 通信请求函数 */
Std_ReturnType ComM_RequestComMode(ComM_UserHandleType User, ComM_ModeType ComMode)
{
Std_ReturnType result = E_NOT_OK;
uint8 channel;
/* 检查参数有效性 */
if (User < COMM_USER_COUNT &&
(ComMode == COMM_FULL_COMMUNICATION || ComMode == COMM_NO_COMMUNICATION)) {
/* 更新用户请求 */
ComM_UserRequest[User] = ComMode;
result = E_OK;
/* 更新关联通道的状态 */
for (channel = 0; channel < COMM_CHANNEL_COUNT; channel++) {
if (ComM_IsUserAssignedToChannel(User, channel)) {
ComM_EvaluateChannelState(channel);
}
}
}
return result;
}
5. BSW模式管理器
5.1 模式交互机制
5.2 模式请求与仲裁
BSW模式管理器是AUTOSAR模式管理架构中的核心组件,负责协调不同层次和不同组件之间的模式变化。以下是BSW模式管理器的关键功能解析:
组件 模式请求源:
- 描述: 各种可以发起模式变更请求的组件。
- 类型:
- 应用软件组件(SWC): 应用级别的模式请求
- 通信事件: 通信状态变化触发的请求
- 网络事件: 网络状态变化触发的请求
- ECU事件: ECU状态变化触发的请求
- 诊断事件: 诊断会话变化触发的请求
组件 模式声明组:
- 描述: 定义一组相关的模式状态及其转换规则。
- 类型:
- ECU模式: 定义ECU的运行状态
- 通信模式: 定义通信系统的运行状态
- 应用模式: 定义应用程序的运行状态
- 诊断模式: 定义诊断系统的运行状态
BSW模式管理器的主要职责是接收来自各种源的模式请求,根据预定义的规则进行仲裁,然后决定实际的模式变更,并通知相关的模式用户。以下是BSW模式管理器的代码示例:
/* BSW模式管理器模式请求处理函数 */
void BswM_RequestMode(BswM_RequestSourceType RequestSource, BswM_ModeType RequestedMode)
{
/* 记录模式请求 */
BswM_ModeRequests[RequestSource] = RequestedMode;
/* 触发模式仲裁 */
BswM_ArbitrateMode();
}
/* BSW模式管理器模式仲裁函数 */
void BswM_ArbitrateMode(void)
{
/* 遍历所有模式声明组 */
for (BswM_ModeDeclarationGroupType group = 0; group < BSWM_MODE_GROUP_COUNT; group++) {
BswM_ModeType currentMode = BswM_ModeGroups[group];
BswM_ModeType targetMode = BswM_DetermineTargetMode(group);
/* 如果目标模式与当前模式不同,执行模式切换 */
if (targetMode != currentMode) {
/* 更新模式组状态 */
BswM_ModeGroups[group] = targetMode;
/* 执行模式切换相关操作 */
BswM_ExecuteModeActions(group, targetMode);
/* 通知模式用户 */
BswM_NotifyModeChange(group, targetMode);
}
}
}
/* 确定模式声明组的目标模式 */
BswM_ModeType BswM_DetermineTargetMode(BswM_ModeDeclarationGroupType Group)
{
BswM_ModeType targetMode;
/* 根据模式组类型执行不同的仲裁逻辑 */
switch (Group) {
case BSWM_MDG_ECU_STATE:
/* ECU状态模式仲裁 */
targetMode = BswM_ArbitrateEcuStateMode();
break;
case BSWM_MDG_COMM_MODE:
/* 通信模式仲裁 */
targetMode = BswM_ArbitrateCommMode();
break;
case BSWM_MDG_APP_MODE:
/* 应用模式仲裁 */
targetMode = BswM_ArbitrateAppMode();
break;
default:
/* 使用默认模式 */
targetMode = BSWM_DEFAULT_MODE;
break;
}
return targetMode;
}
/* 执行模式切换相关操作 */
void BswM_ExecuteModeActions(BswM_ModeDeclarationGroupType Group, BswM_ModeType Mode)
{
/* 根据模式组和目标模式执行相应操作 */
switch (Group) {
case BSWM_MDG_ECU_STATE:
/* 处理ECU状态模式变更 */
if (Mode == BSWM_ECUM_STATE_SHUTDOWN) {
/* 请求ECU关闭 */
EcuM_RequestShutdown();
}
break;
case BSWM_MDG_COMM_MODE:
/* 处理通信模式变更 */
if (Mode == BSWM_COMM_FULL_COMMUNICATION) {
/* 请求全通信模式 */
ComM_RequestComMode(COMM_USER_BSWM, COMM_FULL_COMMUNICATION);
} else {
/* 释放通信请求 */
ComM_RequestComMode(COMM_USER_BSWM, COMM_NO_COMMUNICATION);
}
break;
default:
/* 处理其他模式组 */
break;
}
}
6. 配置与应用
6.1 配置参数
AUTOSAR模式管理系统的配置参数主要涉及以下几个方面:
-
ECU状态管理器配置
- 唤醒源配置:定义哪些唤醒源在哪种睡眠模式下是有效的
- 关闭目标配置:定义支持的关闭目标(关闭电源或睡眠模式)
- 睡眠模式配置:定义可用的睡眠模式及其属性
-
通信管理器配置
- 通信通道配置:定义物理通信通道的属性和行为
- 用户配置:定义哪些组件可以请求通信
- 超时配置:定义各种状态转换的超时时间
-
BSW模式管理器配置
- 模式声明组配置:定义系统中的模式组和有效模式
- 模式仲裁规则:定义如何仲裁来自不同源的模式请求
- 模式映射配置:定义不同模式组之间的影响关系
-
看门狗管理器配置
- 监督实体配置:定义被监控的应用程序单元
- 检查点配置:定义应用程序中的检查点
- 模式配置:定义不同监控模式下的监控参数
下面是ECU状态管理器配置的代码示例:
/* ECU状态管理器配置示例 */
const EcuM_ConfigType EcuM_Configuration = {
/* 基本配置 */
.DefaultShutdownTarget = ECUM_SHUTDOWN_TARGET_SLEEP,
.DefaultSleepMode = ECUM_SLEEP_MODE_0,
.DefaultAppMode = OSDEFAULTAPPMODE,
/* 唤醒源配置 */
.WakeupSourceCount = 3,
.WakeupSources = {
{
.WakeupSourceId = ECUM_WKSOURCE_POWER,
.WakeupSourceType = ECUM_WKSOURCE_POWER_ON,
.ValidModes = 0xFF /* 在所有睡眠模式下有效 */
},
{
.WakeupSourceId = ECUM_WKSOURCE_CAN,
.WakeupSourceType = ECUM_WKSOURCE_INTERNAL,
.ValidModes = 0x01 /* 仅在睡眠模式0下有效 */
},
{
.WakeupSourceId = ECUM_WKSOURCE_RESET,
.WakeupSourceType = ECUM_WKSOURCE_RESET,
.ValidModes = 0xFF /* 在所有睡眠模式下有效 */
}
},
/* 睡眠模式配置 */
.SleepModeCount = 2,
.SleepModes = {
{
.SleepModeId = ECUM_SLEEP_MODE_0,
.McuMode = MCU_MODE_SLEEP,
.WakeupSourceMask = 0x07 /* 所有唤醒源 */
},
{
.SleepModeId = ECUM_SLEEP_MODE_1,
.McuMode = MCU_MODE_STANDBY,
.WakeupSourceMask = 0x05 /* 电源和复位唤醒源 */
}
}
};
6.2 应用场景
AUTOSAR模式管理系统适用于以下应用场景:
-
汽车启动与关闭流程
- 控制ECU在车辆启动时的有序初始化
- 管理车辆关闭时ECU的有序关闭
- 确保关键组件在适当时机启动和关闭
-
节能与低功耗模式
- 在车辆停止运行时将ECU置于低功耗状态
- 根据实际需求激活或停用通信网络
- 优化系统资源使用以延长电池寿命
-
部分网络唤醒
- 选择性地唤醒特定网络和ECU
- 仅在需要时激活通信资源
- 在不影响功能的前提下降低能耗
-
故障管理与降级
- 在故障情况下实现系统降级
- 调整模式以维持关键功能
- 确保安全功能在异常情况下仍然可用
-
诊断与服务
- 支持诊断会话中的特殊模式
- 在维护和服务时提供特殊功能
- 确保系统可维护性和可诊断性
7. 总结
AUTOSAR模式管理系统是汽车电子控制单元(ECU)的关键组成部分,通过协调不同组件的状态和模式,实现了高效、可靠的系统运行。本文深入分析了AUTOSAR模式管理的架构、状态转换和交互机制,重点介绍了ECU状态管理器、通信管理器和BSW模式管理器三个核心组件。
AUTOSAR模式管理系统的主要优势包括:
- 标准化架构:符合AUTOSAR标准,确保不同供应商组件的互操作性
- 模块化设计:各组件职责明确,便于单独开发和测试
- 灵活配置:可根据具体需求定制系统行为
- 能源优化:通过合理管理模式转换降低系统能耗
- 安全可靠:提供故障检测和处理机制,确保系统安全
在实际应用中,模式管理系统需要根据具体的硬件平台和功能需求进行配置和调整。通过合理设计状态转换策略和模式仲裁规则,可以实现更高效、更可靠的汽车电子系统。
随着汽车电子系统复杂度的不断提高,模式管理将在未来发挥更加重要的作用,特别是在电动汽车和自动驾驶领域,能源管理和功能安全将对模式管理提出更高的要求。