一文梳理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

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines