CP AUTOSAR标准之LIN Driver(AUTOSAR_SWS_LINDriver)

本文详细介绍了遵循AUTOSAR标准的LIN驱动程序,涵盖了LIN驱动的范围、架构概述、硬件单元分类、相关文档、约束、依赖、功能要求、API规范以及配置等内容。该驱动适用于ISO 17987的主节点和从节点,涉及LIN帧的处理、错误分类、唤醒功能及数据一致性。此外,还列举了与LIN驱动相关的函数定义、回调和接口要求。
摘要由CSDN通过智能技术生成

本文遵循autosar标准:R22-11

1 简介

  本文指定了 AUTOSAR 基础软件模块 LIN 驱动程序的功能、API 和配置。

1.1 范围

  LIN驱动程序适用于ISO 17987主节点和从节点。AUTOSAR中的LIN实现偏离了本LIN驱动器规范中所述的ISO 17987规范,但LIN总线上的行为不会发生变化。其目的是能够将所有现有的LIN节点与AUTOSAR LIN实现(即LIN驱动程序)一起重用。
它旨在支持从简单的SCI/UART到复杂的LIN硬件控制器的全套LIN硬件。使用SW-UART实现超出了范围。

1.2 架构概述

  LIN 驱动程序是微控制器抽象层 (MCAL) 的一部分,执行硬件访问并向上层提供独立于硬件的 API。唯一可以访问 LIN 驱动程序的上层是 LIN 接口。一个 LIN 驱动程序可以支持多个通道。这意味着 LIN 驱动程序可以处理一个或多个 LIN 通道,只要它们属于同一 LIN 硬件单元。
  在下面的示例中,三个不同的 LIN 驱动器连接到 LIN 接口。仅包含一个 LIN 的驱动是最常见的配置。
LIN 软件架构分层概述

2 LIN硬件单元分类

  LIN硬件单元组合了一个或多个LIN通道。
  下图显示了连接到多个 LIN 物理通道的不同 LIN 硬件类型的分类:
LIN 硬件单元分类

3相关文档

3.1 输入文件

基础软件模块列表:AUTOSAR_TR_BSWModuleList.pdf
分层软件架构:AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
基础软件模块总体要求:AUTOSAR_SRS_BSWGeneral.pdf
标准类型规范:AUTOSAR_SWS_StandardTypes.pdf
默认错误跟踪:AUTOSAR_SWS_DefaultErrorTracer.pdf
SPAL的一般要求:AUTOSAR_SRS_SPALGeneral.pdf
LIN需求文档:AUTOSAR_SRS_LIN.pdf
LIN接口规范:AUTOSAR_SWS_LINInterface.pdf
ECU配置说明:AUTOSAR_TPS_ECUConfiguration.pdf
MCU驱动规范:AUTOSAR_SWS_MCUDriver.pdf
诊断事件管理:AUTOSAR_SWS_DiagnosticEventManager.pdf
ECU状态管理:AUTOSAR_SWS_ECUStateManager.pdf
基本软件模块描述模板:AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
LIN 收发器驱动:AUTOSAR_SWS_LINTransceiverDriver.pdf
基础软件模块通用规范:AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关标准和规范

[16] ISO 17987:2016 (all parts), Road vehicles – Local Interconnect Network (LIN)

3.3 相关规范

  AUTOSAR 提供了基本软件模块的通用规范 [15](SWS BSW General),该规范对于 LIN 驱动程序也有效。
因此,SWS BSW General 规范应被视为 LIN 驱动程序的附加且必需的规范。

4 约束

  ECU 只允许一个 LIN 通道连接到特定的 LIN 集群。除非 ECU 中有未使用(未连接)的通道,否则 LIN 通道的数量等于 LIN 簇的数量。
  [SWS_Lin_00045]一个 LIN 驱动程序提供对可能由多个 LIN 通道组成的一种 LIN 硬件单元类型(简单 UART 或专用 LIN 硬件)的访问。 (SRS_BSW_00347)
  [SWS_Lin_00201] 对于不同的 LIN 硬件单元,需要实现单独的 LIN 驱动程序。实现者需要使驱动程序适应类似 LIN 通道的不同实例。
  [SWS_Lin_00177] 如果在一个 ECU 中实现多个 LIN 驱动程序实例(相同或不同供应商),则必须修改文件名、API 名称和已发布的参数,以便不会生成两个具有相同名称的定义。该名称应根据 SRS_BSW_00347 使用供应商 ID(需要区分不同供应商的 LIN 驱动程序)和供应商特定名称(需要区分一个供应商实现的不同硬件单元)进行扩展:<模块缩写><供应商 ID> <供应商特定名称>.
  LIN 接口负责调用正确的函数。配置期间应在 XML 文件中给出必要的信息。本文档适用于所有使用 LIN 的汽车领域。

5 依赖

Module MCU

  内部 LIN 硬件单元取决于系统时钟、预分频器和 PLL。因此,LIN 位时序的长度取决于模块MCU 中的时钟设置。LIN 驱动器模块不会在其 init 函数中负责设置配置时钟、预分频器和 PLL 的寄存器(例如,打开/关闭 PLL)。MCU 模块必须执行初始化操作。

Module Port

  端口驱动程序将 LIN 驱动程序使用的端口引脚配置为输入或输出。因此,在使用 LIN 功能之前必须初始化端口驱动程序。否则,LIN 驱动程序函数将未定义。

Module DET (Default Error Tracer)

  在开发模式下,Lin 模块通过模块DET 的 Det_ReportError 函数报告开发错误。

Module DEM (Diagnostic Event Manager)

  Lin 模块向诊断事件管理器报告生产错误。

OS (Operating System)

  LIN 驱动程序使用中断,因此依赖于配置中断源的操作系统。

LIN driver Users

  LIN 接口是 LIN 驱动程序服务的唯一使用者。

文件结构

  本文档中不定义代码文件结构。Lin.h 文件仅包含常量的外部声明,LIN 驱动程序 SWS 中指定的全局数据、类型定义和服务。仅供 LIN 驱动程序内部使用的常量、全局数据类型和函数,在 Lin.c中声明。

6 溯源

7 功能

  LIN 驱动程序模块需要通过连接到驱动程序所在节点的任何 LIN 集群来管理与硬件相关的通信方面。这包括接受用于传输到总线上的报头数据、要传输的响应帧数据、报头信息的检索和用于节点的响应帧的数据的检索。
存在对节点和集群的睡眠模式管理的需求。这意味着能够检测并生成ISO 17987规范中定义的“唤醒”脉冲。如果底层硬件支持低功率模式,则包括进入和退出该状态。

7.1 一般要求

  Lin 模块是一个基本软件模块,可以直接访问硬件,Lin 模块应符合 ISO 17987 规范,这适用于 ISO 17987 LIN 主节点和从节点。Lin 模块应完成所有设计和实现,实现所有 LIN 硬件的 ISR需要的单元中断,确保所有未使用的中断禁用,在 ISR 结束时重置中断标志(如果不是由硬件自动完成)。
Lin 模块不应配置中断(即优先级),也不应设置中断向量表。

