DEENESPTFRRUARHIKOZHNL

LIN State Manager (LinSM)

ModulLinSM (LIN State Manager)
BSW-Modul-ID141
Standard-Header#include "LinSM.h"
SWS-SpezifikationAUTOSAR_SWS_LINStateManager.pdf
ClusterLIN

模块指南人工智能生成

控制每个 LIN 网络的通信模式、唤醒、休眠和调度表切换。
AI 生成 未审核 模型: claude-opus-5-5 · 推理强度: high · 温度: 不可控 · 提示词: 4c8293bd0eb8 来源 未决问题(2)
因果锚点:R20-11 自 R20-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

控制每个 LIN 网络的通信模式、唤醒、休眠和调度表切换。

LIN State Manager 将 ComM 针对每个 LIN 网络的通信请求转换为对 LIN Interface 的调用。它将由此产生的状态 LINSM_FULL_COM 和 LINSM_NO_COM 报告给 ComM 与 BswM [SWS_LinSM_00126]。它直接启动唤醒、休眠以及仅在主节点(Master)上的调度表切换,并使用 LinSM_MainFunction 中的定时器监控确认信息。在从节点(Slave)上,由主节点决定休眠:仅 LinSM_GotoSleepIndication 会触发 LinIf_GotoSleep [SWS_LinSM_00231]。如果迁移失败,LinSM 会重新报告先前的状态,以使上层保持一致。

LIN State Manager 是面向 LIN 的总线状态管理器(Bus State Manager)。ComM 通过它请求网络的通信能力(SWS ComM 第19页)。它通过 LinSM_RequestComMode 接收模式请求 [SWS_LinSM_00126]。它控制 LinIf 并向 ComM 和 BswM 报告状态 [SWS_LinSM_00229]。哪个 LIN 驱动程序服务于网络则对上隐藏在 LinIf 之后(SWS LinSM 第28页)。

kontext ComM ComM LinSM LinSM ComM->LinSM LinSM_RequestComMode LinSM_GetCurrentComMode BswM BswM BswM->LinSM LinSM_Init (Beispielregel) LinSM_ScheduleRequest SchM BSW-Scheduler (SchM) SchM->LinSM LinSM_MainFunction (periodisch) LinSM->ComM ComM_BusSM_ModeIndication ComM_BusSM_BusSleepMode LinSM->BswM BswM_LinSM_CurrentState BswM_LinSM_CurrentSchedule LinIf LinIf LinSM->LinIf LinIf_Wakeup / LinIf_GotoSleep LinIf_ScheduleRequest / LinIf_SetTrcvMode Det Det LinSM->Det Fehlermeldungen LinIf->LinSM LinSM_WakeupConfirmation LinSM_GotoSleepConfirmation LinSM_GotoSleepIndication LinSM_ScheduleRequestConfirmation Lin LIN 驱动(一个或多个) LinIf->Lin Zuordnung Netzwerk zu Treiber

上下文图:ComM 和 BswM 控制 LinSM,LinSM 控制 LinIf,LinIf 通过回调返回报告。来源:[SWS_LinSM_00229]、[SWS_LinSM_00138]、SWS LinSM 第28页

在 LinSM_Init 之后,每个网络均处于 LINSM_NO_COM 状态 [SWS_LinSM_00155]。此时不会通知 ComM 和 BswM(SWS LinSM 第23页)。仅允许在 LINSM_FULL_COM 中进行通信。进入该状态时,ComM 和 BswM 会收到通知,并进入子状态 LINSM_RUN_COMMUNICATION [SWS_LinSM_00301]。对于 BswM 而言,仅 LINSM_FULL_COM 和 LINSM_NO_COM 可见 [SWS_LinSM_00220]。

zustaende cluster_init LINSM_INIT (je LIN-Netzwerk) cluster_full LINSM_FULL_COM Start Systemstart UNINIT LINSM_UNINIT Start->UNINIT NO_COM LINSM_NO_COM (Bus still) UNINIT->NO_COM LinSM_Init (不向 ComM/BswM 报告) RUN LINSM_RUN_COMMUNICATION NO_COM->RUN LinSM_WakeupConfirmation(TRUE) 向 ComM 和 BswM 报告 FULL_COM GOTO LINSM_GOTO_SLEEP RUN->GOTO LinIf_GotoSleep 返回 E_OK Master:ComM 请求 NO_COM Slave:LinSM_GotoSleepIndication GOTO->NO_COM LinSM_GotoSleepConfirmation (与 success 无关) 向 ComM 和 BswM 报告 NO_COM

状态图:针对每个网络,LinSM 通过唤醒和休眠确认在 LINSM_NO_COM 与 LINSM_FULL_COM 之间切换。来源:[SWS_LinSM_00155]、[SWS_LinSM_00301]、SWS LinSM 第20页

LinSM 在调用中直接启动唤醒与休眠。它使用 LinSM_MainFunction [SWS_LinSM_00156] 中的定时器监控 LinIf 的确认(SWS LinSM 第28页)。在主节点上,对 COMM_NO_COMMUNICATION 的请求会立即导致 LinIf_GotoSleep [SWS_LinSM_00036]。在从节点上,该请求仅被保存 [SWS_LinSM_00230];只有 LinSM_GotoSleepIndication 才会触发休眠 [SWS_LinSM_00231]。Silence-after-Wakeup 定时器会延迟再次唤醒尝试 [SWS_LinSM_00237]。

