汽车LIN总线详解

news/2024/11/30 14:46:49/

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总线其成本优势也许会变得越来越小,但在出现替代方案前仍是车控总线方案的首选。


http://www.ppmy.cn/news/320795.html

相关文章

ToBeWritten之车辆通信

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

基于STM32芯片的四驱循迹小车

循迹小车包括三个基本模块: 1.宏定义模块 2.电机驱动模块 3.红外循迹模块 4.PWM调速模块 我将代码部分分为4个模块进行模块化编程:interface(各个引脚口的宏定义,方便记忆)、motor(电机驱动模块)、timer(定时器模块)、track(红外循迹模块) 一…

车载通信——诊断刷写

一.诊断刷写基础知识 UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通信协议。 诊断工具与车内的所有控制单元连接启用了UDS服务,使用OSI模型的第五层和第七层(会话层和应…

液晶手写板原理拆解_汽车抬头显示HUD的拆解

引言:在过往的几年里,我有两位好友都在创业做HUD,这也是汽车零部件里面一个时髦的创业方向。HUD(head up display抬头显示器)这种可以让驾驶员不用低头看仪表的方案,将重要信息在视线前方的挡风玻璃上面&am…

在基于瑞芯微rk3568的android12上添加移远4G通信模块EC200A

以下修改已在开发板中验证OK 【添加前的准备工作】 0.开发平台 CPU是rk3568,android12系统,北京讯为itop-3568开发板 1.解压开发包 sudo tar -xvf rk_android12.0_sdk_20220720.tar.gz 2.设置开发包权限 sudo chmod 777 rk_android12.0_sdk 3.设置…

车载毫米波雷达测试方法

车载毫米波雷达测试方法 文件摘录测试条件4.3 测试目标 性能测试5.1 探测范围5.2 探测速度范围5.3 多目标分辨能力 测试标准全文下载链接 2020年《车载毫米波雷达测试方法》规定了车载毫米波雷达测试的测试条件、性能测试、发射机测试和电气特性测试。适用于车载毫米波雷达测试…

2.4GHz射频前端集成芯片AT2401C介绍和引脚图片

简介 AT2401C 是一款面向 Zigbee,无线传感网络以及其他 2.4GHz 频段无线系统的全集成射频功能的射频前端单芯片。AT2401C 是采用CMOS 工艺实现的单芯片器件,其内部集成了功率放大器(PA),低噪声放大器(LNA),芯片收发开关控制…

HUD抬头显示

HUD抬头显示 基本方法: 1) 创建一个camera 2) 设置camera的投影矩阵为osg::Matrix::ortho2D(0,width,0,height) 3) 设置camera的坐标系为绝对坐标系 4) 设置camera的视图矩阵为单位矩阵 5) 设置…