当前位置: 首页 > article >正文

【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主节点


http://www.kler.cn/a/9338.html

相关文章:

  • Android OpenGL ES详解——立方体贴图
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • Kafka - 启用安全通信和认证机制_SSL + SASL
  • ubuntu ros 解决建完图后 保存的地图非常小的问题
  • 监控录音如何消除杂音?降低录音噪音的五个技巧
  • dapp获取钱包地址,及签名
  • Java实验课的学习笔记(二)类的简单使用
  • 2023年,软件测试行业怎么样?
  • Spark 并行度
  • docker 安装redis
  • 文档流normal flow
  • Redis - 基础数据类型
  • 签约喜讯 | Smartbi携手金域医学共建统一数据运营平台
  • Dart语言操作符?和!的用法
  • 优思学院|《精益思想》读后感
  • Fork分支代码与主干保持同步
  • ( “树” 之 DFS) 104. 二叉树的最大深度 ——【Leetcode每日一题】
  • 详细介绍别人电脑访问到自己电脑运行的项目
  • linux及docker和postgres SQL常用的一些命令整理
  • 托福高频真词List12 // 附托福TPO阅读真题
  • 【C++】继承---上(继承的引入及使用详解、切片赋值和作用域)
  • Elasticsearch+head+Ik中文分词器的安装以及Go操作Elasticsearch
  • 如何选择适合的企业网站建站方案?
  • 【Linux】基础IO
  • 【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)
  • Flutter 生命周期原理