调度切换仅存在于主节点上 [SWS_LinSM_00241]。LinSM 将 LinSM_ScheduleRequest 直接传递给 LinIf,并通过 BswM_LinSM_CurrentSchedule 报告结果(SWS LinSM 第26页)。对于错误处理,规定如下:

  • LinSM 向 DET 报告开发错误,错误代码来自 [SWS_LinSM_00053]。
  • LinIf 未返回回调被视为 LINSM_E_CONFIRMATION_TIMEOUT [SWS_LinSM_00224]。
  • 迁移失败后,LinSM 会重新设置先前的状态,以便一致地通知 ComM 和 BswM [SWS_LinSM_00177]。

在 ComM、BswM 与 LIN Interface 之间的角色

LIN State Manager(LinSM)是面向 LIN 的总线状态管理器。与其他总线状态管理器一样,ComM 通过它请求网络的通信能力(SWS ComM 第19页)。用于此目的的核心入口接口是 LinSM_RequestComMode [SWS_LinSM_00126]。当前模式由 LinSM_GetCurrentComMode [SWS_LinSM_00122] 提供。LinSM 仅在网络层面上工作。由哪个 LIN 驱动程序服务于网络被 LinIf 所屏蔽。因此,包含多个不同 LIN 驱动程序的 ECU 不会对 LinSM 产生影响(SWS LinSM 第28页)。

必选接口包括向下的 LinIf_GotoSleep 与 LinIf_ScheduleRequest,以及向上的通知 ComM_BusSM_ModeIndication、ComM_BusSM_BusSleepMode、BswM_LinSM_CurrentState 和 BswM_LinSM_CurrentSchedule [SWS_LinSM_00229](SWS LinSM 第41页)。LinSM 在唤醒序列中调用 LinIf_Wakeup(SWS LinSM 第27页)。它可以选择性使用 Det_ReportError 和 LinIf_SetTrcvMode [SWS_LinSM_00138]。LinIf 通过以下回调返回报告:

导入的类型如 ComM_ModeType、NetworkHandleType 和 LinIf_SchHandleType 由 [SWS_LinSM_00219] 确定。

kontext ComM ComM LinSM LinSM ComM->LinSM LinSM_RequestComMode LinSM_GetCurrentComMode BswM BswM BswM->LinSM LinSM_Init (Beispielregel) LinSM_ScheduleRequest SchM BSW-Scheduler (SchM) SchM->LinSM LinSM_MainFunction (periodisch) LinSM->ComM ComM_BusSM_ModeIndication ComM_BusSM_BusSleepMode LinSM->BswM BswM_LinSM_CurrentState BswM_LinSM_CurrentSchedule LinIf LinIf LinSM->LinIf LinIf_Wakeup / LinIf_GotoSleep LinIf_ScheduleRequest / LinIf_SetTrcvMode Det Det LinSM->Det Fehlermeldungen LinIf->LinSM LinSM_WakeupConfirmation LinSM_GotoSleepConfirmation LinSM_GotoSleepIndication LinSM_ScheduleRequestConfirmation Lin LIN 驱动(一个或多个) LinIf->Lin Zuordnung Netzwerk zu Treiber

上下文图:LinSM 充当上方 ComM、BswM 与下方 LinIf 之间的中介;LIN 驱动程序隐藏在 LinIf 之后。来源:[SWS_LinSM_00126]、[SWS_LinSM_00229]、[SWS_LinSM_00138]、[SWS_LinSM_00156]、SWS LinSM 第28页、Mode-Management-Guide 第54页

每个 LIN 网络的状态模型、初始化与周期性部分

启动时,在任何 API 调用之前,模块范围的状态 LINSM_UNINIT 处于激活状态(SWS LinSM 第22页)。LinSM_Init 是同步且不可重入的 [SWS_LinSM_00155]。该函数接收一个指向实现特定类型 LinSM_ConfigType [SWS_LinSM_00221] 的 post-build 配置的指针。此后,每个网络均处于父状态 LINSM_INIT 的子状态 LINSM_NO_COM 中。LinSM_Init 不会将这第一次迁移通知 ComM,也不会通知 BswM,因为 ComM 在此时尚未完成初始化(SWS LinSM 第23页)。在模式管理指南的示例中,BswM 规则在 Lin_Init 和 LinIf_Init 之后调用 LinSM_Init(null)(Mode-Management-Guide 第54页)。

在 LINSM_NO_COM 下总线保持静止(SWS LinSM 第23页)。仅在 LINSM_FULL_COM 下允许在总线上通信,并且每个网络独立于其他网络达到该状态。进入时发生以下情况(SWS LinSM 第23页):

  • ComM 收到带有 COMM_FULL_COMMUNICATION 的消息,BswM 收到带有 LINSM_FULL_COM 的消息。
  • 若配置了 LinSMTransceiverPassiveMode,LinSM 会通过 LinIf_SetTrcvMode 将收发器切换为激活状态。
  • 进入子状态 LINSM_RUN_COMMUNICATION [SWS_LinSM_00301]。

临时子状态 LINSM_GOTO_SLEEP 用于过渡等待睡眠确认的过程(SWS LinSM 第20页,SWS LinSM 第21页)。对于 BswM,只有 LinSM_ModeType 的两个值可见:LINSM_FULL_COM (0x01) 和 LINSM_NO_COM (0x02) [SWS_LinSM_00220]。

时间监控运行在 LinSM_MainFunction 中。该周期性函数维护请求超时的定时器 [SWS_LinSM_00156]。唤醒确认定时器也在其中运行,每个网络具有独立的定时器(SWS LinSM 第28页)。相反,实际的总线操作由 LinSM 在调用中直接启动,而无需等待下一个 Main-Function 周期 [SWS_LinSM_00036] [SWS_LinSM_00231]。

