一、LIN概述
LIN(Local Interconnect Network)总线是本地互联网络的简称,由LIN联盟公司提出的一种大量应用于汽车的串行通信协议。LIN总线主要应用于性能要求不高(最高速率20Kbps),成本敏感的场景。
LIN的应用框图如下:
典型的LIN总线拓扑,LIN主机和从机节点通过LIN收发器接入LIN总线进行通信,LIN总线为单根信号线。一个LIN网络最多可以连接16个节点。实际应用时LIN总线一般作为CAN总线的子总线来使用。
二、LIN接口信号
LIN主/从机节点接口信号定义类似串口。TXD/RXD信号经过收发器转换为满足协议电平标准的LIN信号。LIN逻辑0,称为显性电平(VOL《0.2VDD,VIL《0.4VDD),LIN逻辑 1,称为隐形电平(VOH》0.8VDD,VIH》0.6VDD)。一般地VDD为12V。
三、LIN总线帧格式
LIN总线帧由多个域组成:
间隔域:帧起始标志,14bit长度。由13bit显性电平和1bit隐性电平组成。该域是LIN帧结构中唯一不满足UART字节帧要求的域。
同步域:同步域为0x55。满足UART字节帧要求,先发1bit Start隐性电平,然后从低位开始发送0x55,再以Stop显性电平结束。总线上10bit,传输一字节信息。
保护标识域:Protected ID总共8bit(注:本文后续在描述各域位宽时均省去Start/Stop bit),其中6bit Identifier,2bit奇偶校验位组成{P[1:0],ID [5:0]}。Identifier ID[5:0]分为四类:0-59,信号承载帧;60-61,诊断帧;62,保留,用于用户自定义;63,保留,用于协议未来扩展。奇偶校验P[1:0]:P0=ID0⊕ID1⊕ID2⊕ID4,P1=~(ID1⊕ID3⊕ID4⊕ID5)。
数据域:一个LIN帧可以承载1到8字节数据。数据传输时,字节序为低字节先发
Checksum域:帧校验域。检验范围分两种情况:经典校验(LIN1.3),仅数据域进行校验校验;增强校验(LIN2.0),校验保护标识域和数据域。对于Identifier为60和61时(诊断帧),采用经典校验。Checksum计算方法:inverted eight bit sum with carry,对保护的字节按照字节依次进行加法运算,若某次计算和有进位,则取和的低8位加1继续计算加下一个保护字节,直到把所有保护字节都计算完成,再对最后的数据进行取反,既完成inverted eight bi sum with carry计算。举例:采用经典校验,假如帧中包含四字节数据:0xFF,0xAA,0x55,0x00。计算步骤如下:Step1,对前两个字节相加,0xFF+0xAA=0x1A9。Step2,有进位,取低8位加1,0xA9+1=0xAA。Step3,继续加下一个字节0x55,0xAA+0x55=0xFF。Step4,继续加下一个字节0x00,0xFF+0x00=0xFF。Step5,取反,~0xFF=0x0。
四、LIN总线帧类型
无条件帧:Identifier取值范围0~59,LIN协议中最常用的帧类型。无条件帧有三种应用:1)主机查询从机状态,主机发送帧头部分,从机发送响应部分。2)主机向从机发布信息,帧头/响应部分均为主机发送。3)从机间通信,主机发送帧头信息,从机1响应,从机2收听。
事件触发帧:时间触发帧的Identifier取值范围也是0~59,同无条件帧不同的是,事件触发帧的第一个数据字节与Identifier相同。因此事件触发帧最多仅能承载7字节的数据内容。事件触发帧主要用于不常发生的事件查询,比如查询汽车的四个车门开关状态。如果使用无条件帧即需要四个无条件帧,这样比较浪费带宽。采用事件触发帧广播式查询就能节省带宽,若无车门开关变化,则不进行响应。当同时有多个车门发生变化时,多个节点同时进行了响应,就会产生冲突。主机识别到冲突发生时,则会再使用四个无条件帧进行一次查询。
偶发帧:Identifier取值范围也是0~59。偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过预先设定的的优先级来仲裁。
诊断帧:诊断帧分为主请求帧(Identifier=60)和从响应帧(Identifier=61)。主要用来传输诊断信息和配置信息。
用户定义帧:Identifier为62。用户定制帧,可以承载各种类型信息。
保留帧:Identifier为63。未进行定义,未来扩展用。
五、代码应用
基于CH32V208芯片实现了LIN主从收发实验,无需外接收发器,芯片串口2进行LIN通信。两块板子分别下载主机和从机程序,TX、RX相互对接,同时上电。打印结果如下图:
源码(LIN_Host_Break.zip)可在以下链接下载:https://i.cnblogs.com/files