本文遵循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 的驱动是最常见的配置。
2 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支持 | 支持 |
支持的配置Variant | VARIANT-POST-BUILD, VARIANT-PRE-COMPILE |
container名称 | Multiplicity | 范围/依赖性 |
---|---|---|
LinDemEventParameterRefs | 0…1 | 引用 DemEventParameter 元素的容器,如果发生相应的错误,应使用 API Dem_SetEventStatus 调用该元素。 EventId 取自引用的 DemEventParameter 的 DemEventId 符号值。该容器中提供 了标准化错误,并且可以由供应商扩展 |
LinGeneral | 1 | 该容器包含与每个 LIN 驱动器单元相关的参数 |
LinGlobalConfig | 1 | 该容器包含 Lin 驱动程序的全局配置参数 |
10.2.2 LinGeneral
Container名称 | LinGeneral |
父容器 | Lin |
描述 | 该容器包含与每个 LIN 驱动器单元相关的参数 |
参数名称 | LinDevErrorDetect |
父容器 | LinGeneral |
描述 | 打开或关闭开发错误检测和通知(- true:启用检测和通知/- false:禁用检测和通知) |
Multiplicity | 1 |
Type | EcucBooleanParamDef |
默认值 | false |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variant |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinIndex |
父容器 | LinGeneral |
描述 | 指定此模块实例的 InstanceId。如果只存在一个实例,则其Id应为0。 |
Multiplicity | 1 |
Type | EcucIntegerParamDef |
范围 | 0…255 |
默认值 | – |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variant |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinTimeoutDuration |
父容器 | LinGeneral |
描述 | 指定阻塞函数的最大循环次数,直到在短期等待循环中引发超时。 |
Multiplicity | 1 |
Type | EcucIntegerParamDef |
范围 | 0…65535 |
默认值 | – |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variant |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinVersionInfoApi |
父容器 | LinGeneral |
描述 | 打开或关闭 Lin_GetVersionInfo 功能。 |
Multiplicity | 1 |
Type | EcucBooleanParamDef |
默认值 | false |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variant |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinEcucPartitionRef |
父容器 | LinGeneral |
描述 | 将 Lin 驱动程序映射到零个或多个 ECUC 分区,以使模块 API 在此分区中可用。 Lin 驱动程序将作为每个分区中的独立实例运行。 |
Multiplicity | 0…* |
Type | Reference to EcucPartition |
Post-Build Variant Multiplicity | true |
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通道的波特率。 |
Multiplicity | 1 |
Type | EcucIntegerParamDef |
范围 | 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。 |
Multiplicity | 1 |
Type | EcucIntegerParamDef (为此参数生成的符号名称) |
范围 | 0 … 65535 |
默认值 | – |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variants |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinChannelWakeupSupport |
父容器 | LinChannel |
描述 | 指定 LIN 硬件通道是否支持唤醒功能。 |
Multiplicity | 1 |
Type | EcucBooleanParamDef |
默认值 | – |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variants |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinNodeType |
父容器 | LinChannel |
描述 | 指定该通道的 LIN 节点类型。 |
Multiplicity | 1 |
Type | EcucEnumerationParamDef |
范围 | MASTER(Master模式),SLAVE(Slave模式) |
Post-Build Variant 值 | false |
(值配置类)Pre-compile时间 | X 所有Variants |
(值配置类)Link时间 | – |
(值配置类)Post-build时间 | – |
范围/依赖性 | 范围:local |
参数名称 | LinChannelEcucPartitionRef |
父容器 | LinGeneral |
描述 | 将一个单一 Lin 通道映射到零个或一个 ECUC 分区。引用的 ECUC 分区是 Lin 驱动程序映射到的 ECUC 分 区的子集。 |
Multiplicity | 0 … 1 |
Type | Reference to EcucPartition |
Post-Build Variant Multiplicity | true |
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 |
Multiplicity | 0 … 1 |
Type | 对 EcuMWakeupSource 的符号名称引用 |
Post-Build Variant Multiplicity | false |
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 驱动程序配置中设置。 |
Multiplicity | 1 |
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 | 范围/依赖性 |
---|---|---|
LinChannel | 1 … * | 该容器包含 LIN 控制器的配置 (参数) |
10.2.5 LinDemEventParameterRefs
Container名称 | LinDemEventParameterRefs |
父容器 | Lin |
描述 | 引用 DemEventParameter 元素的容器,如果发生相应的错误,应使用 API Dem_SetEventStatus 调用该元素。EventId 取自引用的 DemEventParameter 的 DemEventId 符号值。此容器中提供了标准化错误,并且可以通过特定 于供应商的错误引用进行扩展 |
参数名称 | LIN_E_TIMEOUT |
父容器 | LinDemEventParameterRefs |
描述 | 参考 DemEventParameter,当发生“硬件错误引起的超时”错误时应发出该参数。如果未配置参考,则错误应 报告为 DET 错误 |
Multiplicity | 0 … 1 |
Type | 符号名称参考DemEventParameter |
Post-Build Variant Multiplicity | false |
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
[完]