你,真的懂LIN总线吗?

编者荐语:

“汽车电子网络都在使用CAN总线,FlexRay,以太网,谁还研究LIN总线啊。”真是这样吗?可能你未必懂LIN总线。

以下文章来源于汽车控制与人工智能 ,作者Demu

汽车控制与人工智能

你,真的懂LIN总线吗?:原文配图 1

让人工智能更好地服务出行,智行天下

LIN总线

LIN ( Local InterconnectNetwork ) 总 线 , 是 基 于 UART/SCI ( Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用异步收发器/串行通信接口)的低成本串行通信协议。

你,真的懂LIN总线吗?:原文配图 2

相对于CAN总线而言,LIN总线协议较为简单,对单片机的要求也并不高,基本的串口就可以实现,因而成本较低。作为CAN总线的辅助总线,LIN总线广泛应用于车门、车窗、车灯以及中控锁等车身控制领域。

你,真的懂LIN总线吗?:原文配图 3

1998 的十月,在德国Baden Baden召开的汽车电子会议上LIN 总线的设想首次被提出;1999 LIN联盟成立(最初的成员有 奥迪, 宝马, 克莱斯勒, 摩托罗拉, 博世, 大众和沃尔沃);2000 LIN 联盟开始接收第一批成员;2001 第一辆使用 LIN 总线汽车下线;2002 LIN 规范V.1.3版本发布;2003 LIN 规范V.2.0 版本发布;2004 LIN 总线一致性测试规范发布;2006 LIN 标准规范 V.2.1版发布;2010 LIN 规范包Specification Package Revision 2.2A 发布。

你,真的懂LIN总线吗?:原文配图 4

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

你,真的懂LIN总线吗?:原文配图 5

LIN总线的特点

单主控器/多从设备模式无需仲裁机制低成本,基于通用UART 接口所有控制机都具备LIN 必需的硬件单信号线传输,同时保证信号传输的延迟时间LIN具有可预测的电磁兼容性能,为了限制EMC的强度,LIN协议规定最大传输速率为20kbps LIN总线提供信号的配置、处理、识别和诊断功能

你,真的懂LIN总线吗?:原文配图 6

LIN总线的特点

调度总线上帧的传输次序监测数据,处理错误作为标准时钟参考接收从机节点发出的总线唤醒命令从机任务不能直接向总线发送数据,需要接受到主节点发送的帧头后,根据帧头所包含的信息来判断

LIN报文帧结构

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

你,真的懂LIN总线吗?:原文配图 7

LIN报文的帧头和应答

帧头结构包括同步间隔场、同步场、PID场(受保护ID)场,应答部分包括数据场与效验和场。其

中“0”为显性电平、“1”为隐性电平,显隐性与CAN总线是相同的。在总线上实行“线-与”:当总线

有至少一个节点发送显性电平时,总线呈现显性电平;所有节点均发送隐性电平或者不发送信息

时,总线呈隐性电平,即显性电平起着主导作用。下面对帧头和应答的各部分进行详细说明。

你,真的懂LIN总线吗?:原文配图 8

LIN报文的结构

1.同步间隔段

要注意上图中,帧的所有间隙均为隐性电平“1”,总线空闲时也是保持隐性电平“1”的状态,并且帧

中的任何其它字段都不会发出大于9位的显性电平,所以同步间隔场由至少13位(通常选择13位或

14位)显性电平组成。所以我们可以得出结论,同步间隔场可以代表一帧的开始。另外,同步间隔

场的间隔符至少为1位隐性电平。

举个例子,如果同步间隔段我们规定13位显性电平表示,同步间隔段用1位隐性电平表示。那么帧头的同步

间隔段时间就是14*t,值得注意的是,14位的时间是由主机节点的位速率来确定的。

你,真的懂LIN总线吗?:原文配图 9

从机任务接收帧头的同步间隔段时,以该从机任务所在节点的位速率为准,当检测总线上出现持续

