Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_LINStateManager.md
T

17 KiB
Raw Blame History

LIN 状态管理器规范 (Specification of LIN State Manager)

AUTOSAR CP Release 4.4.0 文档 ID 255: AUTOSAR_SWS_LIN_StateManager

元信息

项目 内容
文档标题 LIN 状态管理器规范
文档所有者 AUTOSAR
文档责任方 AUTOSAR
文档标识号 255
文档状态 Final
所属 AUTOSAR 标准 Classic Platform
所属标准版本 4.4.0

文档变更历史

日期 版本 变更方 变更说明
2018-10-31 4.4.0 AUTOSAR Release Management LIN Slave 支持 (CONC_634);LIN 2.1 引用替换为 ISO 17987:2016
2017-12-08 4.3.1 AUTOSAR Release Management 修正/澄清/编辑
2016-11-30 4.3.0 AUTOSAR Release Management 修复 LinSM_ScheduleRequest 时序
2015-07-31 4.2.2 AUTOSAR Release Management DET 引用更名为"默认错误跟踪器"
2014-10-31 4.2.1 AUTOSAR Release Management 增加 LIN 模式请求重试
2014-03-31 4.1.3 AUTOSAR Release Management 编辑变更
2013-10-31 4.1.2 AUTOSAR Release Management 移除过时需求
2013-03-15 4.1.1 AUTOSAR Administration 调度切换的细化
2011-12-22 4.0.3 AUTOSAR Administration 重新设计模式管理交互
2010-09-30 3.1.5 AUTOSAR Administration 加入更多调度同步管理
2010-02-02 3.1.4 AUTOSAR Administration 与 ComM 集成
2008-08-13 3.1.1 AUTOSAR Administration 法律声明修订
2007-12-21 3.0.1 AUTOSAR Administration 初始发布

目录


1. 介绍与功能概述

本文档规定了 AUTOSAR 基础软件模块 LIN 状态管理器 (LinSM) 的功能、API 和配置。

LinSM 负责 LIN 总线的控制流。

1.1 架构概述

LinSM 位于通信服务层,与 ComM(上层)、LinIf(下层)、BswM 交互。

1.2 功能概述

LinSM 负责:

  • 当上层请求时切换调度表 (仅 LIN 主节点)
  • 处理进入睡眠和唤醒(上层请求或下层指示)
  • 通知上层进入新状态

2. 缩略语

缩略语 描述
API Application Program Interface
AUTOSAR Automotive Open System Architecture
BSW Basic Software
BswM BSW Mode Manager
ComM Communication Manager
DCM Diagnostic Communication Manager
DEM Diagnostic Event Manager
DET Default Error Tracer
ECU Electric Control Unit
ID Identifier
ISR Interrupt Service Routine
LIN Local Interconnect Network
LinIf LIN Interface
LinSM LIN State Manager
MCAL Microcontroller Abstraction Layer
PDU Protocol Data Unit
RTE Run Time Environment
RX Receive
SPAL Standard Peripheral Abstraction Layer
SRS Software Requirement Specification
SW Software
SWS Software Design Specification
TP Transport Protocol
TX Transmit

3. 相关文档

3.1 输入文档

  • [1] List of Basic Software Modules
  • [2] Layered Software Architecture
  • [3] General Requirements on Basic Software Modules
  • [4] Specification of Standard Types
  • [5] Specification of Default Error Tracer
  • [6] Requirements on LIN
  • [7] Specification of LIN Interface
  • [8] Specification of Diagnostic Event Manager
  • [9] Specification of ECU Configuration
  • [10] Specification of LIN Driver
  • [11] Specification of Communication Manager
  • [12] Specification of Basic Software Mode Manager
  • [13] General Specification of Basic Software Modules

3.2 相关标准

  • [14] ISO 17987:2016 (所有部分)

3.3 相关规范

AUTOSAR 提供 SWS BSW General [13],该规范同样适用于 LIN 状态管理器。


4. 约束与假设

4.1 限制

每个 ECU 最多一个 LinSM 实例。如底层 LIN 驱动支持多网络,LinSM 可作为多个集群的主或从节点。

所有调度表切换引用仅适用于 LIN 主节点。

4.2 适用车域

适用于所有使用 LIN 的车域。