zustaende cluster_init LINSM_INIT (je LIN-Netzwerk) cluster_full LINSM_FULL_COM Start Systemstart UNINIT LINSM_UNINIT Start->UNINIT NO_COM LINSM_NO_COM (Bus still) UNINIT->NO_COM LinSM_Init (不向 ComM/BswM 报告) RUN LINSM_RUN_COMMUNICATION NO_COM->RUN LinSM_WakeupConfirmation(TRUE) 向 ComM 和 BswM 报告 FULL_COM GOTO LINSM_GOTO_SLEEP RUN->GOTO LinIf_GotoSleep 返回 E_OK Master:ComM 请求 NO_COM Slave:LinSM_GotoSleepIndication GOTO->NO_COM LinSM_GotoSleepConfirmation (与 success 无关) 向 ComM 和 BswM 报告 NO_COM

状态图:针对每个网络,LinSM 通过唤醒和睡眠确认在 LINSM_NO_COM 与 LINSM_FULL_COM 之间切换;LINSM_GOTO_SLEEP 仅为等待状态。来源:[SWS_LinSM_00155],[SWS_LinSM_00301],SWS LinSM 第20页,SWS LinSM 第21页,SWS LinSM 第24页

唤醒:从 LINSM_NO_COM 到 LINSM_FULL_COM

当 ComM 通过 LinSM_RequestComMode 请求完全通信时,LIN 网络被唤醒。若其他节点唤醒总线,则不由此 LinSM 处理,而由 EcuM 处理;该情况同样会导致 ComM 发起请求(SWS LinSM 第27页)。随后 LinSM 直接调用 LinIf_Wakeup 并重置最大重试次数计数器。若 LinIf 已处于唤醒状态,则会忽略该调用。在调用之前,LinSM 会使用 LinSMConfirmationTimeout 为该通道启动唤醒确认定时器。该值必须为 0 或 Main-Function 周期的整数倍(SWS LinSM 第28页)。

若 LinSM_WakeupConfirmation 报告 success = TRUE,则网络切换至 LINSM_FULL_COM [SWS_LinSM_00132]。在所有其他情况下,LinSM 会重新设置请求前的状态,以便 ComM 和 BswM 仍能收到模式指示(SWS LinSM 第27页)。对于从节点,LinIf 仅在接收到主节点的第一个 LIN 报头时才进行确认。若主节点未开始调度,则不会收到确认,并触发 LinSM 的超时(SWS LinIf 第52页)。

唤醒 LIN 网络(内部唤醒)ComMLinSMLinIfBswMLinSM_RequestComMode(network,COMM_FULL_COMMUNICATION)启动唤醒确认定时器(LinSMConfirmationTimeout)LinIf_Wakeup(Channel)直接执行,不在 LinSM_MainFunction 中E_OKE_OKMaster:发送唤醒信号后的确认Slave:收到第一个 LIN 报头时的确认altsuccess = TRUELinSM_WakeupConfirmation(network, TRUE)Timer stoppenLINSM_FULL_COM / LINSM_RUN_COMMUNICATIONComM_BusSM_ModeIndication(network,COMM_FULL_COMMUNICATION)BswM_LinSM_CurrentState(network, LINSM_FULL_COM)success = FALSELinSM_WakeupConfirmation(network, FALSE)重新设置请求前的状态ComM_BusSM_ModeIndication(network, bisheriger Modus)BswM_LinSM_CurrentState(network, bisheriger Zustand)无确认LinSM_MainFunction: Timer abgelaufenLINSM_E_CONFIRMATION_TIMEOUT

时序图:LinSM 在调用中立即唤醒网络,但状态更改仅随 LinIf 的异步确认发生。来源:[SWS_LinSM_00126],[SWS_LinSM_00132],[SWS_LinSM_00224],SWS LinSM 第42页,SWS LinSM 第27页

第二个时间限制是带有 LinSMSilenceAfterWakeupTimeout 的唤醒后静默定时器(Silence-after-Wakeup 定时器)[SWS_LinSM_00235]。只要它在运行,即使 ComM 请求完全通信,LinSM 也会延迟 LinIf_Wakeup 的新调用 [SWS_LinSM_00237]。超时后,只要 ComM 继续请求 COMM_FULL_COMMUNICATION,LinSM 就会重新启动唤醒流程 [SWS_LinSM_00236]。启动定时器的条件位于此处未提供的需求中,因此不作描述。

wakeup_entscheidung A ComM: LinSM_RequestComMode (COMM_FULL_COMMUNICATION) B Silence-after-Wakeup 定时器是否正在运行? A->B C 延迟 LinIf_Wakeup 直至定时器超时 B->C 是 D 重置重试计数器 启动唤醒确认定时器 B->D 不 C->D Timer abgelaufen E LinIf_Wakeup(Channel) direkt aufrufen D->E F LinIf 的反馈? E->F G LINSM_FULL_COM 向 ComM 和 BswM 报告 F->G WakeupConfirmation TRUE H 重新设置并报告 请求前的状态 F->H WakeupConfirmation FALSE I LinSM_MainFunction: Timer abgelaufen LINSM_E_CONFIRMATION_TIMEOUT F->I 无确认 J Silence-after-Wakeup 超时 且继续请求 COMM_FULL_COMMUNICATION J->D 重新启动唤醒流程

活动图:对完全通信的请求根据定时器状态和反馈结束于 LINSM_FULL_COM、旧状态或确认超时中。来源:[SWS_LinSM_00237],[SWS_LinSM_00236],[SWS_LinSM_00224],SWS LinSM 第27页,SWS LinSM 第28页