7.2 LIN 驱动程序初始化

  在 LIN 总线上开始通信之前,必须初始化 LIN 驱动程序和相关 LIN 通道,Lin 模块不得初始化或配置未使用的 LIN 通道。
  驱动程序初始化(Lin_Init)处理与应该是LIN 硬件单元中存在的所有通道相关的初始化。这可能包括所有可用 LIN 通道的任何静态变量或硬件寄存器设置。每个通道还必须根据提供的配置进行初始化,例如总线上的波特率等。
必须至少有一个静态定义的配置集合可用于 LIN 驱动程序。当 EcuM 调用初始化函数时,它必须提供一个指向其配置的指针。
  补充:Lin 模块不得初始化或配置未使用的 LIN 通道。Lin应允许环境在运行时在不同的静态配置数据之间进行选择。Lin 模块的配置应包括数据由静态配置数据定义的通信速率设置。用于硬件寄存器的 Lin 模块的配置数据应作为硬件特定数据结构存储在 ROM中。每个 LIN PID 应与一个校验和模型相关联(“enhanced”,其中 PID 包含在校验和,或“classic”,其中仅对响应数据进行校验和)。每个LIN PID应与以字节为单位的响应数据长度相关联。

7.3 状态图

  LIN 驱动程序有一个状态机,如下图
在这里插入图片描述

LIN_UNINIT:Lin模块尚未初始化,无法使用。
LIN_INIT:LIN 驱动程序已初始化,使每个可用通道做好服务准备。
LIN_CH_OPERATIONAL:各个通道已初始化(使用至少一个静态配置的数据集)并且能够参与 LIN 集群。
LIN_CH_SLEEP:启用“唤醒”脉冲的检测。如果硬件提供了低功耗模式,则 LIN 硬件将进入低功耗模式。
Reset -> LIN_UNINIT:复位后,Lin 模块应设置其状态为 LIN_UNINIT。
LIN_UNINIT -> LIN_INIT: 当函数 Lin_Init 被调用时,Lin 模块应从LIN_UNINIT 到 LIN_INIT状态。LIN 模块的环境应在运行时仅调用函数 Lin_Init 一次。进入状态 LIN_INIT 时,Lin 模块应将每个通道设置为状态 LIN_CH_SLEEP,如果配置参数 LinChannelWakeupSupport 支持外部唤醒检测,则启用总线监视该通道上的唤醒请求,并可选择设置LIN 硬件单元降低功耗运行模式(如果硬件支持)。
LIN_CH_OPERATIONAL ‑> LIN_CH_SLEEP_PENDING 到Lin_GoToSleep:如果 LIN 接口请求进入睡眠状态,Lin 模块应确保 LIN 集群的其余部分也进入睡眠状态。这是通过在进入 LIN_CH_SLEEP_PENDING 状态之前在总线上发出进入睡眠命令来实现的。此要求仅适用于 LIN 主节点。
LIN_CH_SLEEP_PENDING ‑> LIN_CH_SLEEP:调用 Lin_GetStatus时,LIN 驱动程序应直接进入 LIN_CH_SLEEP 状态,即使尚未发送进入睡眠命令。此要求仅适用于 LIN 主节点。
LIN_CH_OPERATIONAL ‑> LIN_CH_SLEEP 通过Lin_GoToSleepInternal:如果 LIN 接口请求内部进入睡眠状态,则 LIN 驱动程序应直接进入LIN_CH_SLEEP 状态。
LIN_CH_SLEEP ‑> LIN_CH_OPERATIONAL 通过 Lin_Wakeup:如果LIN 通道处于 LIN_CH_SLEEP 状态,则函数 Lin_Wakeup 应将 LIN 通道置于LIN_CH_OPERATIONAL 状态。
LIN_CH_SLEEP ‑> LIN_CH_OPERATIONAL 通过Lin_WakeupInternal:如果 LIN 通道处于 LIN_CH_SLEEP 状态,则函数 Lin_WakeupInternal 应将LIN 通道置于状态 LIN_CH_OPERATIONAL。
Lin_Wakeup:在从 LIN_CH_SLEEP 到 LIN_CH_OPERATIONAL 的状态转换期间,LIN 驱动程序应确保集群的其余部分处于唤醒状态。这是通过发出唤醒请求、强制总线进入显性状态 250 μs 至 5 ms 来实现的。
允许向当前模式发出模式切换请求,并且不会导致错误,即使启用了 DET。

7.4 帧处理

7.4.1 背景

  LIN 帧由两部分组成:LIN 标头和 LIN 响应。LIN 标头始终由 LIN 主节点传输,并指示帧的开始,包括 LIN PID。 LIN 响应在 LIN 标头之后在总线上传输,并且可以由主机或从机之一传输。
  驱动程序还必须能够访问有关每个 LIN PID 的校验和模型和数据长度的数据。与 LIN 1.3 相比,LIN 2.0 及更新版本具有不同的校验和模型,但 LIN 主站必须能够与所有从站节点类型(LIN1.3、LIN 2.0、LIN 2.1、LIN 2.2 和 ISO 17987)进行通信。但是,LIN 1.3 主站无法与 LIN 2.0 或更新版本的从站通信。校验和是响应的一部分,并且可能包含也可能不包含 PID,具体取决于所讨论的 PID 的校验和模型。 LIN ID 的 60 (0x3c) 至 63 (0x3f) 必须始终使用经典(仅响应数据)校验和模型 。
  LIN 驱动器模块使用 LIN 框架作为其基本构建块。从 LIN 驱动程序模块的角度来看,帧处理根据实现的节点类型而显着不同:

  • 对于 LIN 主节点,LIN 接口层请求在其调度程序时隙之一期间发送特定帧。来自该帧的任何响应最晚应在发送下一帧之前可用。
  • 如果主设备还负责发送帧响应,则在请求发送帧的同时会给出指示(PduInfoPtr‑>Drc=LIN_FRAMERESPONSE_TX)。
  • LIN 从节点等待接收 LIN 标头。收到的 LIN 标头将指示给 LIN 接口,该接口评估 PID 并返回有关响应的信息。在从机负责发送帧响应的情况下,也直接提供传输数据。

  LIN 驱动程序模块必须能够从响应中检索数据并将其提供给 LIN 接口模块。它必须从响应中检索所
有数据而不阻塞。

7.4.2 要求

7.4.2.1 LIN master

  以下仅对LIN 主节点生效。
  LIN 驱动程序应将提供的标识符解释为 PID。然后,标识符按 LIN 标头中提供的形式传输(Lin_SendFrame)。LIN 驱动程序应能够发送 LIN 标头。它由中断字段、同步字节字段和受保护的标识符字节字段组成。LIN 驱动程序应能够发送 LIN 标头和响应。如果 LIN 接口请求新帧传输,或者正在进行的传输可能仍在进行中或未成功完成,则 LIN 驱动程序应中止当前帧传输。
  Lin_GetStatus 函数返回当前的状态通道的帧传输请求。LIN 驱动程序应使接收到的数据可供 LIN 接口模块使用。成功接收整个 LIN 帧后,接收到的数据应准备用于 LIN 接口的函数调用。LIN 驱动程序应发送 LIN 提供的响应数据接口模块。

7.4.2.2 LIN slave

  以下要求仅适用于 LIN 从节点。
  LIN 驱动程序应能够在 LIN_CH_OPERATIONAL 状态下随时接收 LIN 标头。标头由中断字段、同步字节字段和受保护标识符字节字段组成。在 LIN 标头接收时,LIN 驱动程序应调用标头指示回调函数LinIf_HeaderInspiration,其中 PduPtr‑>Pid 设置为接收到的 PID 值,PduPtr‑>SduPtr 设置为LIN 驱动程序的(硬件或影子)缓冲区,从机响应应由上层写入其中。
注意:如果 LIN 硬件单元提供 ID(不带奇偶校验位的帧标识符)而不是 PID,则 LIN 驱动程序负责根据 ID 计算 PID 以符合回调接口。
  如果 LIN 硬件单元无法检测到无效 PID,则 LIN驱动程序不应评估 PID 值(即不应验证软件中的奇偶校位)。LIN 驱动程序应将收到的PID 提供给 LIN 接口模块。 在等待新的 LIN 标头时,如果 LIN 驱动程序检测到不符合有效 LIN 标头的总线事件(例如不完整的 LIN 标头),则应使用错误参数 LIN_ERR_HEADER 调用错误指示回调函数LinIf_LinErrorInduction()。
  LIN 驱动程序应能够发送、接收或忽略 LIN回复。在返回值为 E_OK 时调用 LinIf_HeaderInduction 后,LIN 驱动程序应评估PduPtr‑>Drc 以确定 LIN 响应的类型。如果要接收 LIN 响应(LIN_FRAMERESPONSE_RX), LIN 驱动程序应评估参数 PduPtr 中的 Cs 和 Dl 成员(在调用具有返回值 E_OK 的 LinIf_HeaderInduction 之后)以配置 LIN 响应接收。成功接收 LIN 响应后,LIN 驱动程序应通过调用 Rx 指示回调函数LinIf_RxIndicate 并将 Lin_SduPtr 参数设置为接收数据,直接将接收到的数据提供给 LIN 接口模块。 如果要传输 LIN 响应(LIN_FRAMERESPONSE_TX),LIN 驱动程序应评估参数 PduPtr 中的 Cs、Dl 和 SduPtr 成员(在调用具有返回值 E_OK 的 LinIf_HeaderInduction 之后)以设置和传输 LIN 响应。
  如果 LinIf_HeaderInduction 的返回值为 E_NOT_OK 或返回的 PduPtr‑>Drc为LIN_FRAMERESPONSE_IGNORE,则 LIN 驱动程序应忽略该响应。LIN 响应传输成功后,应通过调用 Tx 确认回调函数 LinIf_TxConfirmation直接向 LIN 接口模块确认传输。LIN 驱动程序不应向 LIN 接口报告任何事件如果 LIN 响应被忽略,直到接收到新的 LIN 标头。LIN 驱动程序应在响应传输和响应接收期间检测通信错误。一旦检测到错误,当前帧处理将被中止,并且错误指示回调函数LinIf_LinErrorInduction将被调用。
  每个相关(即不被忽略)LIN 响应的处理必须通过调用 LinIf_RxInduction、LinIf_TxConfirmation 或 LinIf_LinErrorIndicate 来完成,最晚在调用 Lin_HeaderInduction 指示新的 LIN 标头接收之前。

7.4.2.3 通用

  LIN 驱动程序应能够根据当前 LIN PDU 的校验和模型计算“经典”或“增强”校验和。如果 LIN 硬件单元无法对字节进行排队以进行传输或接收(例如简单的 UART 实现),则 LIN 驱动程序应提供临时通信缓冲区。LIN 驱动程序应无阻塞地发起传输,包括仅在成功接收前一个字节(接收返回)后才检查下一个字节传输。LIN 驱动程序应无阻塞地接收数据。

7.4.3 数据一致性

7.4.3.1 传输数据一致性

  LIN驱动直接从上层复制数据缓冲区。 对于 LIN 主节点,LIN 驱动程序的上层必须保持缓冲区数据一致,直到函数调用返回。对于 LIN 从节点,LIN 驱动程序的上层必须保持缓冲区数据一致,直到响应传输结束。

7.4.3.2 接收数据一致性

  以下适用于 LIN 主节点和 LIN 从节点:对于 LIN 响应接收,SDU 缓冲区的字节应按递增的连续地址顺序进行分配。 LIN帧数据长度信息定义了最小SDU缓冲区长度。完整的 LIN 帧接收处理(包括复制到目标层)可以在 ISR 中实现。接收到的数据应保持一致,直到成功接收到下一个 LIN 帧或 LIN 通道状态发生变化。只要保证 ISR 和 Lin_GetStatus(仅主设备)都不会被自身中断,LIN 硬件(或影子)缓冲区始终是一致的,因为它是在一个永远不会中断的函数中按顺序写入和读取的通过它自己。

接收数据一致性(仅限主节点)

  完整的LIN帧接收处理(包括复制到目标层)可以在Lin_GetStatus函数中实现。接收到的数据应保持一致,直到成功接收到下一个 LIN 帧或 LIN 通道状态发生变化。

7.4.4 数据字节映射

  内存和 LIN 帧之间的数据映射定义为数组元素 0 包含 LSB(首先发送/接收的数据字节),数组元素 (n‑1) 包含 MSB(最后发送/接收的数据字节)。

7.5 睡眠和唤醒功能

  唤醒 LIN 硬件通道有两种不同的可能性:

  • 内部(自上而下)唤醒上层通过调用 Lin_Wakeup 请求唤醒。
  • 外部(自下而上)唤醒检测总线唤醒事件并通过 Lin_CheckWakeup API 转发到上层,该 API 必须由模块 LinIf 调用。成功验证唤醒源后,还会调用 Lin_WakeupInternal。

  唤醒模式的选择由配置参数控制LinChannelWakeup支持:

  • LIN 硬件通道支持内部和外部唤醒模式,且 LinChannelWakeupSupport = TRUE
  • LinChannelWakeupSupport = FALSE 的 LIN 硬件通道仅支持内部唤醒模式。

7.5.1 背景和原理

  以下仅适用于 LIN 主节点:LIN 主节点可以通过从站之一生成的唤醒信号或来自更高层(LIN 接口)的请求来唤醒。 LIN 接口控制消息调度表,因此必须能够指示 LIN 驱动程序将硬件单元置于睡眠状态或将其唤醒。为此,LIN 驱动程序提供了将 LIN 通道置于 LIN_CH_SLEEP 状态的函数。
  以下仅适用于 LIN 从属节点:LIN 从机可以通过主节点或同一通道上的任何其他从机节点生成的唤醒信号或通过来自更高层(LIN 接口)。LIN 接口检测进入睡眠模式的条件,并指示 LIN 驱动程序将硬件单元置于睡眠状态或将其唤醒的请求来唤醒。为此,LIN 驱动程序提供了一个函数将 LIN 通道置于 LIN_CH_SLEEP 状态。由于从节点无法发送进入睡眠命令,因此函数Lin_GoToSleep不适用于从节点。
  以下适用于 LIN 主节点和 LIN 从节点:在睡眠或唤醒时,主设备必须与网络的其余部分传达状态变化。