5. 与其他模块的依赖

  • [SWS_LinSM_00001] ⌈LIN Interface LinIf⌋ (SRS_BSW_00384)
  • [SWS_LinSM_00085] ⌈Diagnostic Event Manager DEM⌋ (SRS_BSW_00384)
  • [SWS_LinSM_00086] ⌈Default Error Tracer DET⌋ (SRS_BSW_00384)
  • [SWS_LinSM_00105] ⌈Communication Manager ComM⌋ (SRS_BSW_00384)
  • [SWS_LinSM_00196] ⌈BSW Mode Manager - BswM⌋ (SRS_BSW_00384)

5.1 上层关系

5.1.1 操作系统

LinSM 内部数据访问无需 OS 保护(仅简单类型访问)。

5.1.2 DET 模块

Det_ReportError 用于上报开发和运行时错误。

5.1.3 DEM 模块

未使用。

5.1.4 ComM 模块

ComM 是 LinSM 的主要客户端。通过 LinSM_RequestComMode 请求通信模式;通过 ComM_BusSM_ModeIndication 反馈模式变化。

5.1.5 BswM 模块

通过 BswM_LinSM_CurrentState 和 BswM_LinSM_CurrentSchedule 通知当前状态。

5.2 下层关系

5.2.1 LinIf 模块

LinSM 调用 LinIf_GotoSleep、LinIf_Wakeup、LinIf_ScheduleRequest、LinIf_SetTrcvMode 控制 LinIf。

5.3 文件结构

LinSM 模块包含 LinSM.h、LinSM_Cfg.h 等头文件。


6. 需求可追溯性

需求 ID 描述 满足者
SRS_BSW_00101 BSW 模块应能在独立初始化函数中初始化 SWS_LinSM_00155
SRS_BSW_00373 main 函数命名约定 SWS_LinSM_00156
SRS_BSW_00384 BSW 模块需指明所需其他模块 SWS_LinSM_00001, SWS_LinSM_00085, SWS_LinSM_00086, SWS_LinSM_00105, SWS_LinSM_00196
SRS_BSW_00406 模块初始化标志 SWS_LinSM_00116, SWS_LinSM_00125, SWS_LinSM_00128, SWS_LinSM_00131
SRS_BSW_00407 版本信息读取 SWS_LinSM_00117
SRS_BSW_00414 init 函数应有配置结构指针 SWS_LinSM_00155
SRS_Lin_01560 进入 sleep 时唤醒应返回运行 SWS_LinSM_00211
SRS_Lin_01590 LIN 从节点配置仅通过主节点调度表 SWS_LinSM_00211

[摘要] 完整需求追溯表见原文 PDF 第 16-19 页。


7. 功能规范

本章规定 LinSM 模块的需求。

LinSM 的主要职责:

  • 控制所有 LIN 网络的通信状态(无通信或全通信)

  • 处理调度表切换请求(仅主节点)

  • 处理通信模式请求

  • 通知上层状态变化

  • [SWS_LinSM_00019] ⌈LinSM 模块应能处理一个或多个 LIN 网络。⌋

7.1 LinSM 状态机的状态与转换

LinSM 模块按状态机操作。每个连接的网络运行独立的子状态机。

  • [SWS_LinSM_00020] ⌈LinSM 模块应有一个状态机,包含 LINSM_UNINIT 和 LINSM_INIT 状态。⌋
  • [SWS_LinSM_00173] ⌈LINSM_INIT 中应为每个网络存在子状态机,包含 LINSM_NO_COM 和 LINSM_FULL_COM。⌋
  • [SWS_LinSM_00021] ⌈LINSM_INIT 中,每个网络可独立处于 LINSM_NO_COM 或 LINSM_FULL_COM。⌋

主节点状态机

LINSM_UNINIT --LinSM_Init--> LINSM_INIT
                              |
                       LINSM_NO_COM
                              |
                       (reqComMode==FULL_COM)
                              v
                       LINSM_FULL_COM --> LINSM_RUN_COMMUNICATION
                              |
                       (reqComMode==NO_COM)
                              v
                       LINSM_GOTO_SLEEP --> LINSM_NO_COM

7.1.1 LINSM_UNINIT

  • [SWS_LinSM_00022] ⌈应有状态 LINSM_UNINIT。⌋
  • [SWS_LinSM_00161] ⌈启动时 LINSM_UNINIT 处于活动状态。⌋

7.1.2 LINSM_INIT

