LIN总线

news/2024/11/15 18:04:13/文章来源:https://www.cnblogs.com/waibibabu-/p/18536811

LIN总线

参考链接:https://www.renesas.cn/zh/document/apn/904591?language=zh

LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface,通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办 公设备等多种领域。本文主要针对 LIN 在分布式的汽车电子网络系统中的应用。

LIN总线的特点

  1. 一个lin网络是由一个主机和多个从机节点构成

  2. 信号传输具有确定性,传播时间可以提前计算出

  3. LIN 具有可预测的 EMC(ElectroMagnetic Compatibility,电磁兼容性)性能,为了限制 EMI(ElectroMagnetic Interference,电磁干扰)强度,LIN 协议规定最大位速率为 20kbps。

  4. LIN 提供信号处理、配置、识别和诊断四项功能,

  5. 使用 LIN 可以大幅度的削减成本

  6. LIN总线是采用‘线 - 与’,当总线上有 大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(不发送任何信 息时总线默认呈隐性电平)时,总线才呈现隐性电平,即显性电平起主导作用

  7. 在 LIN 帧中,数据传输都是先发送 LSB(Least Significant Bit,最低有效位),最后发送 MSB(Most Significant Bit,最高有效位)

  8. LIN 的拓扑结构为单线总线,一主多从模式

显性电平 逻辑0,隐性电平 逻辑1

主/从机节点与主/从机任务

主机任务: 调度总线上帧的传输次序;监测数据,处理错误;作为标准时钟参考;接收从机节点发出的总线唤醒命令

从机任务: 发送应答;接收应答;既不接收也不发送应答

一、帧的结构

帧包含帧头和应答,主机任务负责发送帧头;从机任务接收帧头并对帧头 所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应

帧头: 同步间隔段,同步段,PID段

image

1.1同步间隔段

组成: 同步间隔,同步间隔段间隔符

同步间隔:至少持续 13 位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并 且帧中的任何其它字段都不会发出大于 9 位的显性电平,因此同步间隔可以标志一个帧的开始

同步间隔段间隔符:至少持续 1 位的隐性电平

1.2同步段

从机节点通过接收主机节点发出的同步段,计算出主机节点位速 率,根据计算结果对自身的位速率重新作调整

LIN 同步以下降沿为判断标志,采用字节 0x55(转换为二进制为 01010101b)。

1.3受保护段ID

受保护 ID 段的前 6 位叫作帧 ID(Frame ID),加上两个奇偶校验位后称作受保护 ID,PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断 为传输错误。

帧 ID 的范围在 0x00~0x3F 之间,共 64 个。帧 ID 标识了帧的类别和目的地。从机任务对于帧头作出的反 应(接收/发送/忽略应答部分)都是依据帧 ID 判断的

依据帧 ID 不同将帧进行分类

image

应答帧:数据段,校验和段

1.4数据段

节点发送的数据位于数据段,节点发送的数据位于数据段,数据段包含了两种数据类型,信号(Signal)和诊断消息(Diagnostic messages),信号(Signal)由信号携带帧传递,一个帧 ID 对应的数据段可能包含一个或多个信号。信号更新时要保证其 完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher); 其余的一个或多个节点接收,它们称为信号的收听节点(Subscriber)。

1.5校验和段

校验和分为标准型校验和(Classic Checksum)及增强型校验和(Enhanced Checksum),校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于 256 时就减去 255),并将所得最 终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制 加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为 0xFF,则校验和无误.

二、帧传输时间的计算

TFrame_Maximum为帧在总 线上传输的最大时间;THeader_Maximum为帧头在总线上传输的最大时间;TResponse_Maximum为应答在总线上传输的最 大时间;THeader_Nominal为帧头额定传输时间:同步间隔段(包含同步间隔和同步间隔段间隔符)的最小传输时间 + 同步段传输时间 + 受保护ID段传输时间;帧头的余量THeader_Rest包含字节间间隔,规定为帧头额定传输时间的 0.4 倍;TResponse_Nominal为应答额定传输时间:数据段传输时间 + 校验和段传输时间;应答的余量TResponse_Rest包含 应答间隔以及字节间间隔,规定为应答额定传输时间的 0.4 倍;Ndata表示数据段包含N个字节

image

三、帧的类型

image

3.1无条件帧

无条件帧是具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧,总线上一旦有帧头发送出去,必须有从 机任务作应答(即无条件发送应答)

3.2事件触发帧

事件触发帧是主机节点在一个帧时隙中查询各从机节点的信号是否发生变化时使用的帧,当存 在多个发布节点时,通过冲突解决进度表来解决冲突。

3.3偶发帧

偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关 联的应答信号变化时,通过事先设定的优先级来仲裁。

3.4诊断帧

诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。主机请求帧(Master Request Frame, MRF),帧ID = 0x3C,应答部分的发布节点为主机节点;从机应答帧(Slave Response Frame,SRF),帧ID = 0x3D, 应答部分的发布节点为从机节点。数据段规定为8个字节,一律采用标准型校验和

3.5保留帧

保留帧的帧 ID 为 0x3E 和 0x3F,为将来扩展用

四、进度表

进度表是帧的调度表,规定总线上帧的传输次序以及各帧在总线上的传输时间。进度表位于主机节点,主 机任务根据应用层需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表 规定的入口处开始顺序执行,到进度表的最后一个帧时,如果没有新的进度表启动,则返回到当前的进度表第 一个帧循环执行;也有可能在执行某个进度表当中发生中断,执行另一个进度表后再返回。

进度表除规定了帧 ID 的传输次序外,还规定了帧时隙(Frame Slot)的大小。帧时隙是进度表规定的一个帧 的帧头起始到下一个的帧的帧头起始的时间。每个帧的帧时隙都可以不同,一个帧时隙对应了进度表的一个入 口

image

五、状态机

5.1主机状态机

image

5.2从机状态机

image

六、网络管理

6.1 休眠

总线可以在两种情况下进入休眠:

  1. 利用诊断帧中的主机请求帧 0x3C 作休眠命令,要求数据段的第一个字节为 0x00,其余字节为 0xFF。 休眠命令由主机节点发出,总线上的从机节点只判断数据段的第一个字节,其余字节忽略。从机节点在接 收到休眠命令后,不一定要进入低功耗模式,根据应用层需要设置

休眠

2.当总线静默(没有显性和隐性电平之间的切换)4s~10s 时,节点自动进入休眠状态

6.2唤醒

当总线处于休眠状态时,主/从机节点都可以向总线上发送唤醒信号,唤醒信号持续 250μs~5ms。其余节 点(除发送唤醒信号以外的节点)以大于 150μs 为阈值判定唤醒信号。每个从机节点必须在唤醒信号显性脉冲的 结束处算起 100ms 以内准备接收来自主机的命令(帧头);主机节点也必须被唤醒,100ms 之内主机节点发送帧 头开始通信。主机节点的同步间隔段也可以充当唤醒信号,由于从机节点需要作初始化处理,因此主机节点所 发的这个帧有可能不会被正常接收。 如果节点发送出唤醒信号后,在 150ms~250ms 之内没有接收到总线上的任何命令(帧头),则可以重新发送 一次唤醒信号。唤醒信号最多可以发送 3 次,3 次之后,必须等待至少 1.5s 之后才可以再次发送唤醒信号

七、PDU信号重组

把来自诊断服务的消息(Message)“翻译”成协议层可以处理的 PDU (Packet Data Unit,分组数据单元),或者反过来,把协议层收到的PDU“翻译”成诊断服务需要的消息。消 息到PDU的转换过程称为拆分(Packing),PDU到消息的转换过程称为重组(Unpacking)。PDU对应着帧结构的 数据段,并通过诊断帧发送或接收。

从发送格式上,PDU单元可分为单帧(Single Frame,SF)、首帧(First Frame,FF)和续帧(Consecutive Frames, CF)三种。从发送源上,主机发送请求PDU,从机发送应答PDU。

PDU的组成包括:节点地址(NAD),协议控制信息(PCI),LEN,服务ID(SID),应答服务ID(RSID), 消息字节段(D1~D6)。首字节NAD首先发送,末字节D4,D5,D6

image

7.1NAD

PDU单元的第一个字节是NAD(node address),用于区分不同从机节点的地址。下表为NAD的取值范围

image

7.2PCI

PDU单元的第二个字节是PCI(Protocol Control Information)信息,包含了PDU单元类型和消息字节长度的信息

单帧中,附加信息Length表示消息字节数加1。首帧中,附加信息只表示Length的高4位,低8位在LEN 中表示。因此在消息长度为12位数据,最大长度为4095(0xFFF)。 续帧中的附加信息表示首帧后,跟随的续帧的编号,第一个续帧编号为1,之后累加1。如果续帧数多于 15 个,那么帧计数器在第16个续帧时从0重新计数。

7.3 SID 与 RSID

SID(Service Identifier)表示了从机节点应完成的服务请求。节点配置服务的SID区间为0xB0~0xB7,诊断 服务的SID区间为0x000xAF,0xB80xFE。

RSID(Response Service Identifier)表示从机节点应答的内容,它的值是SID+0x40。

7.4消息字节段

消息字节段的内容取决于服务的种类。在单帧中,消息字段最多6个字节。在首帧和续帧中,所有PDU的 消息字段,经过“重组”组成一个完成的消息。

八、LIN应用层

