LIN线协议简介

概述

本地互连网络(LIN)协议是用于连接智能设备的低成本嵌入式串行网络标准,在汽车工业中最为流行,可实现车辆组件之间的通信。

内容

LIN vs.CAN

本地互连网络(LIN)总线和控制器局域网(CAN)总线是汽车和工业系统中常用的通信协议。 虽然LIN和CAN具有相似的功能,但它们的架构和功能存在显著差异。 

LIN旨在创建汽车网络中低成本、低端多路复用通信的标准。尽管CAN解决了高带宽、高级错误处理网络的需求,但CAN实现的硬件和软件成本对于低性能设备(例如,动力窗和座椅控制器)来说已经变得难以承受。在不需要CAN带宽和通用性的非关键应用中,LIN提供经济高效的通信。使用嵌入到大多数现代低成本8位微控制器中的标准串行通用异步接收器/发射器(UART)可以相对低成本地实现LIN。

现代汽车网络将LIN组合主要用于车身电子设备的低成本应用、CAN用于主流动力总成和车身通信,以及新兴的FlexRay总线用于先进系统(如主动悬架)的高速同步数据通信。 

LIN概述

LIN总线采用主节点/从节点方式,包含一个LIN主节点以及一个或多个LIN从节点。

 
图1:LIN消息帧

消息头包含用于标识帧开始的中断和从节点用于时钟同步的同步字段。标识符(ID)由6位消息ID和2位奇偶校验字段组成。ID表示一个特定的消息地址,而不是目标地址。接收到并解析ID后,一个从设备开始消息响应,它由1至8个字节的数据和一个8位校验和组成。 

主设备控制消息帧的顺序,该顺序在时间表中是固定的。您可以根据需要更改时间表。 

LIN标准有多个版本。1.3版完成了字节层通信。2.0和2.1版本增加了消息传递规范和服务,但在字节级别与LIN 1.3兼容。 

 

1API本身不支持该功能,但可以实现该功能。 

 

表1:LIN 1.3、2.0和2.1版本的比较

LIN格式

LIN总线是一种轮询总线,带有一个主设备和一个或多个从设备。主设备包含主任务和从任务。每个从设备仅包含一个从任务。LIN总线上的通信仅由主设备上的主任务控制。LIN总线上传输的基本单位是帧,分为报头和响应。报头始终由主节点传输,由三个不同的字段组成:中断、同步(sync)和标识符(ID)。响应由从任务传输,可驻留在主节点或从节点中,由数据载荷和校验和组成。 

通常情况下,主任务通过发送报头(包含中断-同步-ID序列)轮询循环中的每个从任务。启动LIN之前,每个从任务被配置为将数据发布到总线或订阅数据以响应每个收到的头ID。收到头信息后,每个从任务将验证ID奇偶性,然后检查ID以确定是否需要发布或订阅。如从任务需要发布响应,它将向总线传输1至8个数据字节,然后是校验和字节。如从任务需要订阅,则从总线读取数据有效载荷和校验和字节,并采取适当的内部操作。 

对于标准从设备至主设备通信,主设备向网络广播标识符,只有一个从设备使用数据载荷响应。

主从通信由主节点中的独立从任务完成。该任务自动接收发布到总线的所有数据,并像响应独立的从节点一样响应。要传输数据字节,主设备必须首先使用要传输的数据值更新内部从设备的响应。然后主任务发布相应的帧头,内部从任务将其数据有效载荷传输至总线。


图2:LIN消息帧

1.休息

每个LIN帧以中断开始,中断包括13个主导位(标称)后跟一个中断分隔符(标称)隐式。作为总线上所有节点的帧开始通知。

2.同步

同步字段是报头中主任务传输的第二个字段。同步定义为字符x55。同步字段允许执行自动波特率检测的从设备测量波特率的周期并调整其内部波特率以与总线同步。

3.ID

ID字段是报头中主任务传输的最后一个字段。该字段提供网络上每个消息的标识,并最终确定网络中的哪些节点接收或响应每个传输。所有从任务不断侦听ID字段、验证其奇偶校验并确定它们是该特定标识符的发布者还是订阅者。LIN总线共有64个ID。ID 0至59用于信号传输(数据)帧,60和61用于传输诊断数据,62用于用户定义扩展,63用于未来协议改进。ID作为一个受保护的ID字节在总线上传输,低6位包含原始ID,高2位包含奇偶校验。

 

表2:奇偶校验计算方法

4.数据字节

数据字节字段由响应中的从任务传输。该字段包含1至8字节的有效载荷数据字节。 

5.验和

