LIN总线介绍

介绍

LIN(Local Interconnect Network)总线是在汽车内广泛应用的串行通信协议,它的第一个完整版本 V1.3 发布于 2002 年,在 2016 年LIN总线被正式列为国际标准(ISO 17987)。

LIN总线是针对汽车分布式电子系统而定义的一种低成本的低速串行通讯网络,是对控制器区域网络(CAN)等其它汽车多路网络的一种补充,适用于对网络的带宽、性能或容错功能没有过高要求的应用。

LIN适用于节点数目小于等于 16 个,数据速率 20Kbps 以内的应用场合。

LIN总线相对于CAN的成本节省主要是由于采用单线传输、硅片中硬件或软件的低实现成本和无需在从属节点中使用石英或陶瓷谐振器。这些优点是以较低的带宽和受局限的单宿主总线访问方法为代价的。

LIN总线是基于SCI(UART)数据格式,采用单主控制器/多从设备的模式,是UART中的一种特殊情况。

LIN总线上的所有通讯都由主机节点中的主机任务发起,主机任务根据调度表来确定当前的通讯内容,发送相应的帧头,并为报文帧分配帧通道。总线上的从机节点接收帧头之后,通过解读标识符来确定自己是否应该对当前通讯做出响应、做出何种响应。基于这种报文滤波方式,LIN可实现多种数据传输模式,且一个报文帧可以同时被多个节点接收利用。

开发流程

开发流程中的核心组件为描述网络特征的 LDF(LIN Description File),LDF定义LIN网络的所有通信特征,通信主机基于LDF可以自动生成通信过程的所有软件组件。同时,LDF可以为测试测量工具提供分析LIN网络所必须的信息。

LIN Configuration Language Specification 定义了创建LDF的过程,创建语法相当简单,可以手动或通过软件工具自动生成LDF。

自 LIN V2.0 规范起,增补的节点统一描述语言可以清晰地说明商用节点(Off-the-Shelf Nodes)设备的通信特征,通过这种 LIN Node Capability Language 描述的节点特征文件称 NCF(Node Capability File),而LIN子网(Cluster)中所有节点NCF正是创建系统LDF的必要条件。

特点和任务

LIN总线有如下特点:

  1. 单主控器/多从设备模式无需仲裁机制;

  2. 低成本,基于通用UART 接口,所有控制机都具备LIN 必需的硬件;

  3. 单信号线传输,同时保证信号传输的延迟时间;

  4. LIN具有可预测的电磁兼容性能,为了限制EMC的强度,LIN协议规定最大传输速率为20kbps;

  5. LIN总线提供信号的配置、处理、识别和诊断功能。

主机任务:

  1. 调度总线上帧的传输次序;

  2. 监测数据,处理错误;

  3. 作为标准时钟参考;

  4. 接收从机节点发出的总线唤醒命令;

  5. 从机任务不能直接向总线发送数据,需要接受到主节点发送的帧头后,根据帧头所包含的信息来判断。

从机任务:发送应答,接收应答,忽略应答。

网络拓扑

LIN总线有其“局域”特性,在汽车中一般不独立存在,通常与上层CAN网络相连,形成CAN-LIN网关节点,通常汽车电子中,整车厂会规定该“网关节点”(主机节点)的控制器归属。

LIN总线拓扑通常为线型,即所有节点设备均通过单线连在一起。主机包括主机任务(Master Task)和从机任务(Slave Task),从机节点只包括从机任务。

在LIN总线上,主机控制子网内每条消息的传输过程,这种总线访问方式称为授权令牌(Delegated Token)。授权令牌方式的优点是它可以避免消息传输过程的冲突竞争,因为完全由主机协调控制每条消息的应答请求。

LIN总线主机可以根据预设好的调度表(Schedule)规划总线上的数据传输。授权令牌总线访问方式因此被归类为确定性总线访问方式。

授权令牌访问方式的缺点有两点:首先,如果主机失效,则整个总线通信随即失效,因此该方式不适合安全要求高的应用;其次,由于每次通信过程均由主机控制,该方式不适合事件驱动型通信,从机无法自动获取总线访问权以发送数据。为弥补这点缺憾,LIN协议中增补额外的帧类型可以不按授权令牌方式发送消息。

LIN报文帧结构