进入睡眠:主节点请求,从节点跟随总线

Goto-Sleep 流程在主节点与从节点之间有所不同。在两种情况下,LinSM 都会向 BswM 和 ComM 报告进入无通信模式(No-Communication 模式),即使发生问题也是如此(SWS LinSM 第24页)。

对于主节点适用:

  • 若 ComM 在 LINSM_FULL_COM 下请求 COMM_NO_COMMUNICATION,LinSM 会调用 LinIf_GotoSleep,后者发送 Goto-Sleep 命令 [SWS_LinSM_10208]。
  • 该调用直接执行 [SWS_LinSM_00036]。在所有其他情况下均不执行 [SWS_LinSM_10209]。
  • 该调用仅在子状态 LINSM_RUN_COMMUNICATION 下被允许(SWS LinSM 第24页)。
  • 若 LinIf_GotoSleep 返回 E_NOT_OK,则 LinSM_RequestComMode 同样返回 E_NOT_OK。原状态被重新设置,以便 ComM 和 BswM 获得指示 [SWS_LinSM_00177]。

随后 LinIf 调用 LinSM_GotoSleepConfirmation [SWS_LinSM_00135]。若 LinSM 当时处于 LINSM_FULL_COM/LINSM_GOTO_SLEEP,则无论参数 success 为何,均切换至 LINSM_NO_COM。在任何其他状态下,它都会忽略该确认(SWS LinSM 第24页)。规范示意图在 LinIf_GotoSleep 之前启动定时器,并在确认后停止该定时器(SWS LinSM 第47页)。

LIN 网络进入睡眠(Master)ComMLinSMLinIfBswMLinSM_RequestComMode(network,COMM_NO_COMMUNICATION)仅在 LINSM_FULL_COM / LINSM_RUN_COMMUNICATION 中直接调用,不在 LinSM_MainFunction 中start_timer()LinIf_GotoSleep(Channel)altLinIf_GotoSleep = E_OKE_OKUnterzustand LINSM_GOTO_SLEEPE_OKLinSM_GotoSleepConfirmation(network, success)stop_timer()LINSM_NO_COM(与 success 无关)ComM_BusSM_ModeIndication(network,COMM_NO_COMMUNICATION)BswM_LinSM_CurrentState(network, LINSM_NO_COM)LinIf_GotoSleep = E_NOT_OKE_NOT_OKbisherigen Zustand erneut setzenE_NOT_OKComM_BusSM_ModeIndication(network,COMM_FULL_COMMUNICATION)BswM_LinSM_CurrentState(network, LINSM_FULL_COM)

时序图:在主节点中,ComM 触发进入睡眠;LINSM_NO_COM 仅在收到睡眠确认后才达到,LinIf_GotoSleep 返回 E_NOT_OK 会导致重新报告旧状态。来源:[SWS_LinSM_00036],[SWS_LinSM_00177],[SWS_LinSM_00135],SWS LinSM 第47页,SWS LinSM 第24页

在从节点中,由主节点决定进入睡眠。若 ComM 在 LINSM_FULL_COM 下请求 COMM_NO_COMMUNICATION,LinSM 仅保存该请求并返回 E_OK [SWS_LinSM_00230]。当接收到 Goto-Sleep 命令或发生总线空闲超时时,LinIf 报告 LinSM_GotoSleepIndication [SWS_LinSM_91000]。只有在此之后,LinSM 才会直接调用 LinIf_GotoSleep [SWS_LinSM_00231]。后续流程取决于所保存的请求:

  • 若请求了 COMM_NO_COMMUNICATION 且 LinIf_GotoSleep 返回 E_OK,则 ComM 通过 ComM_BusSM_BusSleepMode 获知总线睡眠事件 [SWS_LinSM_00233]。
  • 若请求了完全通信,则 LinSM 在睡眠确认后重新启动唤醒流程 [SWS_LinSM_00234]。

在 LinIf 中,从节点流程将控制器以及(若支持)收发器置于睡眠模式(SWS LinIf 第137页)。

LIN 网络进入睡眠(Slave)ComMLinSMLinIfBswMUse Case: ComM 的睡眠请求LinSM_RequestComMode(network,COMM_NO_COMMUNICATION)angeforderten Modus speichern,无进一步动作E_OKUse Case: BusereignisLinSM_GotoSleepIndication(Channel)Goto-Sleep-Kommando empfangen或总线空闲超时start_timer()LinIf_GotoSleep(Channel)直接执行,不在 LinSM_MainFunction 中E_OKaltangefordert: COMM_NO_COMMUNICATIONComM_BusSM_BusSleepMode(Channel)LinSM_GotoSleepConfirmation(network, success)stop_timer()LINSM_NO_COMComM_BusSM_ModeIndication(network,COMM_NO_COMMUNICATION)BswM_LinSM_CurrentState(network, LINSM_NO_COM)angefordert: COMM_FULL_COMMUNICATIONLinSM_GotoSleepConfirmation(network, success)LINSM_NO_COM,向 ComM 和 BswM 报告kein Bus-Sleep-Ereignis an ComM重新启动唤醒过程 (LinIf_Wakeup)

时序图:在从节点中,ComM 的睡眠请求仅被保存,进入睡眠由 LinIf 的指示触发。来源:[SWS_LinSM_00230],[SWS_LinSM_00231],[SWS_LinSM_00233],[SWS_LinSM_00234],SWS LinSM 第48页,SWS LinSM 第24页

切换调度表(仅主节点)

仅当至少有一个通道配置为主节点时,LinSM_ScheduleRequest [SWS_LinSM_00113] 才存在 [SWS_LinSM_00241]。回调 LinSM_ScheduleRequestConfirmation [SWS_LinSM_00242] 亦是如此。该异步函数直接将请求传递至 LinIf_ScheduleRequest,无需通过 Main Function 中转。它将其返回值返回给调用方(SWS LinSM 第26页)。调用方是 BswM。它使用 LinSMScheduleIndex 作为符号引用,其值必须与 LinIf 中的值一致(SWS LinSM 第52页)。LIN 传输协议的诊断调度切换同样通过 BswM 和 LinSM_ScheduleRequest 进行(SWS LinIf 第142页)。

LinSM 通过 BswM_LinSM_CurrentSchedule 报告结果(SWS BswM 第80页)。报告哪个调度取决于执行过程(SWS LinSM 第26页):

  • 若 LinSM_ScheduleRequestConfirmation [SWS_LinSM_00129] 在定时器到期前确认,LinSM 则报告新调度。
  • 若定时器已到期,它报告未更改的调度。
  • 若 LinIf_ScheduleRequest 返回 E_NOT_OK,它会在下一次 Main-Function 调用中报告旧调度。
  • 它也会报告未经预先请求的切换,例如 LinIf 在进入睡眠时执行的向 NULL 调度的切换。
调度表切换(仅限 Master)BswMLinSMLinIfLinSM_ScheduleRequest(network, schedule)start_timer()LinIf_ScheduleRequest(Channel, schedule)直接执行,不在 LinSM_MainFunction 中altE_OK,定时器超时前确认E_OKE_OK (weitergereicht)LinSM_ScheduleRequestConfirmation(network, schedule)stop_timer()BswM_LinSM_CurrentSchedule(network, neuer Schedule)E_OK, Timer abgelaufenE_OKE_OK (weitergereicht)LinSM_MainFunction: Timer abgelaufenBswM_LinSM_CurrentSchedule(network, 未更改的调度表)LinIf_ScheduleRequest = E_NOT_OKE_NOT_OKE_NOT_OK (weitergereicht)LinSM_MainFunction 的下一次调用BswM_LinSM_CurrentSchedule(network, alter Schedule)

时序图:调度切换被直接传递并受时间监控;BswM 在每种结果中都能获知实际有效的调度。来源:[SWS_LinSM_00113],[SWS_LinSM_00129],[SWS_LinSM_00156],SWS LinSM 第26页,SWS LinSM 第48页

节点类型、配置及与后续版本的差异

参数 LinSMNodeType 决定某通道适用主节点还是从节点行为。LinSM_ScheduleRequest、LinSM_ScheduleRequestConfirmation 和 LinSM_GotoSleepIndication 是否可用取决于此 [SWS_LinSM_00241] [SWS_LinSM_00242] [SWS_LinSM_00243]。最重要的时间参数是 LinSMConfirmationTimeout(SWS LinSM 第28页)和 LinSMSilenceAfterWakeupTimeout [SWS_LinSM_00235]。LinSMSchedule 容器引用 LinIf 配置中的调度(SWS LinSM 第52页)。DET 检查依赖于 LinSMDevErrorDetect [SWS_LinSM_00239]。

许多文档出处来自后续版本。对于 R20-11,以需求为准,并在某些地方有所偏差:

发生错误时的行为

[SWS_LinSM_00053] 规定了开发错误:

  • LINSM_E_UNINIT (0x00)
  • LINSM_E_NONEXISTENT_NETWORK (0x20)
  • LINSM_E_PARAMETER (0x30)
  • LINSM_E_PARAM_POINTER (0x40)
  • LINSM_E_INIT_FAILED (0x50)

当 LinSMDevErrorDetect 激活时,回调会检查网络和初始化,例如 LinSM_GotoSleepIndication [SWS_LinSM_00239] [SWS_LinSM_00240]。回调没有返回值,因此在这些地方仅进行 DET 报告(SWS LinSM 第40页,SWS LinSM 第39页)。带有 Std_ReturnType 的 API 还会返回 E_NOT_OK,例如在网络、模式或调度无效时,或在 LINSM_UNINIT 状态下(SWS LinSM 第36页,SWS LinSM 第34页)。解释:这些检查源自 R24-11 起的版本,且在内容上对 R20-11 应该同样适用。 问题 Q-6b2d75dd286bdcb4 (未决)值得注意的是,后续版本对于 void API LinSM_GetVersionInfo [SWS_LinSM_00117] 在指针为 NULL 时同样要求返回 E_NOT_OK(SWS LinSM 第34页)。

对于未收到的 LinIf 回调,LINSM_E_CONFIRMATION_TIMEOUT (0x00) 被指定为运行时错误 [SWS_LinSM_00224]。推测其通过 Det_ReportRuntimeError 报告,后续版本将其列为必选接口(SWS LinSM 第41页)。 问题 Q-06b13a07d0d60152 (未决)在功能上,LinSM 确保 ComM 和 BswM 始终看到一致的状态:

  • 在唤醒失败后,它会重新设置并报告旧状态(SWS LinSM 第27页)。
  • 当 LinIf_GotoSleep 返回 E_NOT_OK 时同样如此 [SWS_LinSM_00177]。
  • 即使 success = FALSE,睡眠确认也会导致切换至 LINSM_NO_COM(SWS LinSM 第24页)。
  • 在调度切换失败时,BswM 会收到旧调度或未更改的调度(SWS LinSM 第26页)。