7.5.2 要求

  当 LIN 通道进入睡眠模式时,它应执行 LIN 硬件单元向低功耗模式的转换.每个 LIN 通道应能够独立于其他通道状态接受睡眠请求.当 LIN 通道处于 LIN_CH_SLEEP 状态并且配置参数 LinChannelWakeupSupport支持唤醒检测时,LIN 硬件单元应监视总线以获取该通道上的唤醒请求。
  Lin_Wakeup:如果 LIN 驱动程序从 LIN 接口接收到唤醒请求,则请求的通道应向LIN 总线发送唤醒脉冲。
  Lin_WakeupInternal:如果 LIN 驱动程序从 LIN 接口接收到内部唤醒请求,则请求
的通道不应向 LIN 总线发送唤醒脉冲。
  对于 LIN 主节点,函数Lin_GetStatus返回给定 LIN 通道的当前状态。

7.6 错误分类

  General Specification of Basic Software Modules的第7.x节“Error Handling”详细描述了基本软件的错误处理。最重要的是,它构成了一个由五种错误类型组成的分类方案,这些错误类型可能出现在BSW模块中。在此基础上,下面的部分详细说明了特定的错误安排在下面的各个小节中。

7.6.1 开发错误

在这里插入图片描述

7.6.2 运行时错误

  没有运行时错误。

7.6.3 瞬时故障

不存在瞬态故障。

7.6.4 生产错误

7.6.4.1 LIN_E_TIMEOUT
错误名称:LIN_E_TIMEOUT
简单描述:当硬件错误导致超时时,会报告此错误。
详细描述:如果 LIN 硬件控制寄存器的更改导致需要等待状态更改,则应通过可配置的超时机制进行保护。如果检测到此类超时,则应引发 LIN_E_TIMEOUT 错误。这种情况只应在 LIN 硬件单元发生故障时出现,并应传达给系统的其余部分。
检测标准:失败-LIN硬件控制寄存器已更改,且配置的时间(LinTimeoutDuration)已更改,但LIN硬件的状态没有更改。
		通过- LIN 硬件控制寄存器已更改,并且状态更改在配置的时间内完成。
次要参数:仅当LIN硬件控制寄存器的变化不会立即导致状态变化,但需要一些时间且时间可测量时,才使用LIN_E_TIMEOUT(失败/通过)。对于这样的硬件,这意味着只要LIN硬件寄存器发生变化,就会超时。当状态更改成功完成或配置的时间(LinTimeoutDuration)完成,超时机制将停止并重置。
所需时间:1s
监控频率:once-per-trip
LIN 驱动程序可以报告的唯一生产错误就是 LIN_E_TIMEOUT 错误。

7.6.5 扩展错误

8 API规范

8.1 Imported类型

  本章列出了其他模块中包含的所有类型:
在这里插入图片描述

8.2 类型定义

  Lin_GeneralTypes.h 的内容应受 LIN_GENERAL_TYPES 定义的保护。如果使用不同的 LIN 驱动程序,则目录中只需包含该文件的一个实例。用于实现所有 Lin_GeneralTypes.h应考虑前面提到的文件中的相关类型。

8.2.1 Lin_ConfigType

名称:Lin_ConfigType
类型:结构体
元素:硬件和实现相关的结构,初始化数据结构的内容是LIN硬件相关的配置
描述:这是外部数据结构的类型,包含 LIN 驱动程序的整体初始化数据以及影响 LIN 通道的 SFR 设置。指向此类结构的指针被提供给 LIN 驱动程序初始化例程,用于配置驱动程序、LIN 硬件单元和 LIN 硬件通道。
激活:Lin.h

8.2.2 Lin_FramePidType

名称:Lin_FramePidType
类型:Type(uint8)
范围:0...0xFE(LIN 标识符 (0...0x3F) 及其两个奇偶校验位。)
描述:表示 Lin_SendFrame() 使用的所有有效受保护标识符。
激活:Lin_GeneralTypes.h

8.2.3 Lin_FrameCsModelType

名称:Lin_FrameCsModelType
类型:枚举
范围:LIN_ENHANCED_CS(增强校验)/LIN_CLASSIC_CS(典型校验)
描述:该类型用于指定用于 LIN 帧的校验和。
激活:Lin_GeneralTypes.h

8.2.4 Lin_FrameResponseType

名称:Lin_FrameCsModelType
类型:枚举
范围:LIN_FRAMERESPONSE_TX(从该节点生成响应)
	LIN_FRAMERRESPONSE_RX(响应是从另一个节点生成的并且与该节点相关)
	LIN_FRAMERESPONSE_IGNORE(响应是从另一个节点生成的,与本节点无关)
描述:该类型用于指定帧处理器是否需要传输LIN帧的响应部分。
激活:Lin_GeneralTypes.h

注:对于 LIN 主节点,与先前定义的映射如下:
LIN_MASTER_RESPONSE <‑> LIN_FRAMERRESPONSE_TX
LIN_SLAVE_RESPONSE <‑> LIN_FRAMERRESPONSE_RX
LIN_SLAVE_TO_SLAVE <‑> LIN_FRAMERRESPONSE_IGNORE

8.2.5 Lin_FrameDlType

名称:Lin_FrameDlType
类型:Type(uint8)
范围:1...8(LIN 帧的数据长度)
描述:该类型用于指定要复制的 SDU 数据字节数。
激活:Lin_GeneralTypes.h

8.2.6 Lin_PduType

名称:Lin_PduType
类型:结构体
元素:Lin_FramePidType			//(Pid)
	Lin_FrameCsModelType		//(Cs)
	Lin_FrameResponseType		//(Drc)
	Lin_FrameDlType				//(DI)
	uint8*						//(SduPtr)
描述:该类型用于提供从 LIN 接口到 LIN 驱动程序的 PID、校验和模型、数据长度和 SDU 指针。
激活:Lin_GeneralTypes.h

8.2.7 Lin_StatusType

名称:Lin_StatusType
类型:枚举
范围:LIN_NOT_OK(LIN帧操作返回值。发生错误)
	LIN_TX_OK(传输成功)
	LIN_TX_BUSY(繁忙)
	LIN_TX_HEADER_ERROR(错误的标头传输例如:发送和读回的数据不匹配/标识符奇偶校验错误/物理总线错误)
	LIN_TX_ERROR(错误的响应传输例如:发送和读回的数据不匹配/物理总线错误)
	LIN_RX_OK(接收正确响应)
	LIN_RX_BUSY(正在进行接收:至少已接收到一个响应字节,但尚未接收到校验和字节)
	LIN_RX_ERROR(错误的响应接收,例如/帧错误/溢出错误/校验和错误/简短回应)
	LIN_RX_NO_RESPONSE(未收到响应字节)
	LIN_OPERATIONAL(正常运行;相关的LIN信道准备好发送下一个报头。上一帧中没有可用的数据)
	LIN_CH_SLEEP(休眠状态;在这个从属节点的状态唤醒检测已启用)
描述:LIN 通道或帧的 LIN 操作状态,由 API Lin_GetStatus()返回。
激活:Lin_GeneralTypes.h

8.2.8 Lin_SlaveErrorType

