汽车电子系统总线LIN通信协议精要

2023-09-21 14:31:04

汽车电子系统总线LIN通信协议精要

简介

本地互联网络 LIN(Local Interconnect Network)总线协议,是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用异步收发器/串行通信接口)的低成本串行通信协议。在车载电子系统中,相对于CAN总线而言,LIN总线协议较为简单,对单片机的要求也并不高,基本的串口就可以实现,成本较低,可作为CAN总线的辅助总线。LIN总线广泛应用于车门、车窗、车灯以及中控锁等车身控制领域。

表x LIN总线协议大事记
时间事件
1998年10月在德国 Baden Baden 召开的汽车电子会议上,LIN 总线的设想首次被提出。
1999年LIN 联盟成立。最初的成员有:奥迪、宝马、克莱斯勒、摩托罗拉、博世、大众和沃尔沃。
2000年LIN 联盟开始接收第一批成员。
2001年第一辆使用 LIN 总线汽车下线。
2002年LIN 规范 V.1.3 版本发布。
2003年LIN 规范 V.2.0 版本发布。
2004年LIN 总线一致性测试规范发布。
2006年LIN 标准规范 V.2.1 版发布。
2010年LIN 规范包Specification Package Revision 2.2A 发布。

最新的标准:

  • ISO 17897-2016/2019
  • SAE J2602-1_202110: LIN Network for Vehicle Applications - SAE International
    • ISO 17987-1,Part1: General information and use case definition
    • ISO 17987-2,Part2: Transport protocol and network layer services
    • ISO 17987-3,Part3: Protocol specification
    • ISO 17987-4,Part4: Electrical Physical Layer (EPL) specification 12V/24V
    • ISO 17987-5,Part5: Application Programmers Interface (API)
    • ISO 17987-6,Part6: Protocol conformance test specification
    • ISO 17987-7,Part7: Electrical Physical Layer (EPL) conformance test specification
    • ISO 17987-8,Part 8: Electrical physical layer (EPL) specification: LIN over DC powerline (DC-LIN)

LIN总线有如下特点:

  1. 单主机同多从机通信,无需仲裁机制,所有通信过程由主机主导;
  2. 低成本,基于通用UART接口,几乎所有的微控制器都具备LIN必需的硬件;
  3. 单线信号传输,通信协议简单;
  4. LIN具有可预测的电磁兼容性能,为了限制EMC的强度,LIN协议规定了最大传输速率为20kbps;
  5. LIN总线提供信号的配置、处理、识别和诊断功能。

LIN总线在汽车中一般不独立存在,通常与上层CAN网络相连,形成CAN-LIN网关节点,通常汽车电子中整车厂会规定该“网关节点”的控制器归属。如图x所示。
在这里插入图片描述

图x CAN-LIN节点在CAN网络中的角色

LIN网络内部包括LIN Master Node(主机节点)和LIN Slave Node(从机节点),其中,主机节点可以运行一个主机任务和一个从机任务,而从机节点上仅能运行一个从机任务。整个网络中,必须包含一个主机节点,和最多15个从机节点。如图x所示。

在这里插入图片描述

图x LIN网络中的主机和从机

注意:LIN协议对任务进行建模,约定主机任务仅为发送帧首,从机节点处理应答数据(发送或接收)。所以,从机节点仅实现发送数据和接收数据的操作,故仅运行从机任务;主机节点的主机任务发送帧首后,还可交由主机节点的从机任务发送或者接收应答任务。其中,主机任务发送的帧ID,就包含了数据应由哪个节点发送上线、哪个节点捕获数据的约定。由此,还可以设想一种只有主机任务的主机节点,但此时意义不大,主机任务协调网络中的各节点,最终都是为了将本机的数据部署至网络节点或从网络节点中取数,如果将主机节点的主机任务同自己的从机任务分类,就需要这两个任务做好同步,如此,还不如放在同一个节点上方便管理。

LIN信号的物理层

LIN总线仅使用一根信号线,信号线上传输逻辑电平信号,其中“0”为显性电平、“1”为隐性电平(显隐性与CAN总线是相同的)。传输信号在总线上实行“线-与”:

  • 当总线有至少一个节点发送显性电平时,总线呈现显性电平;
  • 所有节点均发送隐性电平或者不发送信息时,总线呈隐性电平,即显性电平起着主导作用。

