> 文章列表 > 【AUTOSAR】【Lin通信】Lin

【AUTOSAR】【Lin通信】Lin

【AUTOSAR】【Lin通信】Lin

目录

一、介绍

二、说明

三、功能说明

3.1 基本需求

3.2 LIN驱动程序和通道初始化

3.2.1 前提

3.2.2 需求

3.2.3 状态机

3.4 帧处理

3.4.1 主节点

3.4.2 从节点

3.5 睡眠和唤醒功能

四、API接口

4.1 API定义


一、介绍

        该规范规定了自动共享基本软件模块LIN驱动程序的功能、API和配置。

        LIN驱动程序是微控制器抽象层(MCAL)的一部分,执行硬件访问,并为上层提供一个硬件独立的API。唯一可以访问LIN驱动程序的上层是LIN接口。

        一个LIN驱动程序可以支持多个通道。这意味着LIN驱动程序可以处理一个或多个LIN通道,只要它们属于同一个LIN硬件单元。

二、说明

        ECU中只有一个LIN通道可以连接到特定的LIN集群。除非在ECU中有未使用(未连接)的通道,否则LIN通道的数量将等于LIN集群的数量。

【规范】一个LIN驱动程序提供了对一种LIN硬件单元类型(简单的UART或专用的LIN硬件)的访问,它可能由几个LIN通道组成。

【规范】对于不同的LIN硬件单元,需要实现一个单独的LIN驱动程序。由实现者来使驱动程序适应类似LIN通道的不同实例。

【规范】如果在一个ECU中实现了多个LIN驱动程序实例(具有相同或不同供应商的实例),则必须修改文件名、API名称和已发布的参数,以便不生成具有相同名称的两个定义。该名称应根据SRS_BSW_00347进行扩展,包括供应商Id(需要区分LIN驱动程序和不同的供应商)和供应商特定名称(需要区分由一个供应商实现的不同硬件单元):。

三、功能说明

        LIN驱动程序模块需要通过连接到驱动程序驻留的节点上的任何LIN集群来管理依赖于硬件的通信方面。这包括接受用于向总线传输的头数据、用于传输的响应帧数据、检索头信息和拟用于节点的响应帧数据。

3.1 基本需求

        Lin模块是一个可以直接访问硬件资源的基本软件模块。

【规范】Lin模块应符合ISO 17987规范[16]。这适用于ISO 17987 LIN主节点和从节点。

【规范】Lin模块应为所有需要的所有Lin硬件单元中断实现ISR。

【规范】Lin模块应确保所有未使用的中断都被禁用。

【规范】Lin模块应在ISR末端重置中断标志(如果不是由硬件自动完成)。

Lin模块不得配置中断(即优先级),也不得设置向量表条目。

3.2 LIN驱动程序和通道初始化

3.2.1 前提

        在LIN总线上启动通信之前,必须同时初始化LIN驱动程序和相关的LIN信道。

        驱动程序初始化(参见Lin_Init)处理与LIN硬件单元中存在的所有通道相关的初始化的所有方面。这可能包括所有可用的LIN通道所共有的任何静态变量或硬件寄存器设置。此外,每个通道还必须根据所提供的配置进行初始化。例如,这将包括(但不限于)总线上的波特率。

【规范】LIN驱动程序必须至少有一个可用的静态定义的配置集。当EcuM调用初始化函数时,它必须提供一个指向它希望使用的配置的特定指针。

3.2.2 需求

        Lin模块不得初始化或配置未被使用的Lin通道。Lin模块应允许环境在运行时选择不同的静态配置数据。

【规范】Lin模块的配置应包括由静态配置数据定义的数据通信速率集。

【规范】Lin模块的配置数据应作为硬件特定的数据结构存储在ROM中。

【规范】每个LIN PID应与一个校验和模型相关联(PID中包含PID的“增强”,或只有响应数据被校验和的“经典”)。

【规范】每个LIN PID都应与一个以字节表示的响应数据长度相关联。

3.2.3 状态机

LIN驱动程序的状态机:

3.4 帧处理

        一个LIN框架由两部分组成,LIN报头和LIN响应。LIN报头始终由LIN主节点传输,并指示帧的开始,包括LIN PID。LIN响应在LIN报头之后的总线上传输,并且可以由主节点或其中一个从节点传输。

【规范】LIN驱动程序应该能够根据当前LIN PDU的校验和模型计算出“经典”或“增强”校验和。

【规范】如果LIN硬件单元不能对字节进行传输或接收(例如简单的UART实现),LIN驱动程序应提供临时通信缓冲区。

【规范】LIN驱动程序应在不阻塞的情况下启动传输,包括在成功接收前一个字节(接收)下检查下一个字节传输。

【规范】LIN驱动器在接收数据时应不受阻塞。