名称:Lin_SlaveErrorType
类型:枚举
范围:LIN_ERR_HEADER(表头错误)
	LIN_ERR_RESP_STOPBIT(响应中的帧错误)
	LIN_ERR_RESP_CHKSUM(校验和错误)
	LIN_ERR_RESP_DATABIT(响应中传输数据位的错误)
	LIN_ERR_NO_RESP(无响应)
	LIN_ERR_INC_RESP(回复不完整)
描述:该类型表示在标头接收和响应发送/接收期间检测到的从站错误类型。
激活:Lin_GeneralTypes.h

8.3 函数定义

  这是为上层模块提供的函数列表。

8.3.1 影响整个 LIN 硬件单元的服务

8.3.1.1 Lin_Init
名称	:Lin_Init
原型	:void Lin_Init (const Lin_ConfigType* Config)
服务 ID	:0x00
同步/异步:同步
可重入性	:不可重入
参数	:(in)Config:指向 LIN 驱动程序配置的指针
描述	:初始化 LIN 模块
激活	:Lin.h

  Lin_Init 函数应初始化 Lin 模块(即静态变量,包括标志和 LIN HW 单元全局硬 件设置)以及 LIN 通道。Lin_Init 函数应根据参数 Config 指向的配置集初始化模块,应调用 LIN 硬件单元上所有可用通道通用的相关硬件寄存器设置的初始化,还应调用 LIN 的初始化通道特定设置。Lin 模块的环境不得调用调用 Lin_Init 之前的 Lin 模块 (Lin_GetVersionInfo 除外)。
  如果使能了Lin模块的开发错误检测:

  • Lin_Init应检查参数Config是否在允许的范围内。如果 Config 不在允许的范围内,函数 Lin_Init 将上升错误到 LIN_E_INVALID_POINTER。
  • Lin_Init 将检查 Lin 驱动程序是否处于 LIN_UNINIT 状态。如果林驱动程序未处于LIN_UNINIT状态,则函数Lin_Init应引发 LIN E STATE_TRANSITION错误。

  如果 LIN 硬件控制寄存器的更改导致需要等待状态更改,则应通过可配置的超时机制 (LinTimeoutDuration) 进行保护。如果检测到这样的超时,则LIN_E_TIMEOUT 错误应提交给DET或DEM。这种情况只会在 LIN 硬件单元发生故障时出现,并且应该传达给系统的其余部分。LIN E TIMEOUT 将影响整个 LIN 堆栈,必须重新初始化 LIN 驱动程序或必须关闭 LIN 功能。

8.3.1.2 Lin_CheckWakeup
名称	:Lin_CheckWakeup
原型	:Std_ReturnType Lin_CheckWakeup (uint8 Channel)
服务 ID	:0x0a
同步/异步:同步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
返回值	:Std_ReturnType(E_OK:API调用被接受/E_NOT_OK:API调用未被接受)
描述	:该函数检查所寻址的 LIN 通道上是否发生唤醒
激活	:Lin.h

  有两种方法可以进行唤醒检测,一种是来自 LIN 控制器硬件 [Micro peripheral device],另一种是来自LinTranceiver。LIN 总线收发器唤醒后,LIN 接口模块将调用 Lin_CheckWakeup 函数来识别相应的 LIN 通道(例如,在多个收发器物理连接到一个 MCU 唤醒引脚的情况下)。在这种情况下,LIN 驱动程序仅起到验证该唤醒信号的作用。Lin_CheckWakeup 函数应评估寻址 LIN 通道上的唤醒。当检测到指定 LIN 通道上的唤醒 事件(例如,RxD 引脚具有恒定的低电平)时,Lin_CheckWakeup 函数应立即通过 EcuM_SetWakeupEvent通知 ECU 状态管理器模块,并通过 LinIf_WakeupConfirmation 回调函数通知 Lin 接口模块。
  如果启用 LIN 模块的开发错误检测:

  • 如果通道参数无效,则函数 Lin_CheckWakeup 应引 发开发错误 LIN E INVALID_CHANNEL,否则(如果禁用 DET)返回 E_NOT_OK。
  • 如果在初始化 LIN 模块之前调用函数
    Lin_CheckWakeup,则函数 Lin_CheckWakeup 将引发开发错误 LIN E UNINIT。
8.3.1.3 Lin_GetVersionInfo
名称	:Lin_GetVersionInfo
原型	:void Lin_GetVersionInfo (Std_VersionInfoType* versioninfo)
服务 ID	:0x01
同步/异步:同步
可重入性	:可重入
参数	:(out)versioninfo:指向存储该模块版本信息的位置的指针
返回值	:无
描述	:返回该模块的版本信息。
激活	:Lin.h

  Lin_GetVersionInfo 函数应返回 LIN 模块的版本信息。版本信息包括:

  • 两个字节的供应商 ID
  • 两个字节的模块 ID
  • 三字节版本号,编号应由供应商指定(主要、次要和补丁版本号)
  • 不应包含 AUTOSAR 规范版本号,AUTOSAR 规范版本号在编译时进行检查,因此在此 API 中不需要

  如果启用了 LIN 模块的开发错误检测

  • 如果参数 versioninfo 是 NULL 指针,则函数 Lin_GetVersionInfo 将引发错误 LIN E PARAM_POINTER。

8.3.2 影响单个 LIN 通道的服务

  注意:此服务仅适用于 LIN master节点 (仅当 ECU 具有任何 LIN 主通道时才可用)。

名称	:Lin_SendFrame
原型	:Std_ReturnType Lin_SendFrame (uint8 Channel,const Lin_PduType* PduInfoPtr)
服务 ID	:0x04
同步/异步:异步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
		 (in)PduInfoPtr:指向 PDU 的指针,包含 PID、校验和模型、响应类型、Dl 和 SDU 数据指针
返回值	:Std_ReturnType(E_OK:发送命令已被接受/E_NOT_OK:发送命令未被接受,发生错误)
描述	:如有必要,发送 LIN 表头和 LIN 响应。框架的响应方向 (主机响应、从机响应、从机到从机通信)由 PduInfoPtr 提供。仅用于 LIN 主节点。
激活	:Lin.h

  Lin_SendFrame 函数应发送表头部分(中断字段、同步字节字段和 PID 字段), 并且根据帧响应的方向,发送寻址 LIN 通道上 LIN 帧的完整 LIN 响应部分。在接收数据的情况下,LIN 接口必须在使用函数 Lin_SendFrame() 后通过函数 Lin_GetStatus() 轮询来等待 LIN 帧的相应响应部分。Lin 模块的环境只能在处于 LIN_CH_OPERATIONAL 状态或LIN_CH_OPERATIONAL 子状态之一的通道上调用 Lin_SendFrame。
  如果表头传输期间出现错误,则由实现者如何处理这些错误(停止/继续传 输)并决定相应的响应是否有效。如果响应传输错误,ISO 17987规范描述了帧处理器状态机内如何处理此类错误。规定发送和读回数据之间的不匹配应在不迟于包含不 匹配的字节字段完成之后被检测到。此外,ISO 17987 规范规定传输应被中止。
  如果启用 LIN 模块的开发错误检测:

  • 如果在初始化 LIN 模块之前调用函数 Lin_SendFrame,则函数 Lin_SendFrame 将引发开发错误 LIN_E_UNINIT,否则(如果禁用 DET)返回 E_NOT_OK。
  • 如果通道参数无效,则函数 Lin_SendFrame应引发开发错误LIN_E_INVALID_CHANNEL,否则(如果禁用 DET)返回E_NOT_OK
  • 函数 Lin_SendFrame 应检查参数PduInfoPtr 是否不为 NULL。如果 PdulnfoPtr 是 NULL 指针,则函数 Lin_SendFrame 将引发开发错误LIN_E_PARAM_POINTER,否则(如果禁用 DET)返回E_NOT_OK
  • 如果 LlN 通道状态机处于 LlN_CH_SLEEP状态,则函数 Lin_SendFrame 应引发错误 LlN_E_STATE_TRANSlTlON否则 (如果 DET 被禁用)返回 E_NOT_OK

  仅当 Lin 模块在至少—个通道上配置为 LlN 主节点时,Lin_SendFrame 功能才 可用。在纯 LlN 从机配置中,此功能不可用。这取决于LinNodeType的配置参数。