实际上,在使用LIN总线时,相对于微控制器上集成的LIN协议控制器(LIN通信引擎外设,例如LINFlexD),还需要搭配一个LIN收发器芯片,将LIN协议控制器的Tx和Rx信号,同LIN总线上的显性信号和隐形信号进行转换。如图x所示。

在这里插入图片描述

图x LIN协议控制器和和LIN收发器
### LIN协议控制器

协议控制器主体是一个基于UART/SCI的通信控制器,以半双工方式工作。协议控制器既可以使用专用模块实现,也可以用“UART/SCI+定时器”实现:

  • 发送数据时,LIN协议控制器把数据以UART的数据格式(8数据位,1停止位,无校验位)送往LIN总线收发器;
  • 接收数据时,LIN总线收发器捕获来自总线的串行信号流(显性隐性数据),转换成UART的数据格式,送回LIN协议控制器。

LIN协议控制器需要产生和识别帧的同步间隔段。同步间隔段包含一段长度至少为13位的低电平,再加上一段长度至少为1位的高电平的同步间隔隔离段。产生和识别同步间隔段的机制,虽然增加了硬件设计的复杂度,但是从接收方的角度看,这样做能把同步间隔段与普通的数据字节区别开,确保了同步信息的准确性。

协议控制器需要能够发送和捕获唤醒信号:

  • 协议控制器要能执行本地唤醒(Local Wakeup)。当需要唤醒总线时,协议控制器通过总线收发器向 LIN 总线送出唤醒信号。
  • 协议控制器要能识别总线唤醒(Bus Wakeup)。当收到来自 LIN 总线的唤醒信号时,协议控制器能够正确动作,进入规定的通信状态。

LIN总线收发器

总线收发器的主体是一个双向工作的电平转换器,完成协议控制器的高-低电平与LIN总线的隐性-显性电平之间的转换。

LIN规范规定:LIN总线的电平,以总线收发器的供电作为参考电平。为了克服电源波动和参考点漂移的影响,LIN规范要求总线收发器要能承受±11.5%的电源波动和参考点电平波动,并且能承受电源和参考点之间8%的电位差波动。收发双方的电平鉴别门限也设置了较大的冗余度。

总线收发器还包括一些附加的功能,例如总线阻抗匹配、压摆率(Slew-rate)控制等。

此外,LIN规范要求总线收发器具备这样一种特性:本地节点掉电或工作异常时,不能影响总线上其他节点工作。

一个典型的总线收发器应用电路,如图x所示。

在这里插入图片描述

图x EVB-YTM32B1M-Q144开发板上的LIN收发器电路

LIN通信协议

LIN的主机和从机

LIN报文帧由帧头(Hearder)与应答(Response)两部分组成。如下图所示,传输过程中:

  • 帧头总是由主机任务发出。帧头包括:一个帧间隔段、一个同步段,以及一个帧标识号
  • 从机任务接收帧头,作出解析,决定:发送应答数据?接收来自主机或别的从机的应答数据?不回复?
    在这里插入图片描述
图x LIN主机和从机的交互

注意,图x中描述的是主机任务和从机任务,而不是节点。通常情况下,从机节点中仅执行从机任务,根据主机任务发出的帧头做出响应,发送数据和接收数据。但主机节点是包含主机任务和从机任务,主机节点把发送帧头的工作归到主机任务上,把数据通信的工作归到从机任务上。即,当主机节点向从机节点送数时,先由主机节点的主机任务发出帧头,再由主机节点的从机任务送出数据;当主机节点从从机节点要数时,先由主机节点的主机任务发出帧头,再由主机节点的从机任务从总线上捕获数据。由此,也可以将主机任务别称为“帧头任务”,对应从机任务为“数据任务”。

LIN报文帧结构

LIN报文分为帧头和应答两个阶段,其中,由主机发送的帧头内部包含:同步间隔段、同步段和受保护ID段;主机发送或者从机发送的应答段内部包含:最多8个字节的数据段和校验和。
在这里插入图片描述

图x LIN通信帧结构

还需要注意的是,帧头和应答中间是允许有一定的时间间隔的,用于给从机任务捕获和解析帧头,并准备应答数据留足的时间。如图x所示。
在这里插入图片描述

图x LIN通信帧的响应延迟

在LINFlexD引擎中,还可以由软件配置从帧头结束到应答开始中间的间隔时间容限,判定超时事件。

同步间隔段(Break field)