进一步详细证据

基于 R20-11 规范性需求以及部分源自其他版本的分配文档位置和示意图生成的 AI 模块指南。标记为解释的陈述不具规范性证明。唯有 AUTOSAR 规范具有约束力。

LIN State Manager (LinSM)

Manages state transitions of LIN networks.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

函数 LinSM_Init [SWS_LinSM_00155] 📄 PDF

void LinSM_Init (const LinSM_ConfigType* ConfigPtr);

This function initializes the Lin SM.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 18f94187e199 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 LinSM_Init 用于在 AUTOSAR Classic 平台中初始化软件模块 LIN State Manager(LinSM)[SWS_LinSM_00155]。

使用与接口参数:

  • 调用同步:初始化函数的执行被指定为同步(Synchronous)[SWS_LinSM_00155]。
  • 输入参数:作为唯一参数传递类型为 const LinSM_ConfigType* 的 ConfigPtr [SWS_LinSM_00155]。它充当指向 LinSM 的 Post-Build 配置数据的指针 [SWS_LinSM_00155]。
  • 其他参数与返回值:该接口不返回任何返回值(void)[SWS_LinSM_00155]。不存在附加的输入/输出参数或纯输出参数 [SWS_LinSM_00155]。
  • 头文件与服务标识:声明通过头文件 LinSM.h 提供,并带有服务 ID 0x01 [SWS_LinSM_00155]。

并发性与限制:

对于 LinSM_Init 的执行,规定该函数是不可重入的(Non reentrant)[SWS_LinSM_00155]。因此,不得通过多个线程并行调用,也不得由更高优先级的上下文抢占调用 [SWS_LinSM_00155]。

此使用说明基于 AUTOSAR CP R20-11 规范自动生成。

实现者指南即将推出(复杂度 I2)

函数 LinSM_ScheduleRequest [SWS_LinSM_00113] 📄 PDF

Std_ReturnType LinSM_ScheduleRequest (NetworkHandleType network, LinIf_SchHandleType schedule);

The upper layer requests a schedule table to be changed on one LIN network.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: f2deb9e24090 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

上层调用函数 LinSM_ScheduleRequest 以请求在指定的 LIN 通道上切换调度表 [SWS_LinSM_00113]。该接口在头文件 LinSM.h 中定义,服务 ID 为 0x10,并以异步和可重入方式工作 [SWS_LinSM_00113]。调用时,通过参数 network(NetworkHandleType)传递受影响的通道,并通过 schedule(LinIf_SchHandleType)传递所需的新表 [SWS_LinSM_00113]。

错误处理与返回值

如果模块接受了切换表的请求,函数返回 E_OK [SWS_LinSM_00113]。反之,如果无法执行调用(例如因为模块尚未初始化),则函数返回返回值 E_NOT_OK [SWS_LinSM_00113]。该服务未列出 DET 或 DEM 的特定错误码。

约束条件与交互

该函数的提供主要取决于配置参数 LinSMNodeType:LinSM_ScheduleRequest 仅在模块在至少一个通道上配置为 LIN 主节点时可用,在纯 LIN 从节点配置中则省略 [SWS_LinSM_00241]。同样,对应的确认函数 LinSM_ScheduleRequestConfirmation 也需要主节点配置 [SWS_LinSM_00242]。关于成功完成异步表切换向上层的反馈 vermutlich 应当通过该确认函数进行。 问题 Q-34c3ec02381c72ca (未决)

该文本由 AI 生成;以 AUTOSAR 规范为准。

实现者指南即将推出(复杂度 I1)

函数 LinSM_GetCurrentComMode [SWS_LinSM_00122] 📄 PDF

Std_ReturnType LinSM_GetCurrentComMode (NetworkHandleType network, ComM_ModeType* mode);

Function to query the current communication mode.

函数 LinSM_RequestComMode [SWS_LinSM_00126] 📄 PDF

Std_ReturnType LinSM_RequestComMode (NetworkHandleType network, ComM_ModeType mode);

Requesting of a communication mode. The mode switch will not be made instant. The Lin SM will notify the caller when mode transition is made.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 64785219821f 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

用法与调用上下文

在头文件 LinSM.h 中声明的函数 LinSM_RequestComMode(服务 ID 0x12)用于为传入的 LIN 网络异步请求通信模式 [SWS_LinSM_00126]。通过 NetworkHandleType 类型的参数 network 标识相关 LIN 通道,而 ComM_ModeType 类型的 mode 指定所需的通信模式 [SWS_LinSM_00126]。实际的模式切换并非瞬间完成;LinSM 仅在模式转换成功完成后才通知调用者 [SWS_LinSM_00126]。Interpretation: 作为主调用者,ComM 可能会承担此角色,因为模式切换是在通道级别请求和确认的。 问题 Q-0fcce16df8a29149 (未决)

返回值和并发性

该接口被指定为可重入的,并返回 Std_ReturnType 类型的状态值 [SWS_LinSM_00126]:

错误处理与交互

在错误处理框架内,定义了与 LIN 接口的交互:如果对 LinIf_GotoSleep 的底层调用提供了返回值 E_NOT_OK,则 LinSM_RequestComMode 必须同样返回 E_NOT_OK [SWS_LinSM_00177]。当该函数返回 E_NOT_OK 时,LinSM 中必须保持或设置相同状态,以便向 ComM_BusSM_ModeIndication 和 BswM_LinSM_CurrentState 发出相应反馈 [SWS_LinSM_00177]。

本文由系统自动生成。所有技术陈述均完全基于 AUTOSAR R20-11 的规范数据。