8.3.2.2 Lin_GoToSleep

  注意:此服务仅适用于 LIN master节点 (仅当 ECU 具有任何 LIN 主通道时才可用)。

名称	:Lin_GoToSleep
原型	:Std_ReturnType Lin_GoToSleep (uint8 Channel)
服务 ID	:0x06
同步/异步:异步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
返回值	:Std_ReturnType(E_OK:睡眠命令已被接受/E_NOT_OK:睡眠命令尚未被接受,发生错误)
描述	:该服务指示驱动程序在指定的 LlN 通道上传输进入睡眠命令。仅用于 LlN 主节点。
激活	:Lin.h

  Lin_GoToSleep功能应在Lin规范2.1中定义的寻址Lin通道上发送进入睡眠命令。
  Lin_GoToSleep 函数应将通道状态设置为 LIN_CH_SLEEP_PENDING。 如果配置参数LinChannelWakeupSupport 支持外部唤醒检测,则函数Lin_GoToSleep 应启用总线监视该通道上的唤醒请求。Lin_GoToSleep 函数可以选择将 LIN 硬件单元设置为低功耗运行模式(如果硬件支持)。以上情况,即使在错误传输进入睡眠命令的情况下也是如此。
  下次调用 Lin_GetStatus 时,LIN 通道应进入 LIN_CH_SLEEP 状态,与总线上 goto‑ sleep‑命令是否成功传输无关。Lin_GoToSleep 函数应终止先前传输请求的正在进行的帧传输,即使传输未成功完成。
  
如果启用了 LIN 模块的开发错误检测:

  • 如果在初始化 LIN 模块之前调用函数 Lin_GoToSleep,则函数 Lin_GoToSleep 将引发开发错误 LIN_E_UNINIT。
  • 如果通道参数无效,函数 Lin_GoToSleep 将引 发开发错误 LIN_E_INVALID_CHANNEL。

  仅当 Lin 模块在至少一个通道上配置为 LIN 主节点时,Lin_GotoSleep 功能才可用。 在纯 LIN 从机配置中,此功能不可用。这取决于LinNodeType的配置参数。

8.3.2.3 Lin_GoToSleepInternal
名称	:Lin_GoToSleepInternal
原型	:Std_ReturnType Lin_GoToSleepInternal (uint8 Channel)
服务 ID	:0x09
同步/异步:同步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
返回值	:Std_ReturnType(E_OK:命令已被接受/E_NOT_OK:命令尚未被接受,发生错误)
描述	:将通道状态设置为 LIN_CH_SLEEP,启用唤醒检测,并可选择将 LIN 硬件单元设置为低功耗运行模式(如果硬件支持)。
激活	:Lin.h

  Lin_GoToSleepInternal 函数应将通道状态设置为 LIN_CH_SLEEP。如果配置参数 LinChannelWakeupSupport 支持外部唤醒检测,则函数Lin_GoToSleepInternal 应启用总线监控该通道上的唤醒请求。函数 Lin_GoToSleepInternal 应选择将 LIN 硬件单元设置为低功耗运行模式(如果硬件支持)。
  如果启用 LIN 模块的开发错误检测:

  • 如果在初始化 LIN 模块之前调用函数 Lin_GoToSleepInternal,则函数 Lin_GoToSleepInternal 将引发开发错误 LIN _E_UNINIT。
  • 如果通道参数无效,函数 Lin_GoToSleepInternal 将引发开发错误LIN_E_INVALID_CHANNEL。
8.3.2.4 Lin_Wakeup
名称	:Lin_Wakeup
原型	:Std_ReturnType Lin_Wakeup (uint8 Channel)
服务 ID	:0x09
同步/异步:异步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
返回值	:Std_ReturnType(E_OK:唤醒命令已被接受/E_NOT_OK:唤醒命令尚未被接受,发生错误)
描述	:生成唤醒脉冲并将通道状态设置为 LIN_CH_OPERATIONAL
激活	:Lin.h

  如果启用 LIN 模块的开发错误检测:

  • 如果在初始化 LIN 模块之前调用函数 Lin_Wakeup,则函数 Lin_Wakeup 将引发开发错误 LIN E UNINIT。
  • 如果通道参数无效或通道处于非活动状态,则 函数 Lin_Wakeup 将引发开发错误 LIN E INVALID_CHANNEL。
  • 如果 LIN 通道状态机未处于 LIN_CH_SLEEP 状态,函数 Lin_Wakeup 应引发错误LIN_E_STATE_TRANSITION。

  注意:只有当 LIN 通道处于 LIN_CH_SLEEP 状态时,Lin 驱动程序才应调用 Lin_Wakeup。

8.3.2.5 Lin_WakeupInternal
名称	:Lin_WakeupInternal
原型	:Std_ReturnType Lin_WakeupInternal (uint8 Channel)
服务 ID	:0x0b
同步/异步:异步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
返回值	:Std_ReturnType(E_OK:唤醒命令已被接受/E_NOT_OK:唤醒命令尚未被接受,发生错误)
描述	:将通道状态设置为 LIN_CH_OPERATIONAL,而不生成唤醒脉冲
激活	:Lin.h

  函数 Lin_WakeupInternal 将寻址的 LIN 通道设置为状态LIN_CH_OPERATIONAL,而不生成唤醒脉冲。
  如果启用了 LIN 模块的开发错误检测:

  • 如果在初始化 LIN 模块之前调用函数 Lin_WakeupInternal,则函数 Lin_WakeupInternal 将引发错误 LIN_E_UNINIT。
  • 如果通道参数无效或通道处于非活动状态,则 函数 Lin_WakeupInternal 将引发错误 LIN_E_INVALID_CHANNEL
  • 如果 LIN 通道状态机未处于状态LIN_CH_SLEEP,则函数 Lin_WakeupInternal 将引发错误LIN_E_STATE_TRANSITION。

  注意:当 LIN 通道处于 LIN_CH_SLEEP 状态时,Lin 驱动程序环境仅应调用 Lin_WakeupInternal。

8.3.2.6 Lin_GetStatus

  注意:此服务仅适用于 LIN 主节点 (仅当 ECU 具有任何 LIN 主通道时才可用)。