注意 图x LIN通信帧结构 中,帧的所有间隙均为隐性电平“1”,总线空闲时,也是保持隐性电平“1”的状态,并且LIN通信帧中,除了同步间隔段外,任何其它字段都不会出现多于9位的显性电平。同步间隔段由至少13位(通常选择13位或14位)显性电平组成,用于将不同的通信帧相互分隔开来。同步间隔段就用来表示一帧的开始。另外,同步间隔段的间隔符(Break Delimiter) 至少为1位隐性电平。如图x所示。

在这里插入图片描述

图x 同步间隔段与同步间隔段隔离符
同步段(Sync field)

在介绍同步段之前,先介绍一下字节段结构(Byte Field Structure)的概念,字节段结构包括:1位起始位(Start Bit,显性)+ 8位数据位 + 1位停止位(Stop Bit,隐性),这是一种标准UART数据传输格式。在 LIN 的一帧当中,除了同步间隔段,后面的各段都是通过字节域的格式传输的。 LIN 帧中的数据传输都是先发送LSB(Least Significant Bit,最低有效位),最后发送 MSB(Most Significant Bit,最高有效位)。LIN总线使用字节0x55(01010101b)进行同步,在从机节点上可以采用非高精度时钟,如果存在偏差,可以通过同步段来调整。同步段中的就是一个值为0x55的字节。
在这里插入图片描述

图x LIN通信帧中的同步段
受保护的帧ID(Protected Identifier field)

受保护的帧ID中包含两部分:6个比特的ID编号和2比特的奇偶校验位。
在这里插入图片描述

图x LIN通信帧中的PID段

其中,帧ID的取值范围为0x00~0x3F,共64个,帧ID标识了帧的类别,从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。其中,校验位P0和P1的计算方式如下:

P0 =       ID0 xor ID1 xor ID2 xor ID4
P1 = not ( ID1 xor ID3 xor ID4 xor ID5 )

特别注意,LIN总线的ID同CAN总线相似,标识的是消息的类型,并不是从机节点的地址(例如I2C总线)。LIN总线根据帧ID的不同,将报文分为信号携带帧诊断帧保留帧。此为应用层的约定,此处暂不展开。

应答数据段(Data field)

数据段包含1-8个字节。LIN2.x规定,可传输的LIN字节数为2,4,8,并不是1-8内任意一个数字。一般而言,车内会选择统一字节数,最常用的是每帧传递8个字节。
在这里插入图片描述

图x LIN通信帧中的数据段

与CAN总线(包括DLC字段)不同,LIN协议中并没有规定数据长度的信息,数据内容和长度均由应用系统的设计者根据帧ID提前设计。总线上的数据以广播形式发出,任何节点都可收到,但并非对每个节点有用。具体到发布与接听是由哪个节点完成,这取决于应用层的配置。通常情况下,帧的应答,总线上只存在一个发布节点,否则会出现错误。(事件触发帧例外,它可能出现0,1和多个发布节点。)

校验和段(Checksum field)

效验和段是为了对帧传输的内容进行效验。校验和段的1个字节的值,是将本帧数据段和PID段的值按照8位求和,再取反得到的。

效验分为标准型效验与增强型效验:

  • 经典款校验和(Classical Checksum)仅计算数据段的部分,适用于LIN v1.3及更早期的版本。
  • 增强型校验和(Enhanced Checksum)计算数据段和PID部分,适用于LIN v2.0及以后的版本。

采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。

在YTM32B1ME微控制器的手册中描述LINFlexD发送帧头时,可以在寄存器LINFlexD_BIDR[CCS]中选择,将发送或者检测增强型校验和还是经典款校验和。

LIN总线的波形

在这里插入图片描述

图x LIN总线上的波形

上图展示了LIN总线的通讯方式,可以看出,无论什么时候帧头都是由主机节点发布,当主机节点要发布数据时,整个帧全部由主机节点发送。当从机节点要发布数据时,帧头部分由主机节点发布,应答部分由从机节点发布,这样,其余节点都能收到完整的报文。所以,LIN总线的通讯都是由主机节点发起,只要合理的规定好每个节点的配置,这样就不会存在总线冲突的情况(事件触发帧冲突时采用冲突解决进度表)。

参考文献

  • 《一文看懂LIN总线》,https://zhuanlan.zhihu.com/p/357967013,Demu,发布于 2021-03-18 09:38
  • YTM32B1ME0x_RM.pdf
更多推荐

Packet Tracer中交换机的配置及Lab2实验

交换机是计算机网络中的一种网络设备,用于在局域网内传输和转发数据包。它具有数据包转发、数据包过滤、VLAN划分和端口管理等功能,能够实现高速、可靠和安全的数据传输,并支持网络的管理和控制。交换机在网络中发挥着连接终端设备和实现数据交换的重要作用。交换机的基本配置模式:模式提示符作用用户模式>只允许用户访问有限量的基本监

【Python基础】S01E03 元组

P01S03元组定义元组元组无法修改定义一个元素的元素修改元组变量方案一:关联新元组方案二:转换为列表列表是可修改的,对于处理网站的用户列表或游戏中的角色列表至关重要。然而我们有时候需要创建一系列不可修改的元素,元组可以满足这种需求。Python中,元组是不可修改的列表,名(tuple);定义元组元组看起来很像列表,但

c++ this指针与空指针调用类方法以及常函数

一、this指针说明1、c++的成员变量与成员内函数是分开存储2、每一个非静态成员函数只会诞生一份函数实例,多个同类型的队形公用的是同一份成员函数的代码3、this指向调用这一份成员函数代码的对象实例4、this是一个隐藏的指向对象实例的一个指针,无需定义直接使用即可作用1、可以区别形参与成员变量(当成员函数的形参与类

CentOS7平台命令安装Anaconda3、配置Python3开发环境

要在CentOS7上安装Anaconda3,您可以按照以下步骤进行操作:1.下载Anaconda3安装包:首先,访问Anaconda官方网站以获取最新版本的Anaconda3安装包的下载链接。可以使用wget命令来下载安装包。请确保选择适用于CentOS7的版本。wgethttps://repo.anaconda.co

1.centos7安装docker

本文目录:1.docker安装1.安装步骤2.安装是否成功校验3.docker加速配置4.helloworld来袭,验证安装是否ok2.卸载docker3.卸载较旧版本docker使用docker必备的三个官方网站:docker官网:https://www.docker.comdocker官方仓库:https://hu

SpringBoot文件上传-阿里云OSS

1.打开阿里云说明:登录阿里云账号2.点击AccessKey管理3.创建AccessKey说明:记得复制accessKeyId,accessKeySecret并保存起来4.点击对象存储OSS5.创建Bucket说明:创建储存桶6.查看SDK示例7.Java简单上传8.上传文件流说明:以上传图片为例9.copy代码说明:

自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

该部分是对自动化测试专栏前四篇的一个补充,本次参考以下文章实现一个完整的谷歌翻译接口自动化测试:[1]【python小脚本】Yaml配置文件动态加载[2]【python做接口测试的学习记录day8——pytest自动化测试框架之热加载和断言封装】目标:框架封装完成后,不需要写python脚本,只需要增加yaml测试用例

LuatOS-SOC接口文档(air780E)--adc - 数模转换

常量常量类型解释adc.ADC_RANGE_3_6numberair105的ADC分压电阻开启,范围0~3.76Vadc.ADC_RANGE_1_8numberair105的ADC分压电阻关闭,范围0~1.88Vadc.ADC_RANGE_3_8numberair780E开启ADC0,1分压电阻,范围0~3.8Vadc

深度融入垂直行业是物联网未来发展必由之路

三年疫情,打断了很多企业的发展进程。但是疫情已过似乎整个业界生态有了一个很大变化。有一个朋友前一段时间参加深圳电子展后有一个感悟,说的很好:“疫情后有很大变化,疫情后,整个环境状态和疫情前有很大不同。无论企业,个人,还是外部环境,感觉都有变化。这种变化是无形的,但有时又感觉能感同身受。”其实这种感觉,就如人大病初愈或者

【计算机网络】——应用层

//图片取自王道仅做交流学习一、基本概念应用层概述协议是网络层次模型中多台主机之间同层之间进行通信的规则。是一个水平概念垂直空间上,向下屏蔽下层细节,向上提供服务接入,多台主机之间同层之间形成一条逻辑信道。应用层的功能:应用层的重要协议:文件传输、访问和管理FTP电子邮件SMTP、POP3虚拟终端HTTP查询服务和远程

easyExcel读取excel文件

简介Java解析、生成Excel比较有名的框架有Apachepoi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi

热文推荐