LIN介绍
LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI,通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办公设备等多种领域。
作为一个低成本的辅助总线,LIN总线在汽车电子中应用广泛,车门、车窗、车灯以及中控锁等低速应用都使用LIN总线。其实如果在新能源汽车中,CAN实现这些功能会更简单,但限于汽车里的配件太多,在制作时要与各个配件的供应商来进行兼容,其中包括因为考虑成本使用LIN的低速配件供应商。现在LIN的使用还是挺广泛的,有必要学习一下。
LIN的特点
- 串行通信
- 单线传输,总线电压为12V
- 线间的干扰比较小,节省线的资源,传输距离长(不超过40米)
- 最高速率20Kbit/s
- 满足汽车上大多数低速应用的要求
- 单主多从结构
- 不存在冲突,不需要仲裁
- 成本低
- 几乎所有MCU都具有LIN总线的硬件基础
- 相对于CAN可以大幅度消减成本
- 利用报头里的同步场来实现同步,无需时钟线,大幅度降低成本
- 信号传输延迟可计算
- 传输具有确定性,传播时间可以提前计算
- EMC(电磁兼容性)性能可预测
- 为了增强EMC,LIN协议限制传输速率最大为20Kbit/s
- LIN 提供信号处理、配置、识别和诊断四项功能
LIN与CAN的区别
-
单线传输,传输速率低
LIN总线在物理上是一个上拉带12V的集电极开漏总线,多个节点可以并联到一个主节点上。它与IIC的SDA线类似,但是不需要SCL时钟线,LIN靠主机从机双方约定的波特率来进行通信,类似于UART。与串口不同的是,它是通过同步场来进行同步,传输更加可靠。相对于CAN的双绞线结构来说,LIN一条线的抗干扰能力较弱,为了增强EMC电磁兼容性能,将通信速率限制在20Kbit/s。
-
单主多从结构
LIN总线的结构是主从结构的星型模型,所有的从机都连接到一个主机上。传输只能由主机发起,从机不能主动发起请求。可以把从机看做消息的发布者,主机看做消息的订阅者,要想获得一个消息(某个变量的值),主机必须不断的去读对应的报文。这个结构就决定了LIN总线只能传输少量的消息,来保证消息更新的实时性。
-
轻量的处理协议栈
在CAN总线的传输协议栈中,占有相当大的代码量,包括CAN的驱动层、TP、UDS等;LIN不需要这么复杂,只有简单的驱动、调度表、睡眠唤醒等,所以代码量少了一个数量级,但是在LIN的上层服务中还是要转换成CAN信号来进行传输,所以最后LIN还是要回归CAN信号。
网络拓扑结构
LIN总线是单主多从的星型结构,LIN总线一般不单独存在,主机经常与上层网络(如CAN)相连。
一个节点不一定对应一个ECU,因为一个ECU上面可能提供多个LIN接口
LIN协议
传输规则
帧主要包含帧头和应答两部分
- 主机任务负责发送帧头
- 从机任务收到帧头之后进行解析,然后决定是发送应答,还是接收应答,还是不作反应
帧的整体结构
帧头包括同步间隔段、同步段和受保护ID段(PID),由主机节点发送
应答包括数据段和校验和段,由从机节点发送
0
为显性电平,1
为隐性电平
同步间隔段
同步间隔段由同步间隔和同步间隔段间隔符组成
- 同步间隔段表示一帧的开始
- 同步间隔段至少有13个显性位,间隔符至少有一个隐形位
- 同步间隔段不遵循字节域格式,其它段都遵循
- 从节点开始连续监测到至少11个显性位才认为是间隔信号
同步段
字节域:标准的UART数据传输格式
字节域包括1位起始位(显性)+8位数据位+1位停止位(隐性)
- 数据传输都是先发送LSB,最后发送MSB
- 这里确保所有从机节点都和主机节点波特率相同发送和接收数据
- 同步段固定一个字节,值固定为0x55
受保护ID段(PID)
受保护ID段由6位帧ID和2位奇偶校验位组成
PID并不是从机节点地址,而是想要订阅的报文ID。一个从机节点可以提供多个报文ID的服务,比如一个车灯控制ECU,可以提供灯控制、状态、故障码等多个LIN的ID服务,而从机节点地址是隐性的与其所提供的报文ID有对应关系的。
帧ID范围为0x00~0x3F共64个
这里因为数据发送先发送LSB,所以先发送奇偶检验位的P1,发送的时候帧ID上面的位被2个奇偶检验位占据,所以ID就相当于整个帧的低6位而不是高6位
校验公式如下,其中“⊕”代表“异或”运算, “¬”代表“取非”运算。
P0 = ID0⊕ID1⊕ID2⊕ID4
P1 = ¬(ID1⊕ID3⊕ID4⊕ID5)
由公式可以看出, PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断为传输错误。
帧的类型
数据段
节点发送的数据位于数据段,最高8个字节,先发送编号最低的DATA1,依次增加发送。
LIN一帧数据最大传输8个字节。在LUN2.x中规定,LIN可以传输的字节数可以是2,4,8而并不是1-8内任意一个数字。一般而言,车内会选择一个统一字节数,最常用的比如每帧都传8个字节
数据段包含了两种数据类型,信号或诊断消息
当帧ID类型为信号携带帧,数据段存储的是信号,一个帧ID对应一个或多个信号
当帧ID类型为诊断帧时,数据段存储的是诊断消息
校验和段
校验和段是对帧中所传输的内容进行校验。
校验和分为标准型校验和和增强型检验和
- 标准型校验和:诊断帧采用
- 增强型检验和:除了诊断帧其余的帧
- 一个字节
采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧 ID 来判断采用哪种校验和。
校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于 256 时就减去 255),并将所得最终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为 0xFF,则校验和无误,这在一定程度上保证了数据传输的正确性。
例子
采用标准型校验和, Data1 = 0x4A, Data2 = 0x55, Data3 = 0x93, Data4 = 0xE5,计算方法如表 3.3所示: