LIN协议栈 AUTOSAR架构下 状态管理
一、LIN State Manager 概述
- 功能 :负责控制 LIN 总线的通信状态,包括切换调度表(仅 LIN 主节点)、处理睡眠和唤醒操作、通知上层新状态等。
- 约束 :每个 ECU 中最多有一个实例;所有关于调度表的操作仅适用于 LIN 主节点;适用于所有使用 LIN 的汽车领域。
- 依赖关系 :依赖于 Communication Manager(ComM)和 LIN Interface(LinIf),与操作系统、Default Error Tracer(DET)、Diagnostic Event Manager(DEM)、BSW Mode Manager 等有交互。
二、状态和转换
- LINSM_UNINIT :
- 定义 :初始状态,在启动时激活,在任何 API 调用之前。
- 激活条件 :在启动时自动激活,且在任何 API 调用之前保持该状态。
- LINSM_INIT :
- 定义 :初始化后激活的状态。
- 进入条件 :当 LinSM_Init 函数被调用时,从任何状态或子状态转换到此状态。
- 子状态设置 :进入此状态时,所有网络的子状态将转换为 LINSM_NO_COM。
- 初始化设置 :进入此状态时,将相关全局变量等设置为默认值(复位值)。
- 默认子状态 :进入此状态时,对于所有网络,子状态 LINSM_NO_COM 将被激活。
- 与 LinIf 的关系 :LinSM_Init 函数应将每个配置通道的调度类型设置为 NULL_SCHEDULE(仅适用于 LIN 主节点),且在此函数中不应调用 LinIf 的某些 API(如 LinIf_SetTrcvMode)。
- LINSM_NO_COM :
- 定义 :在初始化后、ComM 模块请求无通信(LIN 主节点)或 LinIf 指示总线睡眠事件(LIN 从节点)时激活的子状态。
- 状态通知 :进入此状态时,LinSM 模块应通知 ComM 和 BswM(除特殊情况外)关于状态的变化。
- 特殊情况 :当 LinSM 正在执行 LinSM_Init 函数时,不应进行状态通知。
- 通信限制 :在此状态下,LinSM 模块不应命令 LinIf 模块为所选网络进行通信,即总线应保持静默。
- 收发器设置 :进入此状态时,根据 LinSMTransceiverPassiveMode 的值,通过 LinIf_SetTrcvMode 设置收发器为 STANDBY 或 SLEEP(仅当 LinSMTransceiverPassiveMode 为该通道配置时适用)。
- LINSM_FULL_COM :
- 定义 :允许在 LIN 总线上进行通信的状态,每个网络可独立进入此状态。
- 状态通知 :进入此状态时,应通知 ComM 和 BswM 关于状态的变化。
- 收发器设置 :进入此状态时,通过 LinIf_SetTrcvMode 将收发器设置为活动状态(仅当 LinSMTransceiverPassiveMode 为该通道配置时适用)。
- 子状态进入 :进入此状态时,子状态 LINSM_RUN_COMMUNICATION 将被进入。
- 睡眠操作(Goto sleep) :
- 主节点 :当状态为 LINSM_FULL_COM 且 ComM 请求 COMM_NO_COMMUNICATION 时,LinSM 应调用 LinIf_GotoSleep 发送睡眠命令。
- 从节点 :当状态为 LINSM_FULL_COM 且 ComM 请求 COMM_NO_COMMUNICATION 时,LinSM 应存储请求的通信模式并返回 E_OK。
- 通用规则 :LinSM 模块仅在 LINSM_FULL_COM 和 LINSM_RUN_COMMUNICATION 状态下才可调用 LinIf_GotoSleep API;当 LinSM_GotoSleepConfirmation 被调用且当前状态为 LINSM_FULL_COM/LINSM_GOTOSLEEP 时,LinSM 应将状态设置为 LINSM_NO_COM(与 “success” 参数无关),在其他状态下应忽略该确认;若 LinIf_GotoSleep 返回 E_OK,则 LinSM 应设置子状态为 LINSM_GOTOSLEEP。
- 唤醒操作(Wake up) :
- 触发条件 :由 ComM 模块通过 LinSM_RequestComMode 请求唤醒或 LIN 节点传输唤醒信号触发。
- 处理方式 :当 ComM 请求 COMM_FULL_COMMUNICATION 时,LinSM 应直接调用 LinIf_Wakeup 发送唤醒信号(在特定情况下除外),并重置最大重试次数计数器;若 LinIf_Wakeup 返回 E_NOT_OK,LinSM_RequestComMode 应直接返回 E_NOT_OK 且不进行其他操作;当 LinIf 通知唤醒成功发送时,状态应设置为 LINSM_FULL_COM,在其他情况下,状态应设置为与请求前相同的状态。
三、状态管理相关的其他要点
- 错误分类 :包括开发错误、运行时错误、瞬态故障、生产错误和扩展生产错误。
- API 规范 :提供了如 LinSM_Init、LinSM_ScheduleRequest、LinSM_GetVersionInfo 等与状态管理相关的 API 函数。
- 配置规范 :定义了配置参数和其聚类到容器中的方式,LinSM_Configuration 包含 LinSM、LinSMConfigSet、LinSMChannel、LinSMGeneral、LinSMSchedule 等容器和参数,这些配置与状态管理的各种设置和行为相关。
总之,LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。