实现者指南即将推出(复杂度 I2)

函数 LinSM_MainFunction [SWS_LinSM_00156] 📄 PDF

void LinSM_MainFunction (void);

Periodic function that runs the timers of different request timeouts

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: ca2058e9ab04 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

函数 LinSM_MainFunction 充当 AUTOSAR Classic 架构内 LIN State Manager 模块(LinSM)的核心周期性主函数 [SWS_LinSM_00156]。根据规范,它具有语法 void LinSM_MainFunction (void) 和十六进制服务 ID 0x30 [SWS_LinSM_00156]。由于它既不接收参数也不提供返回值,因此在模块内纯粹基于状态运行 [SWS_LinSM_00156]。其主要功能任务是持续运行并更新内部定时器,这些定时器负责监视各种请求超时(Request Timeouts)[SWS_LinSM_00156]。

调用上下文与调度

接口的声明通过头文件 SchM_LinSm.h 进行 [SWS_LinSM_00156]。Interpretation:由于这种集成到 Schedule Manager 的方式,该函数应当由 BSW 调度器在操作系统任务的上下文中周期性调用。 问题 Q-d83f7b3f0b251f4f (未决)这种规律的周期对于能够确定性地检测和处理 LIN 通道和状态请求时挂起的超时条件至关重要。在当前规范范围内,未对此服务指定诸如 DET 错误码或 DEM 事件等特定错误处理以及形式重入标准,因此予以省略。

本使用说明是基于 AUTOSAR R20-11 的规范自动生成的。

实现者指南即将推出(复杂度 I1)

函数 LinSM_ScheduleRequestConfirmation [SWS_LinSM_00129] 📄 PDF

void LinSM_ScheduleRequestConfirmation (NetworkHandleType network, LinIf_SchHandleType schedule);

The Lin If module will call this callback when the new requested schedule table is active.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 966015905644 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

使用

函数 LinSM_ScheduleRequestConfirmation 用作模块 LinSM 的回调接口,具有服务 ID 0x20 [SWS_LinSM_00129]。它可通过头文件 LinSM.h 获取,并在先前请求的新调度表在 LIN 总线上变为活动状态后由 LIN 接口(LinIf)调用 [SWS_LinSM_00129]。

该接口没有返回值(void),并向 LinSM 传递两个输入参数 [SWS_LinSM_00129]:

  • network(NetworkHandleType):用于唯一标识受影响的 LIN 通信通道 [SWS_LinSM_00129]。
  • schedule(LinIf_SchHandleType):传递新激活的调度表的标识符或指针 [SWS_LinSM_00129]。

并发性与交互

LinSM_ScheduleRequestConfirmation 的执行被指定为同步且可重入 [SWS_LinSM_00129]。不存在输入和输出参数(inout 或 out)[SWS_LinSM_00129]。相互协作与模块 LinIf 紧密耦合,LinIf 调用此回调函数以向 LinSM 确认调度表的状态更改 [SWS_LinSM_00129]。Interpretation:由于 LinIf 充当调用者,调用上下文应当与 LinIf 驱动程序或接口的执行处理相绑定。 问题 Q-500d6a653bfbaac0 (未决)

本使用说明基于 AUTOSAR 规范自动创建。

实现者指南即将推出(复杂度 I1)

函数 LinSM_GotoSleepIndication [SWS_LinSM_91000] 📄 PDF

void LinSM_GotoSleepIndication (NetworkHandleType Channel);

The Lin If will call this callback when the go to sleep command is received on the network or a bus idle timeout occurs. Only applicable for LIN slave nodes.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: f0a8b1578ff8 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

回调函数 LinSM_GotoSleepIndication ([SWS_LinSM_91000]) 用于向 LIN State Manager 通知通道进入睡眠状态。一旦在网络上接收到 Go-to-Sleep 命令或发生总线空闲超时,LIN Interface (LinIf) 就会执行调用。

用法与调用上下文

该函数同步执行且无返回值([SWS_LinSM_91000])。它通过头文件 LinSM.h 提供,并具有服务 ID 0x03。其唯一参数用于通道标识:

  • Channel (In):通过类型 NetworkHandleType ([SWS_LinSM_91000]) 标识受影响的 LIN 通道。

未指定输入/输出参数(inout)或输出参数(out)([SWS_LinSM_91000])。

并发性与限制

关于并发性,该接口被定义为可重入的([SWS_LinSM_91000])。一个重大的功能限制涉及节点属性:该回调仅适用于 LIN 从节点([SWS_LinSM_91000])。

此使用说明完全基于来自 AUTOSAR Release R20-11 的规范数据。

实现者指南即将推出(复杂度 I1)

函数 LinSM_GotoSleepConfirmation [SWS_LinSM_00135] 📄 PDF

void LinSM_GotoSleepConfirmation (NetworkHandleType network, boolean success);

The Lin If will call this callback when the go to sleep command is sent successfully or not sent successfully on the network.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: cf9e1845fe84 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

根据 [SWS_LinSM_00135],一旦 Go-to-Sleep 命令在 LIN 网络上传输完毕或传输失败,LIN Interface(LinIf)就会调用回调函数 LinSM_GotoSleepConfirmation。

用法与参数

该回调具有服务 ID 0x22,通过头文件 LinSM.h 声明,且没有返回值 [SWS_LinSM_00135]。使用两个传入参数进行标识和状态传输:

  • network:通过类型 NetworkHandleType 标识受影响的 LIN 通道 [SWS_LinSM_00135]。
  • success:作为布尔值指示 Go-to-Sleep 命令是否已成功在总线上发送(true)或未成功(false)[SWS_LinSM_00135]。

执行上下文与并发性

规范将该调用定义为同步且可重入 [SWS_LinSM_00135]。Interpretation:模块 LinSM 应当根据参数 success 更新其针对相应网络的内部状态,并确定总线上进入休眠状态的转换是否已确认。 问题 Q-b5dfd51188b9ff0b (未决)有效负载中未为此接口指定错误处理、返回值或特定的 DET/DEM 消息 [SWS_LinSM_00135]。

本文由 AI 生成;唯有 AUTOSAR 规范具有约束力。

实现者指南即将推出(复杂度 I1)

函数 LinSM_WakeupConfirmation [SWS_LinSM_00132] 📄 PDF

void LinSM_WakeupConfirmation (NetworkHandleType network, boolean success);

The Lin If will call this callback when the wake up signal command is sent not successfully/ successfully on the network.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 3915bb7b7db1 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

LIN 状态管理器中的回调函数 LinSM_WakeupConfirmation 用于确认在 LIN 网络上发送唤醒信号 [SWS_LinSM_00132]。一旦在网络上发送唤醒信号的命令成功或未成功传输,它就会被 LIN 接口(LinIf)调用 [SWS_LinSM_00132]。

以下规范特性适用于调用上下文、并发性和参数传递 [SWS_LinSM_00132]:

  • 同步行为与可重入性:该函数同步执行(Synchronous),并被归类为可重入的(Reentrant)[SWS_LinSM_00132]。
  • 通道标识(network):传入的 NetworkHandleType 类型输入参数指定了发生发送过程的相应 LIN 通道 [SWS_LinSM_00132]。
  • 成功状态(success):布尔参数指示唤醒信号是否能够成功发送(true)或传输是否失败(false)[SWS_LinSM_00132]。
  • 返回值和输入/输出参数:该函数没有返回值(void),并且既未定义输出参数,也未定义输入/输出参数 [SWS_LinSM_00132]。

该接口具有服务 ID 0x21,并通过头文件 LinSM.h 提供 [SWS_LinSM_00132]。规范元素中未指定具体错误代码以及通过 Default Error Tracer (DET) 或 Diagnostic Event Manager (DEM) 模块进行错误处理的要求 [SWS_LinSM_00132]。

本使用说明基于 AUTOSAR Classic Release R20-11 规范。

类型 LinSM_ModeType [SWS_LinSM_00220] 📄 PDF

Type used to report the current mode to the Bsw M

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 939c0e58134f 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

数据类型 LinSM_ModeType 是 LIN State Manager 的标准类型,它基于基本类型 uint8 构建,并通过头文件 LinSM.h 提供 [SWS_LinSM_00220]。该类型的主要任务是将 LIN 网络的当前通信模式报告给 BSW Mode Management(BswM)[SWS_LinSM_00220]。

在取值范围中为 LinSM_ModeType 指定了两种状态 [SWS_LinSM_00220]:

  • LINSM_FULL_COM(数值 0x01):指示无限制完全通信(Full communication)状态 [SWS_LinSM_00220]。
  • LINSM_NO_COM(数值 0x02):表示无正在进行通信(No communication)的状态 [SWS_LinSM_00220]。

在错误处理和并发性方面,由于这是基本类型声明,类型定义不包含其自身的错误码、DET 消息或 DEM 事件 [SWS_LinSM_00220]。Interpretation:将此类型的值传递给 BswM 应当在 LinSM 的上层状态转换过程中进行,调用者必须确保不传递定义状态之外的无效值。 问题 Q-fe193732b8be2388 (未决)

本使用说明由 AI 创建。

实现者指南即将推出(复杂度 I1)

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_LinSM
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_LinSM@rel:R20-11#722f7642
Content hash
722f7642
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_LINStateManager.pdf#nameddest=SWS_LinSM_00155

初始化与状态

-

void LinSM_GetVersionInfo (Std_VersionInfoType* versioninfo);
LinSM_Init 函数

This function initializes the Lin SM.

void LinSM_Init (const LinSM_ConfigType* ConfigPtr);

服务

Function to query the current communication mode.

Std_ReturnType LinSM_GetCurrentComMode (NetworkHandleType network, ComM_ModeType* mode);

The Lin If will call this callback when the go to sleep command is sent successfully or not sent successfully on the network.

void LinSM_GotoSleepConfirmation (NetworkHandleType network, boolean success);

The Lin If will call this callback when the go to sleep command is received on the network or a bus idle timeout occurs. Only applicable for LIN slave nodes.

void LinSM_GotoSleepIndication (NetworkHandleType Channel);

Requesting of a communication mode. The mode switch will not be made instant. The Lin SM will notify the caller when mode transition is made.

Std_ReturnType LinSM_RequestComMode (NetworkHandleType network, ComM_ModeType mode);

The upper layer requests a schedule table to be changed on one LIN network.

Std_ReturnType LinSM_ScheduleRequest (NetworkHandleType network, LinIf_SchHandleType schedule);

The Lin If module will call this callback when the new requested schedule table is active.

void LinSM_ScheduleRequestConfirmation (NetworkHandleType network, LinIf_SchHandleType schedule);

The Lin If will call this callback when the wake up signal command is sent not successfully/ successfully on the network.

void LinSM_WakeupConfirmation (NetworkHandleType network, boolean success);

周期性

Periodic function that runs the timers of different request timeouts

void LinSM_MainFunction (void);

类型

Data structure type for the post - build configuration parameters.

Type used to report the current mode to the Bsw M