一文梳理LIN协议与应用

2024-03-04 12:44
文章标签 应用 协议 梳理 一文 lin

本文主要是介绍一文梳理LIN协议与应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、LIN是什么?有什么用?
  • 二、LIN概要描述
    • 2.1 特点
      • 2.1.1 低成本
      • 2.1.2 易扩展
      • 2.1.3 速率一般,不高
    • 2.2 网络形态
    • 2.3 架构分层
  • 三、应用层 4 大功能
    • 3.1 配置
    • 3.2 识别(查询功能)
    • 3.3 信号处理
    • 3.4 诊断
  • 四、协议层介绍
    • 4.1 帧的结构
    • 4.2 帧的类型
      • 4.2.1 信号携带帧——无条件帧(Unconditional Frame)
      • 4.2.2 信号携带帧——事件触发帧(Event Triggered Frame)
        • 4.2.2.1 与“事件触发帧”相关联的无条件帧:
        • 4.2.2.2 事件触发帧发生冲突时,如何解决?
      • 4.2.3 信号携带帧——偶发帧(Sporadic Frame)
      • 4.2.4 诊断帧(Diagnostic Frame)
      • 4.2.5 保留帧(Reserved Frame)
    • 4.3 调度表
  • 五、硬件
    • 5.1 物理介质
    • 5.2 EMI 控制

一、LIN是什么?有什么用?

LIN 是Local Interconnect Network 的缩写,意为本地互联网络,就是通信用的。可用于大多数嵌入式开发的行业领域中,如汽车、家电、工业自动化等。

在车载领域,LIN通常做为CAN网络的一个子网络的形式存在。(CAN网络是什么,不在本文讨论范围内)

从应用层来说,LIN主要有两个作用:信号处理 和 消息分发
在协议层,信号和消息位于帧中的数据段,是节点向其他节点传达的实质信息。
信号被包含在“信号携带帧”中,消息被包含在“诊断帧”中。会在LIN的帧类型处介绍。

二、LIN概要描述

2.1 特点

2.1.1 低成本

LIN是一个低成本的通信协议,因为在物理层LIN总线使用一根线做为介质,且实际使用中通常为一根铜线。与CAN或I2C协议的两根线相比,减少了线的长度与重量。

2.1.2 易扩展

基于UART/SCI(Universal Asynchronous Receiver-Transmitter /
Serial Communication Interface,通用异步收发器/串行通信接口),所以支持了大部分的半导体零件,从硬件角度讲,LIN网络的扩展,基本没有额外成本。

2.1.3 速率一般,不高

最高位速率限制在20kbps,物理层受电磁干扰的影响,速率不能太快。

2.2 网络形态

在这里插入图片描述
LIN通信以主从模式设计。
车载开发中,主机节点一般就是MCU了,从机节点例如:车门、氛围灯、雨刷器、大灯等。
在这里插入图片描述
主机节点包含主机任务、从机任务。从机节点只包含从机任务。

2.3 架构分层

在这里插入图片描述
简单画了个图,严格来说不是太准确哈,不过也够用,先简单这么理解吧,有个印象就行。
学过OSI七层网络模型的,这个就比较简单了,不想赘述。

三、应用层 4 大功能

1. 配置
2. 识别
3. 信号处理
4. 诊断

3.1 配置

LIN网络使用主从模式,通信时无外乎三种场景:
主 --> 从
从 --> 主
从1 --> 从2
不论是哪种,先要解决一个问题,当前信息持有者想发数据出去,要发给谁呢?对方怎么知道这个数据是发给它的?
简单理解,配置就是给各个节点打个标记,如下:
在这里插入图片描述
各个节点有了身份证以后,数据的收发就能知道目标了。
用LIN规范的话来说,上面的标号叫 NAD,也叫逻辑节点。
应用层NAD 会对应协议层的 PID(1对1或1对多)。这个关系,表示当前的NAD节点可以处理哪些信号。PID是啥后面会讲。

配置功能是指LIN 的主机节点能自动地给所有逻辑节点选择配置项,消除NAD 和PID 分配中存在的冲突,使网络正常工作。配置功能是确保各节点协调运作的内部功能,包含分配NAD、分配PID 等服务。

