一文看懂LIN总线
一文看懂LIN总线
LIN总线(Local Interconnect Network)是一种基于UART/SCI的低成本串行通信协议,在汽车电子网络中扮演着重要角色。本文将详细介绍LIN总线的定义、特点、任务、报文帧结构、帧类型、调度表以及硬件实现等内容,帮助读者全面了解这一技术。
什么是LIN总线?
LIN(Local Interconnect Network)总线,是基于UART/SCI(通用异步收发器/串行通信接口)的低成本串行通信协议。相对于CAN总线而言,LIN总线协议较为简单,对单片机的要求也并不高,基本的串口就可以实现,因而成本较低。作为CAN总线的辅助总线,LIN总线广泛应用于车门、车窗、车灯以及中控锁等车身控制领域。
LIN总线的发展历程如下:
- 1998年10月:LIN总线的设想首次在德国Baden Baden的汽车电子会议上提出
- 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总线具有以下特点:
- 单主控器/多从设备模式,无需仲裁机制
- 低成本,基于通用UART接口,所有控制器都具备LIN必需的硬件
- 单信号线传输,同时保证信号传输的延迟时间
- LIN具有可预测的电磁兼容性能,最大传输速率为20kbps
- 提供信号的配置、处理、识别和诊断功能
LIN总线的任务
LIN总线主要负责以下任务:
- 调度总线上帧的传输次序
- 监测数据,处理错误
- 作为标准时钟参考
- 接收从机节点发出的总线唤醒命令
- 从机任务不能直接向总线发送数据,需要接受到主节点发送的帧头后,根据帧头所包含的信息来判断
LIN报文帧结构
LIN报文帧由帧头(Hearder)与应答(Response)两部分组成。主机节点负责发送帧头;从机节点负责接收帧头,然后作出解析决定发送应答,还是接收应答或不回复。帧头结构包括同步间隔场、同步场、PID场(受保护ID)场,应答部分包括数据场与效验和场。
同步间隔段
帧的所有间隙均为隐性电平“1”,总线空闲时也是保持隐性电平“1”的状态,并且帧中的任何其它字段都不会发出大于9位的显性电平,所以同步间隔场由至少13位(通常选择13位或14位)显性电平组成。同步间隔场可以代表一帧的开始。另外,同步间隔场的间隔符至少为1位隐性电平。
同步场
在LIN的一帧当中,除了同步间隔段,后面的各段都是通过字节域的格式传输的。LIN总线将下降沿作为判断标志,通过字节0x55(01010101b)进行同步。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。
PID场
受保护的ID,其前6位为帧ID,加上两个奇偶效验码称作受保护的ID。帧ID的取值范围为0x00~0x3F,共64个,帧ID标识了帧的类别。PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断传输错误。
数据场
数据场包含1-8个字节,可以分为两种数据类型,信号和诊断消息。LIN2.x规定可传输的LIN字节数为2,4,8,并不是1-8内任意一个数字。一般而言,车内会选择统一字节数,最常用的是每帧传递8个字节。
效验和场
效验和场是为了对帧传输内容进行效验。效验分为标准型效验与增强型效验。采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。
LIN的帧类型
无条件帧:具有单一发布节点,无论信号是否发生变化,帧头均会被无条件应答的帧。总线上一旦有帧头发送出去,必须有从机任务作应答。
事件触发帧:主机节点在一个帧间隙中查询各从机节点的信号是否发生变化时使用的帧。当存在多个发布节点时,通过调度表解决冲突。
偶发帧:主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过预先设定的的优先级来仲裁。
诊断帧:包括主机请求帧和从机应答帧,主要用于配置、识别和诊断。
保留帧:保留帧的ID=0x3E与0x3F,为将来扩张需求用。
调度表
帧的调度表(或进度表)规定了总线上帧的传输次序以及传输时间。调度表位于主机节点,主机任务根据应用程需要进行调度。调度表可以有多个,一般情况下,轮到某个调度表执行的时候,从该调度表的入口处开始执行,到调度表的最后一个帧时,如果没有新的调度表启动则返回到当前调度表的第一个帧开始执行;也有可能在执行到某个调度表时发生中断,跳到另一个调度表后再返回,如事件触发帧就是典型的例子。
状态机的实现
主机状态机
从机状态机
从机任务负责发布或者接听帧的应答状态,包括连两个状态机:同步间隔段与同步段检查器、帧处理器。从机任务状态机中,检测同步间隔段和同步段序列,要求节点处于任何状态下都能识别出该序列,包括已经检测到序列或进入帧处理的状态。帧处理包括接收并分析PID,接收数据,接收校验和,发送数据和发送校验和,对接收到的受保护ID进行分析,按照事先的设计,选择是接收应答部分,还是发送应答部分,或不接收也不发送。在五个子状态中,如果收到同步间隔段或同步段序列,将重新跳到“接收并分析PID”的子状态,通信不停止,根据需要置位相应的错误标志。
硬件实现
收发 LIN 帧需要的硬件包括协议控制器(Protocol Controller)、总线收发器(Bus Transceiver)和 LIN 总线三部分。
协议控制器
协议控制器主体是一个基于UART/SCI的通信控制器,工作方式是半双工。协议控制器既可以使用专用模块实现,也可以用“UART/SCI+定时器”实现。
发送时,协议控制器把二进制并行数据转变成高-低电平信号,并按照规定的串行格式(8数据位,1停止位,无校验位)送往总线收发器;
接收时,协议控制器把来自总线收发器的高-低电平信号按照同样的串行格式储存下来,然后再将储存结果转换成二进制并行数据。
协议控制器要能产生和识别帧的同步间隔段。同步间隔段包含一个低电平脉冲,长度至少为 13位。发出和识别同步间隔段虽然增加了硬件设计的复杂度,但是从接收方的角度看,这样做能把同步间隔段与普通的数据字节区别开,确保了同步信息的特殊性。
协议控制器要能执行本地唤醒(Local Wakeup)。需要唤醒总线时,协议控制器通过总线收发器向 LIN 总线送出唤醒信号。协议控制器要能识别总线唤醒(Bus Wakeup)。当收到来自 LIN 总线的唤醒信号时,协议控制器能够正确动作,进入规定的通信状态。
总线收发器
总线收发器的主体是一个双向工作的电平转换器,完成协议控制器的高-低电平与LIN总线的隐性-显性电平之间的转换。
LIN规范规定:LIN总线的电平参考点是总线收发器的电源参考点。为了克服电源波动和参考点漂移的影响,LIN规范要求总线收发器要能承受±11.5%的电源波动和参考点电平波动,并且能承受电源和参考点之间8%的电位差波动。收发双方的电平鉴别门限也设置了较大的冗余度。
总线收发器还包括一些附加的功能,例如总线阻抗匹配、压摆率(Slew-rate)控制等。
此外,LIN规范要求总线收发器具备这样一种特性:本地节点掉电或工作异常时,不能影响总线上其他节点工作。