当前位置: 首页 > news >正文

LIN总线详解

        LIN 是 Local Interconnect Network 的缩写,是基于UART/SCI(通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办公设备等多种领域。本文主要针对LIN在分布式的汽车电子网络系统中的应用。

        LIN主要用于汽车中对响应速度要求不高的场合,如车门,车灯,空调,雨刷器等。LIN网络在汽车中一般不独立存在,经常与上层网络(CAN)相连,如下图所示:

        LIN的拓扑结构为单线总线,采用一主多从的概念, 总线电平为12V,传输位速率(波特率)最高为20kbps。由于物理层限制,一个LIN网络最多可以连接16个节点,一般都在12个节点以下,主机节点有且只有一个。

LIN协议层

帧结构

        帧(Frame)包含帧头(Header)和应答(Response)两部分。主机任务负责发送帧头;从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。在总线上的传输如图所示:

         帧头包括同步间隔段、同步段以及PID(Protected Identifer,受保护ID)段,应答包括数据段和校验和段,其中值“0”为显性电平(Dominant),值“1”为隐性电平(Recessive),总线上实行“线-与”:当总线上有大于等于一个节点发送显性电平时,总线呈显性电平:所有的节点都发送隐性电平或不发送信息(不发送任何信息时总线默认呈隐性电平)时,总线才呈现隐性电平。图中帧间隔为帧之间的间隔;应答间隔为帧头和应答之间的间隔;字节间间隔包括同步段和受保护ID段之间的间隔、数据段各字节间之间的间隔以及数据段最后一个字节和校验和段之间的间隔。

同步间隔段 

        同步间隔段由同步间隔(中断)和同步间隔段间隔符(中断分隔符)构成。同步间隔是至少持续13位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并且帧中的任何其它字段都不会发出大于9位的显性电平,因此同步间隔可以标志一个帧的开始。同步间隔段的间隔符是至少持续1位的隐性电平

同步段 

        在介绍同步段之前,首先介绍一下字节域(Byte Field)的概念,字节域包括1位起始位(Start Bit,显性)+8位数据位 +1位停止位(Stop Bit,隐性),是一种标准 UART 数据传输格式,在 LIN 的一帧当中,除了上一节讲述的同步间隔段,后面的各段都是通过字节域的格式传输的。在 I 帧中,数据传输都是先发送LSB(Least Significant Bit,最低有效位),最后发送 MSB(Most Significant Bit,最高有效位)。

        LIN同步以下降沿为判断标志,采用字节0x55(01010101),同步段的字节域如下:

        从机节点可以不采用精度高的时钟,而采用片上振荡器等精度和成本相对较低的时钟,由此带来的与主机节点时钟产生的偏差,需要通过同步段进行调整,调整的结果是使从机节点数据的位速率与主机节点一致。同步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。计算公式如下: 

PID段 

        PID前六位叫做帧ID,加上两个奇偶校验位称作PID。

         帧ID的范围在 0x00~0x3F 之间,共 64个。帧ID标识了帧的类别和目的地。从机任务对于帧头作出的反应(接收/发送/忽略应答部分)都是依据帧ID 判断的。如果帧ID传输错误,将会导致信号无法正确到达目的地,因此引入奇偶校验位。PID不会出现全0或全1的情况,如果从机节点收到了“0xFF”或“0x00”,可判断为传输错误。

数据段

        节点发送的数据位于数据段,包含1到8个字节,先发送编号最低的字节 DATA1,编号依次增加。数据段包含了两种数据类型,信号(Signal)诊断消息(Diagnostic messages)。信号(Signal)由信号携带帧传递,一个帧ID 对应的数据段可能包含一个或多个信号。信号更新时要保证其完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher);其余的一个或多个节点接收,它们称为信号的收听节点(Subscriber)。诊断消息(Diagnostic message)由诊断帧传递,对消息内容的解析由数据自身和节点状态决定。

校验和段

        校验和分为标准型校验和增强型校验和,前者校验对象是数据段的各个字节,后者校验对象是数据段各个字节和PID。

帧在总线上的传输波形

        每一帧的帧头部分由主机发出,应答部分可以由主机也可以由从机发出。

帧的类型 

无条件帧

        无条件帧是具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧。
无条件帧在主机任务分配给它的固定的帧时隙中传输。总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答),如图所示:

         帧 ID=0x30应答部分的发布节点为从机节点1,收听节点为主机节点。典型应用如从机节点1向主机节点报告自身某信号的状态。
        帧ID=0x31应答部分的发布节点为主机节点,收听节点为从机节点1和从机节点2。典型应用如主机节点向从机节点发布信息。
        帧ID=0x32应答部分的发布节点为从机节点2,收听节点为从机节点1。典型应用如从机节点之间彼此通信。