分配NAD、分配PID 等,使用 LIN 产品代号做为标识,判断是给哪个节点配置。
配置的目的是:给某个节点配置,它所能够处理哪种信号(哪种帧),业务分角色承担。

3.2 识别(查询功能)

识别是主机向从机查询信息用的。默认定义了两个:
识别ID = 0时,查从机的LIN产品ID
识别ID = 1时,查从机的序列号
识别ID = 32-63,用户可以自定义。

3.3 信号处理

信号处理是不经过传输层的,也就是上面说的架构图不准确的地方。
应用层直接与协议层交互,信号通过协议层的“信号携带帧”通信。

3.4 诊断

诊断功能是LIN 网络作为一个整体对外呈现的可配置、可访问的属性。应用于汽车维修,查找故障的场景。
在这里插入图片描述

四、协议层介绍

4.1 帧的结构

帧在总线上的传输
在这里插入图片描述
Header由主机任务发出,Response由从机任务回复。

Break:标识一帧的开始
Synch:调整从机节点的数据位速率与主机节点一致。主机的时钟需要高精度,从机节点时钟不需要高精度。
Protected identifier:受保护的ID段(8位) = 帧ID(6位) + 校验位(2位),就是上面提到的PID。
PID 标识了帧的类别和目的地。
在这里插入图片描述
Data1~DataN:一个Data块 占一个字节,包括两种数据类型:信号和诊断消息。
一个PID对应的数据可能包含一个或多个信号。
Checksum:校验用

4.2 帧的类型

4.2.1 信号携带帧——无条件帧(Unconditional Frame)

发送方:主机任务,单一发送节点
发送时机:帧时隙
应答方:从机任务
总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答),这个无条件更多的是指从机状态是否变化。无论从机状态变没变,只要收到了无条件帧就要回复。

4.2.2 信号携带帧——事件触发帧(Event Triggered Frame)

使用场景:主机节点查询各从机节点的状态是否发生变化时使用
事件触发帧,与无条帧不同的是:当从机节点状态没有发生变化时,不用回复帧。只有在状态发生变化时,才回复。降低了总线的负载。
举例:当前4个车门全是关闭状态,想检测哪个车门开了。需要轮询四个车门,查询开关状态:

  1. 如果使用无条件帧的话,主机节点下发一次查询,即使当前4个车门全部都是关的,每个车门都要回复一下,总线上就跑了4帧回复数据。如果4个车门一直没有变化,这种情况将持续下去。
  2. 如果使用事件触发帧,主机节点下发一次查询,当前4个车门全部都是关的,无变化,那么就不会回复。事件触发帧允许一帧中只有帧头无应答;,此时总线只有一帧主机节点下发的事件触发帧,还只有帧头。这样在轮询过程中,此种场景下,将大大减少总线的负载。

适用的场景:从机节点状态变化频率低,主机节点需要查询状态变化时。

当多个从机节点,同时回复时,会产生冲突,为了解决冲突,引用了【与“事件触发帧”相关联的无条件帧】这个概念:

4.2.2.1 与“事件触发帧”相关联的无条件帧:

比如,原来用一个无条件帧A 来询问前左车门的开关状态,
现在,主机使用一个事件触发帧B 来查询前左车门车门状态。
那么,对于前左车门来说,原来用于回复无条件帧A的那段数据,和现在用于回复这个事件触发帧B的数据,它们是一样的。(即事件触发帧的应答部分是与其关联的无条件帧所提供的应答的。)
此时我们称这个“无条件帧A”,是与B关联的无条件帧。

4.2.2.2 事件触发帧发生冲突时,如何解决?

考虑场景:主机发送一事件触发帧查询4个车门的开关情况,此时左前和右前两个从机都开门了,信号发生变化,同时应答,发生冲突了。
此时,LIN启用冲突解决调度表,按序给4个车门发送【与“事件触发帧”相关联的无条件帧】,4个车门再依次重新进行应答(类似轮询)。

可能存在疑问,这不就退回为无条件帧的轮询了吗?