LIN应用层提供信号处理、配置、识别和诊断四项功能。配置、识别和诊断功能又包含若干项目,称为服 务(Service)。为了区别,每项服务都有固定、唯一的服务代号(Service ID,SID)

image

​ ① 信号通过信号携带帧通信
​ ② 配置服务通过传输层,以单帧的形式通信
​ ③ 识别服务通过传输层,以单帧的形式通信
​ ④ 基于信号的诊断服务
​ ⑤ 诊断传输层,通过传输层通信,需要使用复帧的形式通信
​ ⑥ 用户自定义的诊断

LIN应用层的配置、识别和诊断都是针对逻辑节点(Logical Node)的。逻辑节点是能够对来自主机节点和/ 或诊断设备的服务请求作出响应的功能实体。为了区别不同的逻辑节点,LIN定义了NAD(Node Address for Diagnose,诊断地址)。第1章介绍了物理节点(Physical Node)、从机任务和接口(Interface)的概念。对于一个物 理节点来说,从机任务和接口对应着实现帧收发的软件和硬件实体,而逻辑节点则代表了配置、识别和诊断方 面的能力。物理节点、从机任务以及接口是一一对应的,但是物理节点可以包括1个或者多个逻辑节点。

8.1信号处理功能

信号处理功能是指应用层可以不经过传输层,直接从协议层获取或修改网络中的信号。这些信号由 NCF(Node Capability File,节点性能文件)定义,既可以是工作参数(例如温度、压力的测量值、继电器的开合状 态等),也可以是状态标志(例如某信号携带帧的收发状态)。

image

8.2配置功能

LIN 规范规定,每个逻辑节点都应该有NAD。在网络运行期间,任意两个逻辑节点的NAD都必须不同, 否则就会产生冲突。此外,每个逻辑节点都要能处理带有某些PID的帧。由此可见,NAD和PID分别与逻辑 节点建立了一种映射关系,LIN规范把NAD和PID的这样一种组合称为逻辑节点的配置项(Configuration)。一 个逻辑节点可以有一个以上的配置项,但在网络运行期间,每个逻辑节点只能有一个配置项有效。

配置功能是指LIN的主机节点能自动地给所有逻辑节点选择配置项,消除NAD和PID分配中存在的冲突, 使网络正常工作。配置功能是确保各节点协调运作的内部功能,包含分配NAD、分配PID等服务。配置功能通 过传输层完成配置服务。 为了适应汽车行业的需要,LIN规范定义配置功能的服务时,参照了ISO制定的UDS(Unified Diagnostic Services,车辆统一诊断服务)标准(参照参考资料[7])和OBD(On-board Diagnostic,车载自动诊断)标准(参照参考 资料[9])。配置功能各项服务及其SID都是ISO标准的子集。

配置功能的工作模型与计算机局域网的“客户机-服务器”模型很相似,主机节点可以被视为客户机,逻辑节点被视为服务器。客户机首先向服务器发出服务请求,服务器依照请求执行操作,然后向客户 机返回应答

8.2.1节点存储模型

如同商品包装上的条形码,每个物理节点都有一个固定的编码,叫做LIN产品代号(LIN Product Identification)。产品代号是出厂时赋予的,除非修改产品,否则其内容不变。产品代号保存在不需要电源就能 维持记录的地方,例如ROM或者非易失性存储器(Non-volatile Random Accessible Memory,NVRAM)。在进行配置服务时,从主机接收的产品代号必须和从机节点保存的产品代号一致,才能正常进行配置服务。

image

另外,从机节点还可以有一个序列号,用于识别特殊的节点。序列号大小为4字节。 从机节点可以将配置信息保存起来,重启后调用保存的配置信息,而无需主机节点再次分配。 针对配置项的存储类型,LIN规范定义了三种从机节点配置模型:

第一种,无配置节点,这种从机节点在重启后,自身没有配置项,每次重启都需要主机进行配置。
第二种,预配置节点,这种从机节点在重启后,调用预先设置的配置项。但是在主机重新对其进行配置后, 不能存储新配置项。
第三种,全功能配置节点,这种从机节点可以保存主机对其的配置,并在重启后调用此配置。

8.2.2从机节点NAD配置

有三种方法生成配置NAD,如果初始NAD等于配置NAD,那么不需要进行其他配置操作。如果配置NAD 需要从从机节点存储的保留配置中提取,如果NAD需要变更,则需要 主机发送配置NAD请求。

注意,应答时,仍然使用初始NAD。

每个从机节点有一个初始NAD,初始 NAD是从一个初始NAD列表中选择的。初始NAD列表是在编写节 点性能文件(NCF)时设置的。LIN协议没有对生成初始NAD的具体方法进行限制。

image

8.2.3从机节点 PID 配置

从机节点各个帧的PID,是主机进行分配的。通过分配PID列服务,主机一次最多可给从机节点分配4个帧的PID