11位的显性电平时,认为是帧的开始。当从机节点使用精度较高的时钟时,识别阈值可以选择 9.5

位。

2.同步场

在介绍同步段之前,首先介绍一下字节域(Byte Field)的概念,字节域包括1位起始位(Start Bit,显

性) + 8位数据位 + 1位停止位(Stop Bit,隐性),可以简记为“显开隐走”,这是一种标准UART数据

传输格式。在 LIN 的一帧当中,除了同步间隔段,后面的各段都是通过字节域的格式传输的。在

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

Significant Bit,最高有效位)。LIN总线将下降沿作为判断标志,通过字节0x55(01010101b)进

行同步,在从机节点上可以采用非高精度时钟,如果带来偏差,可以通过同步场来调整。

你,真的懂LIN总线吗?:原文配图 10

从机节点可以不采用高精度的时钟,而采用片上振荡器等精度和成本相对较低的时钟,由此带来的与主机节点时钟产生的偏差,需要通过同步段进行调整,调整的结果是使从机节点数据的位速率与主机节点一致。同步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。通过计算,可以得到主机节点实际传输 1 位所用的时间,即位速率。

你,真的懂LIN总线吗?:原文配图 11

3.PID场

受保护的ID,其前6位为帧ID,加上两个奇偶效验码称作受保护的ID。帧ID的取值范围为

0x00~0x3F,共64个,帧ID标识了帧的类别,从机任务会根据帧头ID作出反应(接收/发送/忽略应

答),其中P0与P1效验如下:

你,真的懂LIN总线吗?:原文配图 12

其中“⊕”代表“异或”运算,“¬”代表“取非”运算。由公式可以看出,PID 不会出现全 0 或全 1 的情

况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断传输错误。LIN总线根据帧ID的不同,将

报文分为信号携带帧、诊断帧、保留帧。从机应答帧是一个完整的帧,与帧结构中的“应答”不同。

你,真的懂LIN总线吗?:原文配图 13

4.数据场

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

消息由诊断帧传递。LIN2.x规定可传输的LIN字节数为2,4,8,并不是1-8内任意一个数字。一般

而言,车内会选择统一字节数,最常用的是每帧传递8个字节。

你,真的懂LIN总线吗?:原文配图 14

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

ID提前设定。总线上的数据以广播形式发出,任何节点都可收到,但并非对每个节点有用。具体到发布与接听是

由哪个节点完成,这取决于应用层的配置。通常情况下,帧的应答,总线上只存在一个发布节点,

否则会出现错误。事件触发帧例外,它可能出现0,1和多个发布节点。

5.效验和场

你,真的懂LIN总线吗?:原文配图 15

效验和场是为了对帧传输内容进行效验。效验分为标准型效验与增强型效验。采用标准型还是增强

型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。

你,真的懂LIN总线吗?:原文配图 16

LIN总线波形

你,真的懂LIN总线吗?:原文配图 17
你,真的懂LIN总线吗?:原文配图 18

上图展示的是LIN总线的通讯方式,可以看出无论什么时候帧头都是由主机节点发布,当主机节点

要发布数据时,整个帧全部由主机节点发送。当从机节点要发布数据时,帧头部分由主机节点发

布,应答部分由从机节点发布,这样其余节点都能收到完整的报文。所以,LIN总线的通讯都是由

主机节点发起,只要合理的规定好每个节点的配置,这样就不会存在总线冲突的情况(事件触发帧冲

突时采用冲突解决进度表)。了解了帧的结构以后,我们就可以计算出帧在总线上的传输时间了。

你,真的懂LIN总线吗?:原文配图 19

LIN的帧类型

1.无条件帧

无条件帧是具有单一发布节点的,无论信号是否发生变化,帧头均会被无条件应答的帧。无条件帧

在主机任务分配给它的固定的帧时隙中传输。总线上一旦有帧头发送出去,必须有从机任务作应答