【规范】LIN驱动程序应直接从上层缓冲区复制数据。

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

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

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

3.4.1 主节点

【规范】LIN驱动程序应将所提供的标识符解释为PID。然后,按照在LIN报头中提供的方式传输标识符。

【规范】LIN驱动程序应能够发送一个LIN报头。这是由断开字段、同步字节字段和受保护的标识符字节字段组成的。

【规范】LIN驱动程序应能够发送一个LIN报头和响应。

【规范】如果LIN接口请求新的帧传输,以及如果正在进行的传输或未成功完成,LIN驱动程序应中止当前的帧传输。

【规范】函数Lin_GetStatus应返回该信道的当前帧传输请求的状态。

【规范】LIN驱动程序应提供LIN接口模块。成功接收到整个LIN帧后,应准备接收到的数据进行LIN接口的函数调用。

【规范】LIN驱动程序应发送由LIN接口模块提供的响应数据。

3.4.2 从节点

【节点】LIN驱动程序应能够在LIN_CH_OPERATIONAL状态下随时接收到LIN报头。报头由中断字段、同步字节字段和受保护的标识符字节字段组成。

【规范】在LIN头接收时,LIN驱动程序应调用头指示回调函数LinIf_HeaderIndication,PduPtr->Pid设置为接收的PID值,PduPtr->SduPtr设置为LIN驱动程序的(硬件或阴影)缓冲区,从响应应由上层写入。

【规范】如果LIN硬件单元无法检测到无效的PID,LIN驱动程序不得评估PID值(即不得验证软件中的奇偶校验位)。LIN驱动程序应向LIN接口模块提供所接收到的PID。

【规范】在等待新的LIN标头时,当LIN驱动程序检测到不符合有效的LIN标头(如不完整的LIN标头)时,应调用带有错误参数LIN_ERR_HEADER的错误指示回调函数LinIf_LinErrorIndication。

【规范】LIN驱动程序应能够发送、接收或忽略LIN响应。

【规范】当返回值为E_OK时,调用LinIf_HeaderIndication后,LIN驱动程序应评估PduPtr->Drc,以确定LIN响应的类型。

【规范】如果要接收到LIN响应(LIN_FRAMERESPONSE_RX),LIN驱动程序应评估参数PduPtr(调用LinIf_HeaderIndication,返回值为E_OK后)中的Cs和Dl成员,以配置LIN响应接收。

【规范】成功接收到LIN响应后,LIN驱动程序应通过调用将Lin_SduPtr参数设置到接收数据中的Rx指示回调函数LinIf_RxIndication,将接收到的数据直接提供给LIN接口模块。

【规范】如果要传输LIN响应(LIN_FRAMERESPONSE_TX),LIN驱动程序应评估参数PduPtr(返回值为E_OK后)中的Cs、Dl和SduPtr成员,以设置和传输LIN响应。

【规范】如果LinIf_HeaderIndication的返回值为E_NOT_OK或返回的PduPtr->Drc为LIN_FRAMERESPONSE_IGNORE,则LIN驱动程序应忽略该响应。

【规范】在一个LIN响应传输成功后,应通过调用Tx确认回调函数LinIf_TxConfirmation,直接确认传输到LIN接口模块。

【规范】如果LIN响应忽略到新的LIN报头,LIN驱动程序不得向LIN接口模块报告任何事件。

【规范】LIN驱动程序应在响应传输和响应接收过程中检测到通信错误。一旦检测到错误,将中止当前的帧处理,并调用错误指示回调函数LinIf_LinErrorIndication。

【规范】每个相关(即不忽略)LIN响应的处理必须通过对LinIf_RxIndication、LinIf_TxConfirmation或LinIf_LinErrorIndication的调用完成,直到新的LIN头接收由Lin_HeaderIndication的调用指示。

3.5 睡眠和唤醒功能

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

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

四、API接口

4.1 API定义

  1. Lin_Init
  2. Lin_CheckWakeup  ——此函数检查在已寻址的LIN通道上是否发生了唤醒。
  3. Lin_GetVersionInfo
  4. Lin_SendFrame       ——如果需要,发送LIN标头和LIN响应。
  5. Lin_GoToSleep        ——该服务指示驱动程序在被寻址的LIN通道上传输一个进入睡眠状态的命令。
  6. Lin_GoToSleepInternal  ——将信道状态设置为LIN_CH_SLEEP,启用唤醒检测,并可选择将LIN硬件单元设置为降低功率运行模式
  7. Lin_Wakeup                  ——生成唤醒脉冲,并将信道状态设置为LIN_CH_可操作。
  8. Lin_WakeupInternal      ——将信道状态设置为LIN_CH_OPERATIONAL,而不产生唤醒脉冲。
  9. Lin_GetStatus               ——获取LIN驱动程序的状态。仅用于LIN主节点