LIN报文帧由帧头(Hearder)与应答(Response)两部分组成。传输过程中,主机任务负责发送帧头;从机任务负责接收帧头,然后作出解析决定发送应答,还是接收应答或不回复。

LIN总线显隐性与CAN总线是相同的。

同步间隔段

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

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

从机任务接收帧头的同步间隔段时,以该从机任务所在节点的位速率为准,当检测总线上出现持续 11 位的显性电平时,认为是帧的开始。当从机节点使用精度较高的时钟时,识别阈值可以选择 9.5 位。

同步段

在介绍同步段之前,首先介绍一下字节域(Byte Field)的概念,字节域包括1位起始位(Start Bit,显性) + 8位数据位 + 1位停止位(Stop Bit,隐性),,这是一种标准UART数据传输格式。在 LIN 的一帧当中,除了同步间隔段,后面的各段都是通过字节域的格式传输的。

在 LIN 帧中,数据传输都是先发送LSB,最后发送 MSB。

LIN总线将下降沿作为判断标志,通过字节0x55(01010101b)进行同步,在从机节点上可以采用非高精度时钟,如果带来偏差,可以通过同步场来调整。

PID段

受保护的ID,其前6位为帧ID(依据节点LDF生成),加上两个奇偶效验码称作受保护的ID。

帧ID的取值范围为0x00~0x3F,共64个,帧ID标识了帧的类别和目的地,从机任务会根据帧头ID作出反应(接收/发送/忽略应答),其中P0与P1效验如下:

其中“⊕”代表“异或”运算,“¬”代表“取非”运算。由公式可以看出,PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断传输错误。

数据段

包含1-8个字节,可以分为两种数据类型,信号和诊断消息。信号由信号携带帧传递,诊断消息由诊断帧传递。

LIN2.x规定可传输的LIN字节数为2,4,8,并不是1-8内任意一个数字。一般而言,车内会选择统一字节数,最常用的是每帧传递8个字节。

与CAN总线不同,LIN协议中并没有规定数据长度的信息,数据内容和长度均由系统设计者根据帧ID提前设定。

校验和段

效验分为标准型效验与增强型效验。采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。

帧类型

LIN总线根据帧ID的不同,将报文分为信号携带帧、诊断帧、保留帧。

从机应答帧是一个完整的帧,与帧结构中的“应答”不是一个概念。

  1. 无条件帧

    无条件帧是具有单一发布节点的,无论信号是否发生变化,帧头均会被无条件应答的帧。无条件帧在主机任务分配给它的固定的帧时隙(Reserved Frame Slot)中传输。总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答)。

  2. 事件触发帧

    事件触发帧是主机节点在一个帧间隙中,主机查询各从机节点的信号是否发生变化时使用的帧。当从机节点信号发生变化的频率较低时,主机任务查询各个节点信息会占用一定的带宽。为了减小带宽的占用,引入了事件触发帧的概念。

    其主要原理就是:

    当从机节点信息状态没有发生变化的时候,从机节点可以不应答主机发出的帧头;当有多个节点信息同时发生变化的时候,同时应答事件触发帧头会造成总线的冲突。当主机节点检测到冲突时,便会执行冲突解决调度表,通过发送无条件帧轮询所有从机来确定从机节点的信息状态。

    因为无条件帧只有1个节点应答,同一个 PID 的事件触发帧和无条件帧对应的第一个字节数据是相同的,即,如果从机的数据已更新,则它会做出响应,其受保护的ID位于第一个数据字节中。当多个从机同时响应时,它们各自的应答信号会在总线上产生叠加,造成电压水平异常。由于LIN总线的物理层特性,主机能够通过检测这种电压水平的变/response_error来识别出,发生了冲突。

  3. 偶发帧

    偶发帧是主机节点在同一帧时隙中,当自身信号发生变化时向总线发送的帧。当存在多个关联的应答信号变化时,通过预先设定的优先级来仲裁。偶发帧主要用于主机发送不经常变化的信息,可以理解为主机用的事件触发帧。与事件触发帧类似,偶发帧也定义了一组无条件帧。规定:偶发帧只有由主机节点发布。

    主机节点上面也有信息需要告诉从机节点,当主机节点检测到某个无条件帧的信号发生变化时,它会在适当的时机(即偶发帧的时隙)将这个变化发送出去。

  4. 诊断帧

    包括主机请求帧和从机应答帧,主要用于配置、识别和诊断。

    • 主机请求帧ID=0x3C,应答部分的发布节点为主机节点;

    • 从机应答帧ID=0x3D,应答部分的发布节点为从机节点。

    • 数据场规定为8个字节,一律采用标准效验和。

