AUTOSAR FlexRay状态管理器(FrSM)详解
目录
- 概述
1.1. FrSM的作用
1.2. FrSM在AUTOSAR架构中的位置 - FlexRay状态管理器架构
2.1. 架构概览
2.2. 模块交互关系 - FrSM状态机
3.1. 状态定义
3.2. 状态转换
3.3. 状态行为 - FlexRay启动流程
4.1. 启动序列
4.2. 唤醒机制 - FrSM配置参数
5.1. 配置结构
5.2. 参数说明 - 总结
1. 概述
1.1. FrSM的作用
FlexRay状态管理器(FrSM)是AUTOSAR基础软件栈中的一个重要通信模块,主要负责管理和控制FlexRay通信控制器的状态,执行FlexRay通信的初始化、启动、运行和关闭等操作。FrSM充当了上层通信管理器(ComM)和底层FlexRay接口(FrIf)之间的桥梁,提供了统一的接口来控制FlexRay通信。
FrSM模块主要功能包括:
- 状态管理:控制FlexRay通信控制器的状态转换
- 冷启动控制:管理FlexRay集群的冷启动过程
- 唤醒处理:处理FlexRay网络的唤醒请求和传播
- 通信控制:根据通信管理器的请求启动或停止FlexRay通信
- 错误处理:监控和报告FlexRay通信中的错误状态
1.2. FrSM在AUTOSAR架构中的位置
FlexRay状态管理器位于AUTOSAR通信服务层,是通信栈的重要组成部分。它与其他模块的关系如下:
- 上层接口:向通信管理器(ComM)提供服务
- 下层接口:使用FlexRay接口(FrIf)提供的服务
- 平级接口:与网络管理(FrNm)、诊断通信管理器(DCM)等交互
以下架构图展示了FrSM在AUTOSAR软件栈中的位置:
图1. FlexRay状态管理器在AUTOSAR架构中的位置
从图中可以看出,FrSM位于通信服务层,它的上层是通信管理器(ComM),下层是FlexRay接口(FrIf)。FrSM模块与ECU管理器(EcuM)、调度管理器(SchM)和FlexRay网络管理(FrNm)模块也有交互关系。
FrSM架构的主要特点:
- 分层设计:严格遵循AUTOSAR分层架构,确保模块间的清晰边界
- 接口隔离:通过标准接口与其他模块交互,减少模块间耦合
- 硬件抽象:不直接操作硬件,而是通过FrIf来控制FlexRay控制器和收发器
在这个架构中,FrSM负责协调FlexRay网络的状态变化,实现通信管理器(ComM)的请求。它根据网络状态向上层模块提供反馈,并控制底层FlexRay控制器的行为。
2. FlexRay状态管理器架构
2.1. 架构概览
FlexRay状态管理器的内部架构由几个关键组件组成:
- 状态机:核心组件,控制整个FrSM模块的状态转换
- 配置管理:处理和存储FrSM的配置参数
- 计时器管理:管理和维护各种超时计时器
- 接口函数:提供与其他模块交互的API
FrSM模块的设计遵循AUTOSAR规范,确保了灵活性和可配置性,能够适应不同的FlexRay网络配置和应用需求。
2.2. 模块交互关系
FlexRay状态管理器与其他AUTOSAR模块的交互关系复杂而紧密,以下图表展示了FrSM模块的关键接口和交互方式:
图2. FlexRay状态管理器模块交互关系
从图中可以看出,FrSM提供了以下主要接口:
FrSM_Init
:由ECU管理器调用,初始化FrSM模块FrSM_GetVersionInfo
:获取版本信息FrSM_GetCurrentState
:获取当前FlexRay通信状态FrSM_RequestComMode
:由通信管理器调用,请求切换通信模式FrSM_MainFunction
:由调度管理器周期性调用,处理状态机事件
FrSM同时调用了FlexRay接口提供的多个服务,这些服务包括:
FrIf_ControllerInit
:初始化FlexRay控制器FrIf_StartCommunication
:启动FlexRay通信FrIf_HaltCommunication
:停止FlexRay通信FrIf_SendWUP
:发送唤醒模式FrIf_GetPOCStatus
:获取协议操作控制(POC)状态
FrSM模块交互关系的关键特点:
- 集中控制:作为中央协调者,管理FlexRay通信状态
- 多重依赖:与多个AUTOSAR模块有交互关系
- 双向通信:既提供服务又使用其他模块的服务
- 状态报告:向上层模块报告通信状态变化
3. FrSM状态机
3.1. 状态定义
FrSM模块的行为由内部状态机控制,该状态机定义了多个状态来反映FlexRay通信的不同阶段。以下图表展示了FlexRay状态管理器的状态机:
图3. FlexRay状态管理器状态机图
FrSM状态机包含以下主要状态:
- FRSM_UNINIT:未初始化状态,模块上电后的默认状态
- FRSM_READY:就绪状态,等待通信模式请求
- FRSM_WAKEUP:唤醒状态,发送唤醒模式
- FRSM_STARTUP:启动状态,尝试启动FlexRay集群
- FRSM_ONLINE:在线状态,正常通信模式
- FRSM_ONLINE_PASSIVE:被动在线状态,只接收不发送
- FRSM_HALT_REQ:停止请求状态,等待通信停止
3.2. 状态转换
FrSM状态机的转换由多种触发条件引起,包括:
- API调用:如
FrSM_Init
或FrSM_RequestComMode
- POC状态变化:通信控制器内部状态变化
- 超时事件:计时器超时触发的状态转换
- 错误条件:同步丢失等错误情况
状态转换的关键路径包括:
- 初始化路径:FRSM_UNINIT → FRSM_READY
- 启动路径:FRSM_READY → FRSM_WAKEUP/FRSM_STARTUP → FRSM_ONLINE
- 关闭路径:FRSM_ONLINE → FRSM_HALT_REQ → FRSM_READY
- 错误恢复路径:各种错误状态 → FRSM_READY → 重新尝试启动
3.3. 状态行为
每个状态都有特定的行为和功能:
-
FRSM_UNINIT:模块未初始化,所有API调用将返回错误
-
FRSM_READY:
- 初始化FlexRay控制器
- 等待来自ComM的通信请求
- 处理FlexRay收发器的休眠模式
-
FRSM_WAKEUP:
- 发送唤醒模式到FlexRay总线
- 监控唤醒模式的完成
- 处理唤醒通道选择(单通道或双通道)
-
FRSM_STARTUP:
- 尝试启动FlexRay集群
- 监控启动帧和冷启动器
- 管理冷启动抑制模式
- 处理启动重试逻辑
-
FRSM_ONLINE和FRSM_ONLINE_PASSIVE:
- 监控通信状态
- 处理同步丢失情况
- 向上层模块报告状态变化
- 响应通信模式切换请求
-
FRSM_HALT_REQ:
- 停止FlexRay通信
- 监控停止过程完成
- 根据需要切换收发器到待机模式
状态机的实现使用了多个计时器来监控和控制状态转换:
- t1:监控清除冷启动抑制模式的延迟
- t2:监控FlexRay集群启动过程
- t3:监控转换到FullCom状态
- t_TrcvStdbyDelay:监控收发器进入待机模式的延迟
4. FlexRay启动流程
4.1. 启动序列
FlexRay网络的启动是一个复杂而精确的过程,需要多个节点协同工作。以下序列图展示了FrSM模块如何协调FlexRay通信的启动过程:
图4. FlexRay启动序列图
启动过程分为几个关键阶段:
-
初始化阶段:
- ECU管理器调用
FrSM_Init
初始化FrSM模块 - FrSM初始化内部状态和变量
- ECU管理器调用
-
通信请求与唤醒阶段:
- ComM请求切换到全通信模式
- 如果ECU配置为唤醒ECU,FrSM发送唤醒模式
- 初始化FlexRay控制器和收发器
-
集群启动阶段:
- 监控POC状态变化
- 启动通信并处理冷启动逻辑
- 根据启动帧数量决定是否允许冷启动
- 达到NORMAL_ACTIVE或NORMAL_PASSIVE状态时通知ComM
4.2. 唤醒机制
FlexRay的唤醒机制是网络管理的重要部分,支持以下几种唤醒方式:
- 主动唤醒:由本地ECU(如传感器)触发的唤醒
- 被动唤醒:由总线上的唤醒模式触发
- 远程唤醒:通过FlexRay总线或唤醒线传播
唤醒过程使用FrIf_SendWUP
接口发送唤醒模式,可以配置唤醒模式的数量和重复次数。在双通道FlexRay网络中,唤醒处理更为复杂,需要考虑不同通道的唤醒状态。
FrSM使用FrIf_GetTransceiverWUReason
接口来检测唤醒原因,可能的值包括:
- NO_WU_BY_BUS:未检测到唤醒
- PARTIAL_WU_BY_BUS:双通道ECU中仅一个通道检测到唤醒
- ALL_WU_BY_BUS:所有通道均检测到唤醒
5. FrSM配置参数
5.1. 配置结构
FlexRay状态管理器模块的配置使用了层次化结构,包含全局配置和集群特定配置。以下类图展示了FrSM的配置结构:
图5. FlexRay状态管理器配置类图
配置结构包括:
- FrSM_ConfigType:顶层配置结构,包含所有FlexRay集群配置及全局参数
- FrSM_ClusterConfigType:每个FlexRay集群的配置,包含唤醒、启动和超时相关参数
- FrSM_DemEventParameterRefs:诊断事件参数引用,用于报告同步丢失等故障
5.2. 参数说明
FrSM模块的关键配置参数包括:
全局配置参数:
FrSMDevErrorDetect
:是否启用开发错误检测,推荐在开发阶段使用FrSMNumberOfClusters
:ECU中FlexRay集群的数量
集群特定参数:
FrSMClusterId
:FlexRay集群IDFrSMNumberOfControllers
:集群中控制器的数量FrSMControllerIds
:控制器ID列表FrSMIsDualChannelNode
:是否为双通道节点FrSMIsWakeupEcu
:是否为唤醒ECUFrSMCheckWakeupReason
:是否检查唤醒原因FrSMIsColdstartEcu
:是否为冷启动ECUFrSMNumWakeupPatterns
:最大唤醒模式数量(0-255)FrSMStartupRepetitionsWithWakeup
:带唤醒的启动重复次数FrSMStartupRepetitions
:不带唤醒的启动重复次数(0-255)FrSMMinNumberOfColdstarter
:最小冷启动器数量(1-15)FrSMDelayStartupWithoutWakeup
:是否延迟不带唤醒的启动FrSMDurationT1
:T1计时器持续时间(秒)FrSMDurationT2
:T2计时器持续时间(秒)FrSMDurationT3
:T3计时器持续时间(秒)FrSMTrcvStdbyDelay
:收发器待机延迟(0-65535毫秒)
计时器参数的单位为秒,可通过以下公式计算:
时间(秒) = 参数值 / OS_COUNTER_FREQ
必须配置的参数包括:
- FrSMClusterId (集群ID)
- FrSMControllerIds (控制器ID)
- FrSMNumberOfControllers (控制器数量)
6. 总结
FlexRay状态管理器(FrSM)是AUTOSAR通信栈中的核心组件,负责管理FlexRay通信状态并协调FlexRay通信的启动和关闭流程。本文详细分析了FrSM的架构、状态机、交互关系、启动流程和配置参数。
FrSM的主要优势:
- 标准化接口:遵循AUTOSAR规范,确保与其他模块无缝集成
- 灵活配置:支持多种配置选项,适应不同的应用场景
- 完善的状态控制:通过状态机实现精确的通信控制
- 可靠的错误处理:提供错误检测和诊断报告机制
应用场景:
- 高实时性要求场景:如驾驶辅助系统、动力总成控制
- 安全关键应用:如制动系统、转向系统、主动安全系统
- 需要确定性通信的场景:如高精度传感器数据传输
- 多ECU协同工作:如分布式控制系统
通过深入理解FrSM模块,开发者可以更好地配置和使用这个模块,提高FlexRay通信的可靠性和性能,满足汽车电子系统日益增长的通信需求。