名称	:Lin_WakeupInternal
原型	:Lin_StatusType Lin_GetStatus (uint8 Channel, const uint8** Lin_SduPtr)
服务 ID	:0x08
同步/异步:同步
可重入性	:不可重入
参数	:(in)Channel:待寻址的 LIN 通道
		 (out)Lin_SduPtr:指向存储当前 SDU 的影子缓冲区或内存映射 LIN 硬件接收缓冲区的指针
返回值	:Lin_StatusType
		LIN_NOT_OK:发生错误
		LIN_TX_OK:传输成功
		LIN_TX_BUSY:正在进行的传输 (表头或响应)
		LIN_TX_HEADER_ERROR:错误的表头传输,例如发送和读回的数据不匹配,标识符奇偶校验错误或物理总线错误
		LIN_TX_ERROR:错误的响应传输,例如:发送数据和读回数据不匹配,物理总线错误
		LIN_RX_OK:正确响应
		LIN_RX_BUSY:正在进行接收:至少已接收到一个响应字节,但尚未接收到校验和字节
 		LIN_RX_ERROR:错误的响应接收,例如:帧错误,超限错误,校验和错误或短响应
		LIN_RX_NO_RESPONSE:到目前为止尚未收到响应字节
		LIN_OPERATIONAL:正常运行;相关的 LIN 通道从 LIN_CH_SLEEP 唤醒,并且没有数据发送。
		LIN_CH_SLEEP:休眠状态操作;在此状态下,启用从节点的唤醒检测。
描述	:获取 LIN 驱动程序的状态。仅用于 LIN 主节点。
激活	:Lin.h

  Lin_GetStatus 函数应返回 LIN 驱动程序的当前传输、接收或操作状态。返回状态LIN_TX_OK、LIN_TX_BUSY、LIN_TX_HEADER_ERROR、LIN_TX-ERROR、LIN_RX_OK、LIN_RX_BUSY、LIN_RX.ERROR、LIN_RX_NO_RESPONSE和LIN_OPERATIONAL是通道状态LIN_CH_OPERATIONAL的子状态。
  如果已成功接收 SDU,则函数 Lin_GetStatus 应将 SDU 存储在由Lin_SduPtr 引用的shadow buffer 或内存映射 LIN 硬件接收缓冲区中。缓冲区只有在下一次Lin_SendFrame 函数调用之前才有效且必须被读取。
  函数 Lin_GetStatus 在以下情况应返回 LIN_TX_OK:

  • 发送主响应类型帧,并且该帧的 LIN 表头和 LIN 响应已成功传输
  • 发送从相应到从响应类型帧以及该帧的 LIN 表头传输成功。

  如果启用 LIN 模块的开发错误检测:

  • 如果在初始化 LIN 模块之前调用函数 Lin_GetStatus, 则函数 Lin_GetStatus 将引发错误 LIN_E_UNINIT,否则(如果禁用 DET)返回 LIN_NOT_OK。
  • 如果通道参数无效或通道处于非活动状态,则函数 Lin_GetStatus 应引发错误 LIN_E_INVALID_CHANNEL,否则(如果禁用 DET)返回 LIN_NOT_OK。
  • 函数 Lin_GetStatus 应检查参数 Lin_SduPtr 是否为 NULL 指针。如果 Lin_SduPtr 是 NULL 指针,则函数 Lin_GetStatus 将引发错误 LIN_E_PARAM_POINTER,否则 (如果禁用 DET)返回LIN_NOT_OK.

  仅当 Lin 模块在至少一个通道上配置为 LIN 主节点时,Lin_GetStatus 函数才可用。在纯 LIN 从机配置中,此功能不可用。这取决于LinNodeType的配置参数。

8.4 回调

LIN 驱动程序内没有回调函数。

8.5 调度函数

LIN 驱动程序中没有该功能

8.6 预期接口

  本章列出了其他模块所需的所有接口。

8.6.1 强制性接口

  本章定义了实现模块核心功能所需的所有接口。
在这里插入图片描述

8.6.2 可选接口

在这里插入图片描述

  当检测到有效的 LIN 唤醒脉冲时,Lin 模块应从相应 LIN 通道的唤醒 ISR中调用回调函数 EcuM_CheckWakeup。仅当 LIN 硬件支持时,才能引发唤醒 ISR。因此,如果至少支持一个通道唤醒,则支持 EcuM_CheckWakeup ( LinChannelWakeUpSupport)。

8.6.3 可配置接口

  LIN 驱动程序没有可配置的目标。 LIN 驱动程序始终向 LIN 接口报告。

9 时序图

9.1 接收 LIN 帧

9.1.1 LIN Master

在这里插入图片描述

9.1.2 LIN Slave

在这里插入图片描述

10 配置

10.1如何阅读本章

  详细信息请参考SWS_BSWGeneral中的10.1 “Introduction to configuration specification” 。

10.2 容器和配置参数

  所描述的参数是 LIN 驱动器配置器的输入。
  LIN驱动程序的代码配置器是特定于LIN硬件单元的。可以配置的值取决于硬件。因此,标准中不能给出规则和约束条件。配置工具负责进行静态配置检查,还涉及模块之间的依赖关系(例如端口驱动程 序、MCU 驱动程序等)。Lin 驱动程序模块应拒绝具有实现不支持的分区映射的配置。
在这里插入图片描述

10.2.1 Lin

模块名称Lin
描述Lin (LIN 驱动程序)模块的配置
Post-Build Variant支持支持
支持的配置VariantVARIANT-POST-BUILD, VARIANT-PRE-COMPILE
container名称Multiplicity范围/依赖性
LinDemEventParameterRefs0…1引用 DemEventParameter 元素的容器,如果发生相应的错误,应使用 API Dem_SetEventStatus 调用该元素。 EventId 取自引用的 DemEventParameter 的 DemEventId 符号值。该容器中提供 了标准化错误,并且可以由供应商扩展
LinGeneral1该容器包含与每个 LIN 驱动器单元相关的参数
LinGlobalConfig1该容器包含 Lin 驱动程序的全局配置参数

10.2.2 LinGeneral

Container名称LinGeneral
父容器Lin
描述该容器包含与每个 LIN 驱动器单元相关的参数
参数名称LinDevErrorDetect
父容器LinGeneral
描述打开或关闭开发错误检测和通知(- true:启用检测和通知/- false:禁用检测和通知)
Multiplicity1
TypeEcucBooleanParamDef
默认值false
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinIndex
父容器LinGeneral
描述指定此模块实例的 InstanceId。如果只存在一个实例,则其Id应为0。
Multiplicity1
TypeEcucIntegerParamDef
范围0…255
默认值
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinTimeoutDuration
父容器LinGeneral
描述指定阻塞函数的最大循环次数,直到在短期等待循环中引发超时。
Multiplicity1
TypeEcucIntegerParamDef
范围0…65535
默认值
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinVersionInfoApi
父容器LinGeneral
描述打开或关闭 Lin_GetVersionInfo 功能。
Multiplicity1
TypeEcucBooleanParamDef
默认值false
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinEcucPartitionRef
父容器LinGeneral
描述将 Lin 驱动程序映射到零个或多个 ECUC 分区,以使模块 API 在此分区中可用。 Lin 驱动程序将作为每个分区中的独立实例运行。
Multiplicity0…*
TypeReference to EcucPartition
Post-Build Variant Multiplicitytrue
Post-Build Variant 值true
(Multiplicity配置类)Pre-compile时间X 所有Variant
(Multiplicity配置类)Link时间
(Multiplicity配置类)Post-build时间
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:ECU
   该模块将在每个分区中作为独立实例运行,这意味着调用的 API 将仅针对其调用的分区。