偶发帧

偶发帧的传输可能出现 3 种状况:

  1. 当关联的无条件帧没有信号发生变化时,该时隙保持沉默,主机节点连帧头都不需要发送;

  2. 当其中一个关联的无条件帧包含的信号发生了变化, 则发送该关联的无条件帧的应答部分,如图15上半部分所示;

  3. 如果有两个或以上关联的无条件帧包含的信号发生了变化,则按照事先规定好的优先级,优先级较高的关联的无条件帧获得发送权,优先级较低的要等到下一个偶发帧的帧头到来时才能发送应答。由于主机节点是唯一的发布节点,所以主机节点事先就知道各个关联信号的优先级别,这样在传输时不会产生冲突,如图15下半部分所示。

调度表

调度表规定了总线上帧的传输次序以及传输时间。调度表位于主机节点,主机任务根据应用程序需要进行调度。

调度表可以有多个,一般情况下,轮到某个调度表执行的时候,从该调度表的入口处开始执行,到调度表的最后一个帧时,如果没有新的调度表启动则返回到当前调度表的第一个帧开始执行;也有可能在执行到某个调度表时发生中断,跳到另一个调度表后再返回,如事件触发帧就是典型的例子。

主机状态机

在总线开始工作时,主机随即启动主机任务,周期性地执行调度表(Schedule)规定的消息发送程序。下表示意LIN总线调度表的内容,在调度表中包括各项消息 PID(Message Header)和启动时间。

从机状态机

从机任务负责发布或者接听帧的应答状态,包括连两个状态机:同步间隔段与同步段检查器、帧处理器。

从机任务状态机中,检测同步间隔段和同步段序列,要求节点处于任何状态下都能识别出该序列,包括已经检测到序列或进入帧处理的状态。

帧处理包括接收并分析PID,接收数据,接收校验和,发送数据和发送校验和,对接收到的受保护ID进行分析,按照事先的设计,选择是接收应答部分,还是发送应答部分,或不接收也不发送。在五个子状态中,如果收到同步间隔段或同步段序列,将重新跳到“接收并分析PID”的子状态,通信不停止,根据需要置位相应的错误标志。

帧传输时间

在消息调度中,协议为单条消息定义 Slot 的概念,Slot持续的时间必须大于帧头(Frame Header)和消息应答(Response)的时间以保证消息传送完毕。单个帧总是在同一个Slot内传输完的。考虑到收发器性能的影响,LIN协议规定单个消息传输时间有40%裕量,即帧的最小持续时间为其典型持续时间的1.4倍。

若同步间隔段是 13 bit 显性位 + 1 bit 隐性位,则帧头计 34 bit。应答包括数据段和校验和段,根据数据段长度的不同,应答最短为 20 bit(数据段 1 Byte),应答最长为 90 bit(数据段 8 Byte)。综上, LIN总线的帧最长为 124 bit(数据段 8 Byte),最短为 54 bit(数据段 1 Byte)。

帧的额定传输时间计算公式如下

LIN协议规定帧的最大传输时间为额定传输时间的 1.4 倍,即为帧传输预留 40% 的裕量。该特性是考虑到总线上节点设备性能参差不齐,允许节点不必收到指令后立即执行。也就是说,协议允许节点推迟下一个 UART 字符的发送。

帧的最大传输时间计算公式如下:

错误处理

协议强制规定, 每个从机节点都要在它发布的某个无条件帧中包含一个长度为一位的标量信号 response_error,向主机节点报告自身状态。 主机节点负责接收这个信号并且执行分析,如下表所示。事件触发帧由于允许总线冲突,需特殊处理。

LIN 协议并没有标准化错误类型,用户可根据需要自行制定。 下表列出了可能出现的一些错误类型供参考。

参考

http://www.wangdali.net/lin/

https://blog.csdn.net/dailbing/article/details/124248328

https://zhuanlan.zhihu.com/p/357967013

https://news.eeworld.com.cn/qrs/article_2018012444047.html

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2025 wrd
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信