校验和字段由响应中的从任务传输。LIN总线定义了使用两种校验和算法之一计算8位校验和字段的值。经典校验和仅通过数据字节求和计算,而增强校验和通过数据字节和保护ID求和计算。

LIN 2.0规范将校验和计算过程定义为所有值的和,每次和大于等于256时减去255(不同于modulo-255或modulo-256)。根据LIN 2.0规范,经典校验和用于LIN 1.3从节点,增强校验和用于LIN 2.0从节点。它还指定ID 60至63应始终使用经典校验和。NI LIN接口提供将校验和类型设置为经典或增强的属性。默认设置为经典。根据LIN 2.0规范,ID 60至63始终使用经典校验和,与校验和属性的设置无关。

图3显示了主任务头和从任务响应如何组合创建LIN全帧。 

图3.创建LIN帧

LIN线定时

因为LIN总线是轮询总线,所以每帧的处理分配一个额定时间槽如下:

T头_额定值 = 34 * TBit
T响应_额定值 = 10 × (N数据 + 1) × TBit
TFrame_Nominal = THeader_Nominal + TResponse_Nominal
处理每一帧时分配的最大时隙如下:
THeader_最大值 = 14 × THeader_额定值
T响应_最大值 = 1.4 × T响应_额定值
TFrame_Maximum = THeader_Maximum + TResponse_Maximum

LIN结构行为

LIN总线将LIN集群中的单个主设备(节点)和一个或多个从设备(节点)连接在一起。每个节点的行为由自身的节点功能文件描述。节点功能文件是系统定义工具的输入,该工具生成描述整个集群行为的LIN描述文件(LDF)。LDF由系统生成器解析,以在所需节点中自动生成指定行为。此时,主节点主任务开始在总线上传输报头,簇中的所有从任务(包括主节点自身的从任务)都会响应,如LDF所指定。

一般而言,LDF用于配置和创建LIN集群的调度行为。例如,它定义了波特率、主任务传输报头的顺序和时间延迟,以及每个从任务响应的行为。NI LIN硬件和用于LIN的NI-CAN帧API无法为LDF提供完全支持,即无法下载调度行为至硬件。但是,提供了访问总线的底层支持(写入报头、发布或订阅响应),以便用户可以在应用程序层创建这种调度行为。如NI LIN响应入口帧类型的说明中所述,NI LIN硬件具有存储从任务响应的响应队列。响应队列包含64个响应,每个响应对应于LIN指定的最大64个ID。这样可确保LIN接口从任务可在LIN规范定义的响应时间内响应头信息。

用于LIN的NI-CAN帧API提供了与LIN总线进行完整底层交互的可靠手段。这为最终用户提供了开发复杂应用程序的基本功能,涉及LIN网络的分析和原型设计。用于LIN的NI-CAN帧API不支持LIN诊断或配置、LDF或时间表。但是,可在使用NI-CAN Frame API for LIN的应用程序中实现这些任务。

LIN错误检测限制

LIN 2.0规范指出,错误检测应由从任务处理,无需由主任务监控错误。LIN 2.0规范不要求在一个LIN帧内处理多个错误或使用错误计数器。遇到帧中的第一个错误时,从任务将中止帧的处理,直到检测到下一个中断同步序列(在主方传输的下一个报头中)。如记录总线错误属性设置为TRUE,总线错误帧将被记录至读取队列。如记录总线错误属性设置为FALSE,ncWriteNet或ncWriteNetMult将返回错误。 

LIN还提供向网络报告错误的功能。LIN 2.0规范定义了Response_Error状态位,从设备必须在传输的帧中向主设备报告。当从节点接收或传输的帧在响应字段中包含错误时,设置该位。该位在从设备发布的响应中传输后被清除。用于LIN的NI-CAN帧API本身不支持Response_Error状态位,但可为最终用户提供在应用程序层面轻松实现该功能的方法。该过程将记录总线错误属性设置为1,以启用在读取队列中记录总线错误帧。然后,应用程序可监控总线错误帧的读取,错误代码表示响应中的错误。在该条件下,应用程序可在局部变量中设置Response_Error状态位。应用程序可使用NI LIN响应入口帧类型,使用包含Response_Error状态位的数据更新从响应队列,然后清除局部变量中的该位。

LIN睡眠唤醒

LIN具有允许设备进入休眠状态并可能节省电能的机制。根据LIN 2.0规范,通过发送诊断主请求帧(ID=60),且第一个数据字节等于0,所有从设备可能被强制进入休眠模式。该特殊帧称为进入休眠命令。如果LIN处于非活动状态超过4秒,从设备将自动进入休眠模式。用于LIN的NI-CAN帧API允许用户在应用程序层根据需要将LIN接口置于休眠状态,从而提供了极大的灵活性。收到包含休眠请求消息的完整帧或指示4秒总线非活动状态的总线非活动帧时,用户可选择将LIN接口设置为休眠,方法是将LIN Sleep属性设置为TRUE。

LIN还提供唤醒总线上设备的机制。唤醒任务可由总线上的任何节点(从设备和主设备)启动。根据LIN 2.0规范,唤醒请求通过强制总线处于主导状态250 µs~5 ms发出。每个从设备应检测唤醒请求并在100 ms内准备好处理头信息。主节点还应检测唤醒请求,并在从节点就绪后(收到唤醒请求后100 ms至150 ms内)开始发送头信息。如果主设备在收到第一个唤醒请求后150毫秒内未发出头信息,则请求唤醒的从设备可尝试发出第二个唤醒请求(并等待另一个150毫秒)。如主方仍未响应,从方可发出唤醒请求并等待150 ms。如仍未响应,从设备必须等待1.5秒才能发出第四个唤醒请求。用于LIN的NI-CAN帧API允许根据LIN 2.0规范执行唤醒,无论LIN接口是作为主设备还是从设备运行。

高级类型

LIN 2.0规范进一步将LIN帧分为六种类型:

  1. 无条件
  2. 触发事件
  3. 零星
  4. 诊断
  5. 用户定义
  6. 预留

必须指出,这些帧类型的不同是由于传输方式的时间或数据字节的内容。无论帧分类如何,完整的LIN帧始终由主任务传输的报头和从任务传输的响应组成。用于LIN的NI-CAN帧API可满足处理每种LIN指定帧类型的需要。最常用的是无条件帧类型。无条件帧传输信号(数据),其标识符的范围为0至59。

事件触发帧类型在一个帧插槽时间内请求多个从设备的无条件帧响应,以节省总线带宽。

事件触发帧的ID可能位于0至59之间。每个可能响应事件触发头ID的从设备的第一个数据字节都加载了受保护的ID,如果主设备正在查询该保护ID的无条件帧,则主设备将响应该保护ID。事件触发帧的工作方式如下。主设备在报头中写入事件触发ID。如果数据已更新,从设备可能仅响应事件触发ID。

如只有一个从设备发布响应,主设备将接收到响应,并通过查看第一个数据字节,知道从设备(通过受保护的ID)接收到响应。如多个从设备发布响应,将产生冲突,主设备从设备任务将该冲突报告为总线错误。然后主设备使用无条件帧查询每个从设备的响应。 

零星帧尝试为LIN提供一些动态行为。它们总是传输信号(数据),ID的范围是0到59。仅当主任务知道帧内的数据值(信号)已更新时,才应在其帧插槽中发送零散帧的报头。该要求使主设备从设备任务成为零星帧响应的正常发布者。

诊断帧的长度始终为8个数据字节,且始终包含诊断或配置数据。主请求帧的ID为60,从响应帧的ID为61。ID为62的用户定义帧可携带任何类型的信息。预留帧ID为63,不能用于LIN 2.0集群。

推荐PC LIN接口

NI-XNET LIN

NI-XNET产品线包括了加速的CAN、LIN和FlexRay接口、优化的驱动、便捷的API以及配置和调试功能。用户可通过NI-XNET接口在NI LabVIEW、LabVIEW Real-Time及C/C++中简单快捷地开发应用程序,用于原型验证、仿真或测试CAN、LIN及FlexRay网络。

NI-XNET PCI/PXI和C系列LIN接口还具有集成的LDF支持、主任务的硬件定时调度以及帧和信号通信。 

图4:用于CAN、LIN和FlexRay的NI-XNET平台

NI USB LIN

NI-USB 8506

图5:NI USB-8506 LIN接口

也可使用USB LIN接口设备与LIN设备通信。这是一种与LIN网络进行通信的低成本移动解决方案。 

功能特点NI USB Lin支持
LIN 1.3
LIN 2.01
  增强型校验和
  现成从节点概念1
  NCF格式1
  诊断和从节点配置1
  字节数组
LIN 2.11
  新建从节点配置服务1
  从诊断I-III类1
  功能寻址1
  分辨率表1
保护ID(7:6)保护ID(5:0)
P(1)P(0)ID(5:0)
ID(1) ^ ID(3) ^ ID(4) ^ ID(5)ID(0) ^ ID(1) ^ ID(2) ^ ID(4)0–63