初始化完成后激活。包含两个子状态:LINSM_NO_COM 和 LINSM_FULL_COM。

  • [SWS_LinSM_00024] ⌈应有状态 LINSM_INIT。⌋
  • [SWS_LinSM_00025] ⌈调用 LinSM_Init 时,状态机转换到 LINSM_INIT。⌋
  • [SWS_LinSM_00152] ⌈调用 LinSM_Init 时,所有网络转换到 LINSM_NO_COM 子状态。⌋
  • [SWS_LinSM_00216] ⌈LinSM_Init 应为每个配置通道设置 NULL_SCHEDULE 调度类型(仅主节点)。⌋

7.1.3 LINSM_NO_COM

  • [SWS_LinSM_00026] ⌈LINSM_INIT 中应有 LINSM_NO_COM 子状态。⌋
  • [SWS_LinSM_00027] ⌈进入 LINSM_NO_COM 时,LinSM 应通知 ComM (COMM_NO_COMMUNICATION)。⌋
  • [SWS_LinSM_00193] ⌈进入 LINSM_NO_COM 时,LinSM 应通知 BswM。⌋
  • [SWS_LinSM_00166] ⌈LinSM_Init 函数中不应通知状态变化。⌋
  • [SWS_LinSM_00203] ⌈进入 LINSM_NO_COM 时,如 LinSMTransceiverPassiveMode=true,收发器设为 STANDBY;否则设为 SLEEP。⌋

7.1.4 LINSM_FULL_COM

  • [SWS_LinSM_00032] ⌈LINSM_INIT 中应有 LINSM_FULL_COM 子状态。⌋
  • [SWS_LinSM_00033] ⌈进入 LINSM_FULL_COM 时,LinSM 应通知 ComM (COMM_FULL_COMMUNICATION)。⌋
  • [SWS_LinSM_00192] ⌈进入 LINSM_FULL_COM 时,LinSM 应通知 BswM。⌋
  • [SWS_LinSM_00205] ⌈进入 LINSM_FULL_COM 时,收发器设为活动模式。⌋
  • [SWS_LinSM_00301] ⌈进入 LINSM_FULL_COM 时,进入子状态 LINSM_RUN_COMMUNICATION。⌋

7.1.5 进入睡眠 (Goto sleep)

进入睡眠序列在主节点和从节点之间不同:

  • 主节点:ComM 请求 no communication 时,LinSM 请求在总线发送 goto-sleep 命令。

  • 从节点:LIN 接口指示总线进入睡眠事件(由收到 goto-sleep 命令或检测到总线空闲触发)。

  • [SWS_LinSM_00035] ⌈LinSM 模块仅在 LINSM_FULL_COM/LINSM_RUN_COMMUNICATION 状态调用 LinIf_GotoSleep。⌋

  • [SWS_LinSM_00046] ⌈LinSM_GotoSleepConfirmation 调用时,如当前状态为 LINSM_FULL_COM/LINSM_GOTOSLEEP,LinSM 应将状态置为 LINSM_NO_COM(不考虑 success 参数)。⌋

  • [SWS_LinSM_00302] ⌈如 LinIf_GotoSleep 返回 E_OK,LinSM 进入子状态 LINSM_GOTOSLEEP。⌋

7.1.5.1 主节点特定的进入睡眠
  • [SWS_LinSM_10208] ⌈如状态为 LINSM_FULL_COM 且 ComM 请求 COMM_NO_COMMUNICATION,LinSM 应调用 LinIf_GotoSleep 在请求的网络上发送 goto-sleep 命令。⌋
  • [SWS_LinSM_00036] ⌈ComM 调用 LinSM_RequestComMode 请求 COMM_NO_COMMUNICATION 时,LinSM 应直接调用 LinIf_GotoSleep。⌋
7.1.5.2 从节点特定的进入睡眠
  • [SWS_LinSM_00230] ⌈LIN 从节点中,ComM 请求 COMM_NO_COMMUNICATION 时,LinSM 应存储请求模式并返回 E_OK。⌋
  • [SWS_LinSM_00231] ⌈LinSM_GotoSleepIndication 调用且当前状态为 LINSM_FULL_COM 时,LinSM 应直接调用 LinIf_GotoSleep。⌋
  • [SWS_LinSM_00233] ⌈成功 goto-sleep 后,LinSM 调用 ComM_BusSM_BusSleepMode 通知 ComM。⌋