其中,消息字节段的第一字节是开始帧索引,表示分配第一个帧的排列号。从机节点中各帧的排列顺序是 按照节点性能文件(NCF)和LIN描述文件(LDF)中定义的顺序定义的。第一帧的索引编号是0

后续四个字节是给从机节点分配的PID。如果分配的PID值为0,表示对应的信号携带帧无效。如果分配 的PID值为0xFF,表示保持对应帧的PID不变

image

8.2.4诊断功能

诊断功能是指LIN网络之外的诊断设备可以直接连接LIN的主机节点,或者通过外部的其它网络连接主机节点,连接后,诊断设备可以按规定的诊断协议(例如 ISO15765规范,参照参考资料[9])与LIN的逻辑节点通讯。与配置功能相比,诊断功能是LIN网络作为一个整 体对外呈现的可配置、可访问的属性

image

8.2.5诊断类型

逻辑节点功能越复杂,支持的服务越多,对逻辑节点的计算能力要求就越高。 差 依据诊断服务的数量,LIN规范划分出三种不同的诊断类型——I类、II类和III类,适用于不同条件的逻 辑节点。I类最低,III类最高,较高类型完全包含较低类型的功能。 I 类是所有诊断类型的公共部分,提供信号处理、识别、配置功能,诊断功能采用表5.12中的方式A,这 也是每个逻辑节点必备的服务。II类节点增加了UDS定义的识别服务(注1),诊断方式一般采用表5.12中的方 式B。III类节点相比II类节点,又增加了UDS定义的部分其它服务,此外,还增加了通过LIN总线在线升级 的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829326.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt.js 应用中的 listen 事件钩子详解

title: Nuxt.js 应用中的 listen 事件钩子详解 date: 2024/11/9 updated: 2024/11/9 author: cmdragon excerpt: 它为开发者提供了一个自由的空间可以在开发服务器启动时插入自定义逻辑。通过合理利用这个钩子,开发者能够提升代码的可维护性和调试能力。注意处理性能、错误和…

vmware虚拟机更改名字

vmware 虚拟机更改名字,vmware虚拟机安装目录最少文件我安装的时候起名字为 debian1260,后来想改为 debian12gui,我把虚拟机安装目录中的其他文件全都删除,只保留这三个文件。然后把名字改一下,vmx 文本文件中的名字替换一下,双击虚拟机 vmx 文件打开即可。有了计划记得推…

Vanity Intermediate 统配符提权

nmap扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.167.234 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-09 03:59 UTC Stats: 0:01:22 elapsed; 0 hosts completed (1 up), 1 undergoing Traceroute Traceroute Timing: About 32.26% done; ETC: 04:00 …

C++ exception 异常类继承关系

▲ https://blog.csdn.net/m1059247324/article/details/116228823

Python代码文件不只是“.py”

今天同事给我扔了一个.pyd文件,说让我跑个数据。然后我就傻了。。不知道多少粉丝小伙伴会run.pyd代码文件?如果你也懵懵的,请继续往下读吧。。 今天科普下各类Python代码文件的后缀,给各位Python开发“扫扫盲”。 .py 最常见的Python代码文件后缀名,官方称Python源代码文件…

go语言init函数与main函数的执行顺序

package schoolimport "fmt"func init() {fmt.Println("school包初始化了") }type School struct { }func (s *School) PrintSchool() {fmt.Println("我是一所学校") }package homeimport "fmt"func init() {fmt.Println("home包…

数据缩放方法总结

数据缩放(Data Scaling)是数据预处理的一种重要方法,用于将不同取值范围的特征值调整到统一的范围,从而提高机器学习模型的性能和稳定性。本文将总结常见的数据缩放方法,并分析它们的优缺点及适用场景。 1. 均值归一化(Mean Normalization):将数据缩放到[-1,1]的范围内…

京东面试:亿级黑名单 如何设计?亿级查重 呢?(答案含:布隆过滤器、布谷鸟过滤器)

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

==和equals方法的区别

在Java中,​​==​​​ 和 ​​equals​​ 方法用于比较对象,但它们之间存在本质的区别: ​​==​​ 操作符基本数据类型:​​==​​ 比较的是值是否相等。int a = 10; int b = 10; System.out.println(a == b); // 输出 true引用类型: 用于引用类型(如对象、数组)时,=…

求助

请各位大佬救救小蒟蒻,这题不会了时光花火,水月星辰

理解乐观锁和悲观锁

乐观锁:认为每次去拿数据的时候别人不会修改,所以不会上锁,但是每次要拿数据的时候都会先判断数据是否被别人修改 悲观锁:认为每次去拿数据的时候别人都会修改,所以每次都会上锁。 使用场景:乐观锁使用于多读少写的应用类型,这样可以提高吞吐量;相反的情况则使用悲观锁…