简介
本地互联网络 LIN(Local Interconnect Network)总线协议,是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用异步收发器/串行通信接口)的低成本串行通信协议。在车载电子系统中,相对于CAN总线而言,LIN总线协议较为简单,对单片机的要求也并不高,基本的串口就可以实现,成本较低,可作为CAN总线的辅助总线。LIN总线广泛应用于车门、车窗、车灯以及中控锁等车身控制领域。
表x LIN总线协议大事记
最新的标准:
ISO 17897-2016/2019
SAE J2602-1_202110: LIN Network for Vehicle Applications - SAE International
ISO 17987-1,Part1: General information and use case definition
ISO 17987-2,Part2: Transport protocol and network layer services
ISO 17987-3,Part3: Protocol specification
ISO 17987-4,Part4: Electrical Physical Layer (EPL) specification 12V/24V
ISO 17987-5,Part5: Application Programmers Interface (API)
ISO 17987-6,Part6: Protocol conformance test specification
ISO 17987-7,Part7: Electrical Physical Layer (EPL) conformance test specification
ISO 17987-8,Part 8: Electrical physical layer (EPL) specification: LIN over DC powerline (DC-LIN)
LIN总线有如下特点:
单主机同多从机通信,无需仲裁机制,所有通信过程由主机主导;
低成本,基于通用UART接口,几乎所有的微控制器都具备LIN必需的硬件;
单线信号传输,通信协议简单;
LIN具有可预测的电磁兼容性能,为了限制EMC的强度,LIN协议规定了最大传输速率为20kbps;
LIN总线提供信号的配置、处理、识别和诊断功能。
LIN总线在汽车中一般不独立存在,通常与上层CAN网络相连,形成CAN-LIN网关节点,通常汽车电子中整车厂会规定该“网关节点”的控制器归属。如图x所示。
图x CAN-LIN节点在CAN网络中的角色
LIN网络内部包括LIN Master Node(主机节点)和LIN Slave Node(从机节点),其中,主机节点可以运行一个主机任务和一个从机任务,而从机节点上仅能运行一个从机任务。整个网络中,必须包含一个主机节点,和最多15个从机节点。如图x所示。
图x LIN网络中的主机和从机
注意:LIN协议对任务进行建模,约定主机任务仅为发送帧首,从机节点处理应答数据(发送或接收)。所以,从机节点仅实现发送数据和接收数据的操作,故仅运行从机任务;主机节点的主机任务发送帧首后,还可交由主机节点的从机任务发送或者接收应答任务。其中,主机任务发送的帧ID,就包含了数据应由哪个节点发送上线、哪个节点捕获数据的约定。由此,还可以设想一种只有主机任务的主机节点,但此时意义不大,主机任务协调网络中的各节点,最终都是为了将本机的数据部署至网络节点或从网络节点中取数,如果将主机节点的主机任务同自己的从机任务分类,就需要这两个任务做好同步,如此,还不如放在同一个节点上方便管理。
LIN信号的物理层
LIN总线仅使用一根信号线,信号线上传输逻辑电平信号,其中“0”为显性电平、“1”为隐性电平(显隐性与CAN总线是相同的)。传输信号在总线上实行“线-与”:
当总线有至少一个节点发送显性电平时,总线呈现显性电平;
所有节点均发送隐性电平或者不发送信息时,总线呈隐性电平,即显性电平起着主导作用。
实际上,在使用LIN总线时,相对于微控制器上集成的LIN协议控制器(LIN通信引擎外设,例如LINFlexD),还需要搭配一个LIN收发器芯片,将LIN协议控制器的Tx和Rx信号,同LIN总线上的显性信号和隐形信号进行转换。如图x所示。
图x LIN协议控制器和和LIN收发器
LIN协议控制器
协议控制器主体是一个基于UART/SCI的通信控制器,以半双工方式工作。协议控制器既可以使用专用模块实现,也可以用“UART/SCI+定时器”实现:
发送数据时,LIN协议控制器把数据以UART的数据格式(8数据位,1停止位,无校验位)送往LIN总线收发器;
接收数据时,LIN总线收发器捕获来自总线的串行信号流(显性隐性数据),转换成UART的数据格式,送回LIN协议控制器。
LIN协议控制器需要产生和识别帧的同步间隔段。同步间隔段包含一段长度至少为13位的低电平,再加上一段长度至少为1位的高电平的同步间隔隔离段。产生和识别同步间隔段的机制,虽然增加了硬件设计的复杂度,但是从接收方的角度看,这样做能把同步间隔段与普通的数据字节区别开,确保了同步信息的准确性。
协议控制器需要能够发送和捕获唤醒信号:
协议控制器要能执行本地唤醒(Local Wakeup)。当需要唤醒总线时,协议控制器通过总线收发器向 LIN 总线送出唤醒信号。
协议控制器要能识别总线唤醒(Bus Wakeup)。当收到来自 LIN 总线的唤醒信号时,协议控制器能够正确动作,进入规定的通信状态。
LIN总线收发器
总线收发器的主体是一个双向工作的电平转换器,完成协议控制器的高-低电平与LIN总线的隐性-显性电平之间的转换。
LIN规范规定:LIN总线的电平,以总线收发器的供电作为参考电平。为了克服电源波动和参考点漂移的影响,LIN规范要求总线收发器要能承受±11.5%的电源波动和参考点电平波动,并且能承受电源和参考点之间8%的电位差波动。收发双方的电平鉴别门限也设置了较大的冗余度。
总线收发器还包括一些附加的功能,例如总线阻抗匹配、压摆率(Slew-rate)控制等。
此外,LIN规范要求总线收发器具备这样一种特性:本地节点掉电或工作异常时,不能影响总线上其他节点工作。
一个典型的总线收发器应用电路,如图x所示。
图x EVB-YTM32B1M-Q144开发板上的LIN收发器电路
LIN通信协议
LIN的主机和从机
LIN报文帧由帧头(Hearder)与应答(Response)两部分组成。如下图所示,传输过程中:
帧头总是由主机任务发出。帧头包括:一个帧间隔段、一个同步段,以及一个帧标识号
从机任务接收帧头,作出解析,决定:发送应答数据?接收来自主机或别的从机的应答数据?不回复?
图x LIN主机和从机的交互
注意,图x中描述的是主机任务和从机任务,而不是节点。通常情况下,从机节点中仅执行从机任务,根据主机任务发出的帧头做出响应,发送数据和接收数据。但主机节点是包含主机任务和从机任务,主机节点把发送帧头的工作归到主机任务上,把数据通信的工作归到从机任务上。即,当主机节点向从机节点送数时,先由主机节点的主机任务发出帧头,再由主机节点的从机任务送出数据;当主机节点从从机节点要数时,先由主机节点的主机任务发出帧头,再由主机节点的从机任务从总线上捕获数据。由此,也可以将主机任务别称为“帧头任务”,对应从机任务为“数据任务”。
LIN报文帧结构
LIN报文分为帧头和应答两个阶段,其中,由主机发送的帧头内部包含:同步间隔段、同步段和受保护ID段;主机发送或者从机发送的应答段内部包含:最多8个字节的数据段和校验和。
图x LIN通信帧结构
还需要注意的是,帧头和应答中间是允许有一定的时间间隔的,用于给从机任务捕获和解析帧头,并准备应答数据留足的时间。如图x所示。
图x LIN通信帧的响应延迟
在LINFlexD引擎中,还可以由软件配置从帧头结束到应答开始中间的间隔时间容限,判定超时事件。
同步间隔段(Break field)
注意 图x LIN通信帧结构 中,帧的所有间隙均为隐性电平“1”,总线空闲时,也是保持隐性电平“1”的状态,并且LIN通信帧中,除了同步间隔段外,任何其它字段都不会出现多于9位的显性电平。同步间隔段由至少13位(通常选择13位或14位)显性电平组成,用于将不同的通信帧相互分隔开来。同步间隔段就用来表示一帧的开始。另外,同步间隔段的间隔符(Break Delimiter) 至少为1位隐性电平。如图x所示。
图x 同步间隔段与同步间隔段隔离符
同步段(Sync field)
在介绍同步段之前,先介绍一下字节段结构(Byte Field Structure)的概念,字节段结构包括:1位起始位(Start Bit,显性)+ 8位数据位 + 1位停止位(Stop Bit,隐性),这是一种标准UART数据传输格式。在 LIN 的一帧当中,除了同步间隔段,后面的各段都是通过字节域的格式传输的。LIN 帧中的数据传输都是先发送LSB(Least Significant Bit,最低有效位),最后发送 MSB(Most Significant Bit,最高有效位)。LIN总线使用字节0x55(01010101b)进行同步,在从机节点上可以采用非高精度时钟,如果存在偏差,可以通过同步段来调整。同步段中的就是一个值为0x55的字节。
图x LIN通信帧中的同步段
受保护的帧ID(Protected Identifier field)
受保护的帧ID中包含两部分:6个比特的ID编号和2比特的奇偶校验位。
图x LIN通信帧中的PID段
其中,帧ID的取值范围为0x00~0x3F,共64个,帧ID标识了帧的类别,从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。其中,校验位P0和P1的计算方式如下:
P0 = ID0 xor ID1 xor ID2 xor ID4 P1 = not ( ID1 xor ID3 xor ID4 xor ID5 )
特别注意,LIN总线的ID同CAN总线相似,标识的是消息的类型,并不是从机节点的地址(例如I2C总线)。LIN总线根据帧ID的不同,将报文分为信号携带帧、诊断帧、保留帧。此为应用层的约定,此处暂不展开。
应答数据段(Data field)
数据段包含1-8个字节。LIN2.x规定,可传输的LIN字节数为2,4,8,并不是1-8内任意一个数字。一般而言,车内会选择统一字节数,最常用的是每帧传递8个字节。
图x LIN通信帧中的数据段
与CAN总线(包括DLC字段)不同,LIN协议中并没有规定数据长度的信息,数据内容和长度均由应用系统的设计者根据帧ID提前设计。总线上的数据以广播形式发出,任何节点都可收到,但并非对每个节点有用。具体到发布与接听是由哪个节点完成,这取决于应用层的配置。通常情况下,帧的应答,总线上只存在一个发布节点,否则会出现错误。(事件触发帧例外,它可能出现0,1和多个发布节点。)
校验和段(Checksum field)
效验和段是为了对帧传输的内容进行效验。校验和段的1个字节的值,是将本帧数据段和PID段的值按照8位求和,再取反得到的。
效验分为标准型效验与增强型效验:
经典款校验和(Classical Checksum)仅计算数据段的部分,适用于LIN v1.3及更早期的版本。
增强型校验和(Enhanced Checksum)计算数据段和PID部分,适用于LIN v2.0及以后的版本。
采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。
在YTM32B1ME微控制器的手册中描述LINFlexD发送帧头时,可以在寄存器LINFlexD_BIDR[CCS]中选择,将发送或者检测增强型校验和还是经典款校验和。
LIN总线的波形
图x LIN总线上的波形
上图展示了LIN总线的通讯方式,可以看出,无论什么时候帧头都是由主机节点发布,当主机节点要发布数据时,整个帧全部由主机节点发送。当从机节点要发布数据时,帧头部分由主机节点发布,应答部分由从机节点发布,这样,其余节点都能收到完整的报文。所以,LIN总线的通讯都是由主机节点发起,只要合理的规定好每个节点的配置,这样就不会存在总线冲突的情况(事件触发帧冲突时采用冲突解决进度表)。