(即无条件发送应答),如下图所示。

你,真的懂LIN总线吗?:原文配图 20

帧 ID = 0x30 应答部分的发布节点为从机节点 1,收听节点为主机节点。典型应用如从机节点 1 向主机节点报告自身某信号的状态。

帧 ID = 0x31 应答部分的发布节点为主机节点,收听节点为从机节点 1 和从机节点 2。典型应用如主机节点向从机节点发布信息。

帧 ID = 0x32 应答部分的发布节点为从机节点 2,收听节点为从机节点 1。典型应用如从机节点之间彼此通信。

2.事件触发帧

事件触发帧是主机节点在一个帧间隙中查询各从机节点的信号是否发生变化时使用的帧。当存在多

个发布节点时,通过调度表解决冲突。

当从机节点信号发生变化的频率较低时,主机任务查询各个节点信息会占用一定的带宽。为了减小

带宽的占用,引入了事件触发帧的概念。其主要原理就是:当从机节点信息状态没有发生变化的时

候,从机节点可以不应答主机发出的帧头;当有多个节点信息同时发生变化的时候,同时应答事件

触发帧头会造成总线的冲突。当主机节点检测到冲突时,便会查询冲突解决进度表来依次向各个节

点发送无条件帧(无条件帧只有能1个节点应答)来确定从机节点的信息状态。

你,真的懂LIN总线吗?:原文配图 21

3.偶发帧

偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的

应答信号变化时,通过预先设定的的优先级来仲裁。与事件触发帧类似,偶发帧也定义了一组无条

件帧。规定偶发帧只有由主机节点发布。偶发帧的传输可能出现三种情况:

当关联的无条件帧没有信号发生变化,这是主机连帧头也不需要发送。

当关联的一个无条件帧信号发生变化则发送该帧。当有多个无条件帧发生信号变化时,则按照事先规定要的优先级依次发送。

你,真的懂LIN总线吗?:原文配图 22

4.诊断帧

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

分的发布节点为主机节点;从机应答帧ID=0x3D,应答部分的发布节点为从机节点。数据场规定为8

个字节,一律采用标准效验和。

5.保留帧

保留帧的ID=0x3E与0x3F,为将来扩张需求用。

LIN调度表

帧的调度表(或进度表)规定了总线上帧的传输次序以及传输时间。调度表位于主机节点,主机任

务根据应用程需要进行调度。调度表可以有多个,一般情况下,轮到某个调度表执行的时候,从该

调度表的入口处开始执行,到调度表的最后一个帧时,如果没有新的调度表启动则返回到当前调度表的第一个帧开始执行;也有可能在执行到某个调度表时发生中断,跳到另一个调度表后再返回,

如事件触发帧就是典型的例子。

你,真的懂LIN总线吗?:原文配图 23
你,真的懂LIN总线吗?:原文配图 24
你,真的懂LIN总线吗?:原文配图 25

状态机实现

1.主机状态机

你,真的懂LIN总线吗?:原文配图 26

2.从机状态机

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

理器。从机任务状态机中,检测同步间隔段和同步段序列,要求节点处于任何状态下都能识别出该

序列,包括已经检测到序列或进入帧处理的状态。帧处理包括接收并分析PID,接收数据,接收校

验和,发送数据和发送校验和,对接收到的受保护ID进行分析,按照事先的设计,选择是接收应答

部分,还是发送应答部分,或不接收也不发送。在五个子状态中,如果收到同步间隔段或同步段序

列,将重新跳到“接收并分析PID”的子状态,通信不停止,根据需要置位相应的错误标志。

你,真的懂LIN总线吗?:原文配图 27

完

推荐阅读

你,真的懂LIN总线吗?:原文配图 28

汽车ECU设计

你,真的懂LIN总线吗?:原文配图 29

一个菜鸟程序猿的成长之路。116篇原创内容

公众号

↙戳链接一秒找到我

有观点分享,请留言↘

← 返回文章列表