事件触发帧

        事件触发帧是主机节点在一个帧时隙中查询各从机节点的信号是否发生变化时使用的帧,当存在多个发布节点时,通过冲突解决进度表来解决冲突。当从机节点信号发生变化的频率较低时,主机任务一次次地轮询各个信号会占用一定的带宽。为了减小带宽的占用,引入了事件触发帧的概念。
        事件触发帧的典型应用就是轮询四个车门的开关情况。与其利用无条件帧每个车门轮询一遍,不如同时对四个车门进行询问,如果其中一个车门打开了(事件发生),该车门要对询问作应答,即事件触发的含义。这样做可以减小带宽,但同时会导致两种现象,其一就是没有车门被打开,即无节点应答--事件触发帧允许一帧中只有帧头无应答;另外一种情况就是冲突,即同时有大于等于两个车门被打开,对该问题同时作答--事件触发帧允许两个以上的节点对帧头作应答而不视为错误。当发生冲突时,主机节点需要重新作轮询
        原先用作轮询的无条件帧,称为与该事件触发帧关联的无条件帧,即事件触发帧的应答部分是与其关联的无条件帧所提供的应答。当发生冲突时,需要立刻中断当前的进度表,启动冲突解决进度表,重新调用这些关联的无条件帧。其中,冲突解决进度表要求包含所有的关联的无条件帧。下图 示例描述了事件触发帧的传输状况。事件触发帧的帧D为 0x10,与其关联的两个无条件帧的帧 DD 分别是 0x11和 0x12:

 偶发帧

        偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁
        与事件触发帧一样,偶发帧的应答也关联了一组无条件帧。规定偶发帧只能由主机节点作为发布节点。偶发帧的传输可能出现三种状况:

①当关联的无条件帧没有信号发生变化时,该时隙保持沉默,主机节点连帧头都不需要发送;

②当其中一个关联的无条件帧包含的信号发生了变化,则发送该关联的无条件帧的应答部分;

③如果有两个或两个以上关联的无条件帧包含的信号发生了变化,则按照事先规定好的优先级,优先级较高的关联的无条件帧获得发送权,优先级较低的要等到下一个偶发帧的帧头到来时才能发送应答。由于主机节点是唯一的发布节点,所以主机节点事先就知道各个关联信号的优先级别,这样在传输时就不会产生冲突。

        事件触发帧主要侧重于从机节点的变化信息发送,当从机节点发生某种特定事件时,会触发帧的发送,以传递该事件的相关信息。而偶发帧则主要侧重于主机节点的变化,当主机节点状态发生变化时,会发送偶发帧来通知其他节点。 

诊断帧

        诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。主机请求帧,帧ID=0x3C,应答部分的发布节点为主机节点;从机应答帧,帧ID=0x3D应答部分的发布节点为从机节点。数据段规定为8个字节,一律采用标准型校验和。

进度表

        进度表是帧的调度表,规定总线上帧的传输次序以及各帧在总线上的传输时间。进度表位于主机节点,主机任务根据应用层需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表规定的入口处开始顺序执行,到进度表的最后一个帧时,如果没有新的进度表启动,则返回到当前的进度表第一个帧循环执行;也有可能在执行某个进度表当中发生中断,执行另一个进度表后再返回,如事件触发帧的冲突解决过程就是一个典型的例子,如图所示:

 

http://www.xdnf.cn/news/849205.html

相关文章:

  • linux 定时任务
  • [转]TFTP协议详解
  • 2024年运维最新超详细:安装Linux系统教程_linux系统安装,从三流Linux运维外包到秒杀阿里P7
  • PWA介绍及快速上手搭建一个PWA应用
  • java中同类对象之间的compareTo()和compare()方法的比较
  • K3S部署和使用
  • 环境变量
  • 15个PPT模板免费下载网站
  • 图像处理:灰度(级)和分辨率
  • cpu和gpu已过时,npu和apu的时代开始
  • C语言 strcpy 函数 - C语言零基础入门教程
  • WEB之CGI----CGI详解(原理,配置及访问)
  • Cisco Packet Tracer 思科常用命令
  • FTP客户端和服务器的设计与实现(C#)
  • 【Java开发环境配置】2-Java开发工具STSIDEA安装教程(22)
  • loki使用超详细说明
  • 吴恩达《机器学习》——Logistic多分类与神经网络
  • @Transactional 详解 示例
  • 深度学习———— BP神经网络
  • CISP考证指南:避免常见误区,一次拿证,零基础入门到精通,收藏这一篇就够了
  • SQL sever中的触发器
  • MySQL数据库基础知识,基础操作详细整理
  • JavaScript的五种排序方法
  • Activiti学习之入门:个人任务(07)
  • 后台-husky提交代码规范使用
  • 青柠起始页——一言接口调用
  • ELF文件格式的详解
  • Hue概述,核心功能,架构说明
  • 什么是MVC模式
  • 保姆级教程,龙蜥操作系统安装使用一步到位!