7.1.6 切换调度表 (仅主节点)

  • [SWS_LinSM_00079] ⌈调用 LinSM_ScheduleRequest 时,LinSM 应将请求转发至 LinIf (LinIf_ScheduleRequest)。⌋
  • [SWS_LinSM_00168] ⌈LinSM 应将 LinIf_ScheduleRequest 返回值转发给调用者。⌋
  • [SWS_LinSM_00206] ⌈LinSM 收到调度表设置确认时,如未超时,应调用 BswM_LinSM_CurrentSchedule。⌋

7.1.7 唤醒过程

LIN 网络可通过 ComM 请求或 LIN 节点发送唤醒信号唤醒。两种情况下 ComM 都请求 full communication。

  • [SWS_LinSM_00047] ⌈ComM 请求 COMM_FULL_COMMUNICATION 时,LinSM 应直接调用 LinIf_Wakeup。⌋
  • [SWS_LinSM_00049] ⌈LinIf 通知唤醒成功时,状态置为 LINSM_FULL_COM。⌋

7.1.8 请求超时

  • [SWS_LinSM_00175] ⌈每个网络应有请求定时器,相互独立。⌋
  • [SWS_LinSM_00100] ⌈调用 LinIf_GotoSleep、LinIf_Wakeup 或 LinIf_ScheduleRequest 前,启动定时器。⌋
  • [SWS_LinSM_00101] ⌈定时器超过 LinSMConfirmationTimeout 即发生超时。⌋
  • [SWS_LinSM_00102] ⌈超时时上报 LINSM_E_CONFIRMATION_TIMEOUT 错误给 DET。⌋
  • [SWS_LinSM_00304] ⌈LinIf_Wakeup 超时且未达最大重试次数(LinSMModeRequestRepetitionMax)时,重新发送 LinIf_Wakeup。⌋
7.1.8.1 从节点唤醒重试
  • [SWS_LinSM_00235] ⌈从节点上,SWS_LinSM_00307 情况下应启动 silence-after-wakeup 定时器。⌋

7.2 错误分类

7.2.1 开发错误

错误名 错误码 含义
LINSM_E_UNINIT 0x00 模块未初始化即调用
LINSM_E_ALREADY_INITIALIZED 0x01 模块已初始化时再次调用 Init
LINSM_E_PARAMETER 0x02 参数无效
LINSM_E_PARAMETER_POINTER 0x03 NULL 指针
LINSM_E_NONEXISTENT_NETWORK 0x04 不存在的网络 ID

7.2.2 运行时错误

错误名 错误码 含义
LINSM_E_CONFIRMATION_TIMEOUT 0x30 LinIf 确认超时

8. API 规范

8.1 导入类型

模块 头文件 导入类型
ComM ComM.h ComM_ModeType
ComStack_Types ComStack_Types.h NetworkHandleType
LinIf LinIf.h LinIf_SchHandleType
Std_Types Std_Types.h Std_ReturnType, Std_VersionInfoType

8.2 类型定义

8.2.1 LinSM_ConfigType

typedef struct LinSM_ConfigType LinSM_ConfigType;

LinSM 模块初始化配置数据结构。

8.2.2 LinSM_ModeType

typedef enum {
    LINSM_FULL_COM = 0x00,
    LINSM_NO_COM   = 0x01
} LinSM_ModeType;

8.3 函数定义

8.3.1 LinSM_Init

void LinSM_Init(const LinSM_ConfigType* ConfigPtr)
项目 内容
Service ID 0x01
Sync/Async Synchronous
Reentrancy Non Reentrant
参数 (in) ConfigPtr — 配置数据指针
描述 初始化 LinSM 模块
  • [SWS_LinSM_00155] ⌈LinSM_Init 应初始化所有 LinSM 内部变量,所有网络置为 LINSM_NO_COM。⌋ (SRS_BSW_00101)

8.3.2 LinSM_GetVersionInfo

void LinSM_GetVersionInfo(Std_VersionInfoType* VersionInfo)
Service ID 0x02
描述 获取模块版本信息

8.3.3 LinSM_ScheduleRequest

Std_ReturnType LinSM_ScheduleRequest(
    NetworkHandleType network,
    LinIf_SchHandleType Schedule
)
Service ID 0x10
Sync/Async Asynchronous
描述 请求切换调度表(仅主节点)

