1.LIN总线介绍
在汽车电子开发过程中,不可避免会用到LIN总线(Local Interconnect Network)。做为一个对CAN总线作为低成本辅助总线,LIN总线在车身控制中应用广泛,车门、车窗、车灯以及中控锁等都使用LIN线。其实对于不计成本新能源造车来说,完全可以使用CAN线更简单统一的实现这些功能,但限于汽车里零配件实在太多,要与传统车控ECU供应商兼容。也许有一天LIN线的价格优势不复存在,整车厂有足够多的其他诸如CAN、ETH零配件供应可选时,LIN真的要逐渐退出了。但在此之前,还是有必要总结下LIN的主要特点以及开发过程。
LIN线与CAN最大的区别主要有三点。
一,单线通信,传输速率较低。LIN线在物理上是一个上拉到12V的集电极开漏总线,多个节点可以并联到同一根线上,与IIC的SDA类似,但其没有独立的时钟线,靠通信双方约定的波特率进行通信,与UART类似,但由于UART之处在于,其可以通过同步场进行时钟同步,使传输变得更可靠。这样与CAN总线的一对差分双绞线不同,其抗干扰能力大大减弱,通信速率最高只能20Kbps,而CAN可达1Mbps。
二,主从结构,中心化拓扑。
LIN线拓扑结构是主从结构的星型模型,所有传输都是master发起,slave不可以主动发起请求。这个其实与modbus更类似。也可以把slave看做消息的发布者,master看成消息的订阅者,想要获取某个变量值,就需要不断轮询读应节点对应的报文。这个结构就决定了LIN线传输的消息不可能太多,以保证消息更新的实时性,通常一条LIN线上定义的消息要比一条CAN线上定义的消息少一个数量级。当然,如果中心节点出现了问题,整个网络也就挂掉了。
三,更轻量级的处理协议栈。
在汽车电子开发中,CAN总线协议栈占有相当大的代码量,包括CAN 驱动层、TP、NM、UDS、router、bootloader等等,但LIN开发量也会少一个数量级,包括驱动、调度表,简单的睡眠唤醒,简单的TP等,其上层的服务还是要转成CAN的信号进行传输。
2.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区分。
3.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文件来生成。
4.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还需要支持安全访问、程序下载、复位等服务。
5.LIN总线开发内容
(1)EE拓扑规划以及ldf文件的定义;
(2)根据ldf文件由专门的工具生成schedule tables,以及信号层;
(3)开发或集成LIN driver、LIN TP;
(4)开发相关LIN发送以及接收task,轮询各节点报文;
(5)接收上层控制信号对slave进行设置,接受slave信号的变化反馈给上层应用;
(6)对于诊断部分的处理;
(7)错误处理;
(8)LIN睡眠和唤醒的控制。
6.总结
随着新能源汽车电子技术的发展,以及新一代整车厂以及供应商体系的建立,相信会出现很多不一样的地方。尤其是互联网造车模式下,新型总线、协议会不断推陈出新,LIN总线其成本优势也许会变得越来越小,但在出现替代方案前仍是车控总线方案的首选。