汽车LIN总线详解

文章来源:汽车电子与软件 发布时间:2021-12-03
分享到
LIN总线是针对汽车分布式电子系统而定义的一种低成本的串行通讯网络,是对控制器区域网络(CAN)等其它汽车多路网络的一种补充,适用于对网络的带宽、性能或容错功能没有过高要求的应用。

图片


01 LIN总线介绍


LIN总线是针对汽车分布式电子系统而定义的一种低成本的串行通讯网络,是对控制器区域网络(CAN)等其它汽车多路网络的一种补充,适用于对网络的带宽、性能或容错功能没有过高要求的应用。LIN总线是基于SCI(UART)数据格式,采用单主控制器/多从设备的模式,是UART中的一种特殊情况。


也许有一天LIN线的价格优势不复存在,整车厂有足够多的其他诸如CAN、ETH零配件供应可选时,LIN真的要逐渐退出了。但在此之前,还是有必要总结下LIN的主要特点以及开发过程。


LIN线与CAN最大的区别主要有三点。


1 单线通信,传输速率较低。


LIN线在物理上是一个上拉到12V的集电极开漏总线,多个节点可以并联到同一根线上,与IIC的SDA类似,但其没有独立的时钟线,靠通信双方约定的波特率进行通信,与UART类似,但由于UART之处在于,其可以通过同步场进行时钟同步,使传输变得更可靠。这样与CAN总线的一对差分双绞线不同,其抗干扰能力大大减弱,通信速率最高只能20Kbps,而CAN可达1Mbps。


2 主从结构,中心化拓扑。


LIN线拓扑结构是主从结构的星型模型,所有传输都是master发起,slave不可以主动发起请求。这个其实与modbus更类似。也可以把slave看做消息的发布者,master看成消息的订阅者,想要获取某个变量值,就需要不断问询对应节点对应的报文。这个结构就决定了LIN线传输的消息不可能太多,以保证消息更新的实时性,通常一条LIN线上定义的消息要比一条CAN线上定义的消息少一个数量级。当然,如果中心节点出现了问题,整个网络也就挂掉了。


3 更轻量级的处理协议栈。


在汽车电子开发中,CAN总线协议栈占有相当大的代码量,包括CAN 驱动层、TP、NM、UDS、router、bootloader等等,但LIN开发量也会少一个数量级,包括驱动、调度表,简单的睡眠唤醒,简单的TP等,其上层的服务还是要转成CAN的信号进行传输。

 

02 LIN总线数据帧格式


图片


LIN总线的帧格式如上图所示。如果你在学习LIN协议,用示波器抓出一帧报文进行分析可能是最好的切入点。可以看出,一个典型的LIN数据帧主要包含header、header response以及response域。LIN一帧数据最大可以传8bytes,比较有意思的一点是,LIN2.x规定可以传输的LIN字节数可选是2,4,8并不是1-8内任意一个数字。一般而言,车内会选择一个统一字节数,最常用比如每帧都传8个字节。


Header场中包含break,synch以及受保护的id。其实break就是告诉总线传输开始,然后用synch同步始终,然后使用受保护id来寻址,如果有LIN slave节点可以提供这个id的服务,那在master发出protected id后,就他就会插入一个应答,与IIC从机在sda上给出类似应答类似。值得注意的是,这个protected id并不是slave从机地址,而是想要订阅的报文id,换个说法,一个slave从机可以提供多个报文id的服务,比如一个车灯控制ECU,可以提供灯控制、状态、故障码、软硬件版本信息等多个LIN ID服务。而slave从机地址是隐性的与其所提供的报文ID是有个对应关系的。


与CAN总线的CRC校验不同,LIN的提供奇偶校验以及checksum方式,对header中的protected id进行奇偶校验,也会对data进行checksum校验,有classic以及enhanced区分。

 

03 LIN总线传输调度


LIN总线的主从结构决定了master节点要周期性的去slave读取数据,也可以去设置一个报文。一条LIN总线上有多个slave节点,每个slave要发布多个ID报文时,就需要master在兼顾实时行的条件下,顺序的读取或者设置每个slave的每个ID报文。对于每个slave可以提供哪些报文,有ldf文件统一描述,与CAN的dbc文件不同。Ldf文件全称为LIN Configuration Description File,描述了一条LIN bus完整的主从节点信息,以及报文格式,调度信息。根据ldf文件可以得到schedule tables,这个调度表给master设置了读取slave节点报文id的时间间隔,比如10ms,100ms。这个调度表可以由专门的生成工具由ldf文件来生成。 


04 LIN总线诊断


在整个汽车网络中,目前最复杂的就是CAN诊断部分,LIN诊断可以说只是一个补充,LIN支持使用0x3C(master request frame)以及0x3D(slave response frame)两个报文进行对LIN slave的诊断,其帧格式(报文内8 bytes的数据)如下所示:


图片


其中NAD为address of the slave node,表明是要诊断哪一个ECU; PCI为Protocol Control Information,表明该报文代表是一个什么样的诊断保文; SID 为Service Identifier,表明该报文对应的服务是什么;其他为数据长度以及数据分片。


LIN总线的诊断与CAN诊断各个服务保持一致,但不需要支持那么多服务,一般而言只需要支持比如通信控制、读取DID、读取DTC等服务即可,少数可以进行固件升级的LIN ECU还需要支持安全访问、程序下载、复位等服务。


05 LIN总线开发内容


(1)EE拓扑规划以及ldf文件的定义;


(2)根据ldf文件由专门的工具生成schedule tables,以及信号层;


(3)开发或集成LIN driver、LIN TP;


(4)开发相关LIN发送以及接收task,轮询各节点报文;


(5)接收上层控制信号对slave进行设置,接受slave信号的变化反馈给上层应用;


(6)对于诊断部分的处理;


(7)错误处理;


(8)LIN睡眠和唤醒的控制。


06 总结


随着新能源汽车电子技术的发展,以及新一代整车厂以及供应商体系的建立,相信会出现很多不一样的地方。尤其是互联网造车模式下,新型总线、协议会不断推陈出新,LIN总线其成本优势也许会变得越来越小,但在出现替代方案前仍是车控总线方案的首选。


收藏
赞一下
0