不一样。原因如下:

  • 一、事件触发帧的针对场景是,从机节点发生变化频率较低时,也意味着 事件触发帧发生冲突的概率是比较低的。
  • 二、通过使用冲突解决调度表来处理冲突,LIN协议能够在保持简单性的同时,提供一定的可靠性和鲁棒性。
  • 三、可能会牺牲一点点效率,以确保数据的正确传输。但是它只进行一次对与冲突相关的节点的轮询,当解决了此次的冲突后,就会恢复正常工作。与无条件帧轮询方案相比,这点小牺牲可以忽略不计了。

需要轮询的从机节点越多时,从机节点变化的频率越低,事件触发帧的优势越明显。

4.2.3 信号携带帧——偶发帧(Sporadic Frame)

发送方:只能主机节点
发送时机:同一帧时隙,自身发生变化时
当主机有多个因素,或状态发生变化时,按照事先定义好的优先级进行发送应答(使用主机的从机任务)。优先级高的先发送应答,优先级低的,在下一个偶发帧的帧头到来时,才能发送。

事件触发帧主要侧重于从机节点的变化信息发送,当从机节点发生某种特定事件时,会触发帧的发送,以传递该事件的相关信息。而偶发帧则主要侧重于主机节点的变化,当主机节点状态发生变化时,会发送偶发帧来通知其他节点。

4.2.4 诊断帧(Diagnostic Frame)

包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。主机请求帧(Master Request Frame,
MRF),帧ID = 0x3C,应答部分的发布节点为主机节点;从机应答帧(Slave Response Frame,SRF),帧ID = 0x3D,
应答部分的发布节点为从机节点。

4.2.5 保留帧(Reserved Frame)

备用

4.3 调度表

在这里插入图片描述

五、硬件

5.1 物理介质

总线介质:市场上主流使用铜线。
总线收发器也是针对铜线的。

全双工:两根线,同时收发数据
半双工:一根线,同一时刻只能收或发,同一时刻是单向的
单工:一根线,一直是单向的,只能收或发。

协议控制器是基于UART/SCI 的通信控制器,工作方式是半双工(LIN一根线)

5.2 EMI 控制

EMI 指电磁干扰

压摆率(Slew Rate),也称为转换速率,是衡量放大器对信号变化速度适应能力的参数。它指的是运算放大器输出电压的转换速率,单位通常有V/s、V/ms和V/μs三种。压摆率的大小反映了放大器对信号变化速度的快慢,即放大器在单位时间内输出电压的变化量。

在处理高速信号时,压摆率是一个非常重要的指标。如果放大器的压摆率不够高,那么当输入信号变化速度较快时,放大器可能无法及时跟随输入信号的变化,导致输出信号失真。因此,对于需要处理高速信号的放大器,压摆率是一个需要特别关注的参数。

位速率、压摆率越高,EMI越显著。
LIN协议可以控制EMI:协议控制器可以控制位速率,总线收发器可以控制压摆率。
20Kbps的最高位速率限制,是数据速率与EMI 权衡的结果。

ESD(Electrostatic Discharge)指静电危害


缩写全称解释
LDFLIN Description FileLIN描述文件
NCFNode Capability File节点性能文件

本文完。


觉得有用的话,动动你发财的小手,点个赞,^(∩_∩)^ 谢谢~

这篇关于一文梳理LIN协议与应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773210

相关文章

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

CSS3 布局样式及其应用举例

《CSS3布局样式及其应用举例》CSS3的布局特性为前端开发者提供了无限可能,无论是Flexbox的一维布局还是Grid的二维布局,它们都能够帮助开发者以更清晰、简洁的方式实现复杂的网页布局,本文给... 目录深入探讨 css3 布局样式及其应用引言一、CSS布局的历史与发展1.1 早期布局的局限性1.2

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

Redis中RedisSearch使用及应用场景

《Redis中RedisSearch使用及应用场景》RedisSearch是一个强大的全文搜索和索引模块,可以为Redis添加高效的搜索功能,下面就来介绍一下RedisSearch使用及应用场景,感兴... 目录1. RedisSearch的基本概念2. RedisSearch的核心功能(1) 创建索引(2

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-