8.3.4 LinSM_GetCurrentComMode

Std_ReturnType LinSM_GetCurrentComMode(
    NetworkHandleType network,
    ComM_ModeType* mode
)
Service ID 0x11
描述 获取当前通信模式

8.3.5 LinSM_RequestComMode

Std_ReturnType LinSM_RequestComMode(
    NetworkHandleType network,
    ComM_ModeType mode
)
Service ID 0x12
描述 ComM 请求通信模式变更

8.4 回调通知

8.4.1 LinSM_ScheduleRequestConfirmation

void LinSM_ScheduleRequestConfirmation(
    NetworkHandleType network,
    LinIf_SchHandleType schedule
)

LinIf 调度表切换确认。

8.4.2 LinSM_GotoSleepConfirmation

void LinSM_GotoSleepConfirmation(
    NetworkHandleType network,
    boolean success
)

LinIf goto-sleep 命令发送确认。

8.4.3 LinSM_GotoSleepIndication (从节点)

void LinSM_GotoSleepIndication(NetworkHandleType network)

LinIf 通知总线睡眠事件。

8.4.4 LinSM_WakeupConfirmation

void LinSM_WakeupConfirmation(
    NetworkHandleType network,
    boolean success
)

LinIf 唤醒发送确认。

8.5 调度函数

8.5.1 LinSM_MainFunction

void LinSM_MainFunction(void)
项目 内容
Service ID 0x30
描述 主处理函数,处理定时器和状态机
  • [SWS_LinSM_00156] ⌈应提供 LinSM_MainFunction 用于定时器处理。⌋ (SRS_BSW_00373)

8.6 期望接口

8.6.1 强制接口

  • LinIf_GotoSleep
  • LinIf_Wakeup
  • LinIf_ScheduleRequest
  • ComM_BusSM_ModeIndication
  • BswM_LinSM_CurrentState
  • BswM_LinSM_CurrentSchedule
  • Det_ReportRuntimeError

8.6.2 可选接口

  • Det_ReportError
  • LinIf_SetTrcvMode
  • ComM_BusSM_BusSleepMode

9. 时序图

[摘要] 本章包含初始化、模式请求、调度切换、进入睡眠、唤醒过程的时序图。详细图见原文 PDF 第 36-42 页。

主要场景:

  • 主节点进入 FULL_COM(ComM 请求 → LinSM_RequestComMode → LinIf_Wakeup → 唤醒确认 → 模式确认)
  • 主节点进入 NO_COM(ComM 请求 → LinSM_RequestComMode → LinIf_GotoSleep → goto-sleep 确认 → 模式确认)
  • 主节点调度切换(BswM/上层调用 LinSM_ScheduleRequest → LinIf_ScheduleRequest → 确认)
  • 从节点 LinIf 指示 bus sleep(LinSM_GotoSleepIndication → 处理)

10. 配置规范

10.1 如何阅读本章

参考 [ECU Configuration Specification] 文档。

10.2 容器与配置参数

10.2.1 LinSM

根容器。

10.2.2 LinSMConfigSet

LinSM 配置集容器。

10.2.3 LinSMChannel

LIN 网络配置。

参数 类型 说明
LinSMComMNetworkHandleRef ref 引用 ComM 网络句柄
LinSMConfirmationTimeout float 确认超时(秒)
LinSMModeRequestRepetitionMax int 模式请求最大重试次数
LinSMNodeType enum LIN_MASTER / LIN_SLAVE
LinSMSilenceAfterWakeupTimeout float 唤醒后静默时间(从节点)
LinSMTransceiverPassiveMode bool 收发器在 NO_COM 时是否进 STANDBY

10.2.4 LinSMSchedule

调度表配置(主节点)。

10.2.5 LinSMGeneral

通用配置(版本 API 启用等)。

10.3 已发布信息

按 BSW General 提供模块版本信息。


11. 不适用需求

部分 SRS_BSW 通用需求不在本规范范围内。详见原文 PDF 第 54 页。


翻译说明

  • 本译本基于 AUTOSAR CP 4.4.0 (2018-10-31) 的 LIN 状态管理器规范 (Document ID 255,共 54 页)
  • 摘要标记位置:
    • 第 6 章需求可追溯性表
    • 第 9 章时序图
    • 第 11 章不适用需求列表