10.2.3 LinChannel

Container名称LinChannel
父容器LinGlobalConfig
描述该容器包含 LIN 控制器的配置 (参数)
参数名称LinChannelBaudRate
父容器LinChannel
描述指定LIN通道的波特率。
Multiplicity1
TypeEcucIntegerParamDef
范围1000 … 20000
默认值
Post-Build Variant 值true
(值配置类)Pre-compile时间X VARIANT-PRE-COMPILE
(值配置类)Link时间
(值配置类)Post-build时间X VARIANT-POST-BUILD
范围/依赖性范围:local
参数名称LinChannelId
父容器LinChannel
描述识别 LIN 通道。替换 LIN SWS 中的 LIN_CHANNEL_INDEX_NAME。
Multiplicity1
TypeEcucIntegerParamDef (为此参数生成的符号名称)
范围0 … 65535
默认值
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variants
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinChannelWakeupSupport
父容器LinChannel
描述指定 LIN 硬件通道是否支持唤醒功能。
Multiplicity1
TypeEcucBooleanParamDef
默认值
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variants
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinNodeType
父容器LinChannel
描述指定该通道的 LIN 节点类型。
Multiplicity1
TypeEcucEnumerationParamDef
范围MASTER(Master模式),SLAVE(Slave模式)
Post-Build Variant 值false
(值配置类)Pre-compile时间X 所有Variants
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local
参数名称LinChannelEcucPartitionRef
父容器LinGeneral
描述将一个单一 Lin 通道映射到零个或一个 ECUC 分区。引用的 ECUC 分区是 Lin 驱动程序映射到的 ECUC 分 区的子集。
Multiplicity0 … 1
TypeReference to EcucPartition
Post-Build Variant Multiplicitytrue
Post-Build Variant 值true
(Multiplicity配置类)Pre-compile时间X 所有Variant
(Multiplicity配置类)Link时间
(Multiplicity配置类)Post-build时间
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:ECU
参数名称LinChannelEcuMWakeupSource
父容器LinGeneral
描述该参数包含对 ECU 状态管理器中定义的该通道的唤醒源的引用。仅当 Lin 时才需要此参考ChannelWakeupSupport 为 true
Multiplicity0 … 1
Type对 EcuMWakeupSource 的符号名称引用
Post-Build Variant Multiplicityfalse
Post-Build Variant 值false
(Multiplicity配置类)Pre-compile时间X 所有Variant
(Multiplicity配置类)Link时间
(Multiplicity配置类)Post-build时间
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:ECU,依赖项:LinChannelWakeupSupport
参数名称LinClockRef
父容器LinChannel
描述参考 LIN 时钟源配置,该配置在 MCU 驱动程序配置中设置。
Multiplicity1
Type参考 McuClockReferencePoint
Post-Build Variant 值true
(值配置类)Pre-compile时间X VARIANT-PRE-COMPILE
(值配置类)Link时间
(值配置类)Post-build时间X VARIANT-POST-BUILD
范围/依赖性范围:local,依赖项:MCU 驱动程序中的 LIN 时钟源配置

  在唤醒信号验证期间可以忽略配置参数 LinChannelWakeupSupport。LinChannelEcucPartitionRef 引用的 ECUC 分区应是 LinEcucPartitionRef 引用的 ECUC 分区的子集。如果 LinEcucPartitionRef 引用一个或多个 ECUC 分区,则
LinChannelEcucPartitionRef 的重数应为 1,并且也引用这些 ECUC 分区之一。LinChannel 和 LinTrcvChannel 其中之一的通信通道应全部引用相同的ECUC分区。

10.2.4 LinGlobalConfig

Container名称LinGlobalConfig
父容器Lin
描述该容器包含 Lin 驱动程序的全局配置参数
Container名称Multiplicity范围/依赖性
LinChannel1 … *该容器包含 LIN 控制器的配置 (参数)

10.2.5 LinDemEventParameterRefs

Container名称LinDemEventParameterRefs
父容器Lin
描述引用 DemEventParameter 元素的容器,如果发生相应的错误,应使用 API Dem_SetEventStatus 调用该元素。EventId 取自引用的 DemEventParameter 的 DemEventId 符号值。此容器中提供了标准化错误,并且可以通过特定 于供应商的错误引用进行扩展
参数名称LIN_E_TIMEOUT
父容器LinDemEventParameterRefs
描述参考 DemEventParameter,当发生“硬件错误引起的超时”错误时应发出该参数。如果未配置参考,则错误应 报告为 DET 错误
Multiplicity0 … 1
Type符号名称参考DemEventParameter
Post-Build Variant Multiplicityfalse
Post-Build Variant 值false
(Multiplicity配置类)Pre-compile时间X 所有Variant
(Multiplicity配置类)Link时间
(Multiplicity配置类)Post-build时间
(值配置类)Pre-compile时间X 所有Variant
(值配置类)Link时间
(值配置类)Post-build时间
范围/依赖性范围:local

10.3 公开信息

  有关详细信息,请参阅SWS_BSWGeneral 中的第 10.3 章 “Published Information”。

注:本文源自文件AUTOSAR_SWS_LINDriver.pdf

[完]

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
autosar_sws_cannetworkmanagement_4.3是使用CAN总线进行通信的汽车电子系统的管理和控制规范。CAN总线是汽车电子系统中最常用的通讯协议之一,它提供了一个可靠的、高效的和实时的通信方式。 autosar_sws_cannetworkmanagement_4.3规范包含了CAN网络管理的所有方面,包括物理和数据链路层的协议、网络配置、节点管理、通信控制、事件管理等等。这些方面都是为了确保CAN通信的可靠性和实时性,以及系统的稳定性和安全性。 autosar_sws_cannetworkmanagement_4.3规范也包含了一些重要的特性和功能。例如,它提供了节点诊断和监测功能,以及网络通信负载均衡和多路复用功能。此外,它还支持更高级别的通信协议,如信号协议(例如CANopen,J1939等)和诊断协议(例如UDS等)。 在实践中,autosar_sws_cannetworkmanagement_4.3规范对于开发CAN总线应用程序非常有用。它提供了标准化的API和接口,便于不同的开发人员协同合作,并能够减少开发时间和开发成本。同时,它也提供了可执行的示例代码和测试数据,方便开发人员进行测试和验证。 综上所述,autosar_sws_cannetworkmanagement_4.3规范是一份非常重要的文档,它为汽车电子系统中最常用的通信协议之一(CAN总线)提供了完整的管理和控制规范。它不仅包含了所有必要的功能和特性,而且还为开发人员提供了标准化的API和接口,方便开发和验证。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟寒凌风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值