LIN总线
LIN总线历史
1996年Volvo与Volcano通讯为Volvo S80系列开发了一种基于UART/SCI的Volcano Lite协议。
1997年,Motorola与Volvo、Volcano合作改进Volcano Lite协议,以满足各种不同的需求,并且制定可以支持各种半导体产品的开发标准。
1998年12月,Audi、BMW、VW、Benz也加入进来,由此形成了LIN协会。并在1999年7月发布了第一版LIN协议。
什么是LIN总线
LIN是Local Interconnect Network的缩写,是基于UART/SCI的低成本串行通信协议,通常用于车门、雨刮器、车灯等对通信速率要求不高的器件,主要是出于节约成本考虑。
在汽车上LIN网络在汽车中一般不独立存在,通常会与上层CAN网络相连,形成CAN-LIN网关节点。
LIN总线拓扑
LIN总线拓扑为单线总线,应用于一主多从。总线电平为12V,速率最高为20kbps。由于物理层限制,一个LIN网络最多可连接16个节点,通常不超过12个,且主节点有且仅有一个。
主节点包含主机任务和从机任务,从节点只包含从机任务。
1、调度总线上帧的传输次序;
2、监测数据,处理错误;
3、作为标准时钟参考;
4、接收从机节点发出的总线唤醒命令。
LIN报文帧包括帧头(hearder)与应答(response)两部分。主机负责发送至帧头;从机负责接收帧头并作出解析,然后决定是发送应答,还是接收应答或不回复。
帧头包括同步间隔段、同步段以及 PID(受保护 ID) 段,应答包括数据段和校验和段,其中值 “ 0为显性电平 ” (Dominant),值“ 1为隐性电平 ” (Recessive),总线上实行 “线-与” 。
下图帧间隔为帧之间的间隔;应答间隔为帧头和应答之间的间隔;字节间间隔包括同步段和受保护 ID段之间的间隔、数据段各字节间之间的间隔以及数据段最后一个字节和校验和段之间的间隔。下面对帧头和应答的各部分进行详细说明。
1、同步间隔段
同步间隔段是由同步间隔和同步间隔段间隔符组成,同步间隔至少 持续 13 位的显性电平 ,同步间隔段间隔符是至少持续1位的隐性电平。
由于帧中所有的间隔或总线空闲都应该保持隐性电平,且任何段都不会出现大于9位的隐性电平,因此同步间隔可以标志帧的起始。
2、同步段
LIN 同步以下降沿为判断标志, 同步端采用字节 0x55(01010101b)。从机节点可以不采用高精度时钟,由此带来的与主节点的时钟偏差,通过同步段来调整。
3、受保护 ID 段
受保护 ID 段的前 6 位叫作帧 ID,加上两个奇偶校验位后称作受保护 ID。奇偶校验位的计算如下所示,其中⊕为异或, 为取非。
另外依据不同的帧ID,将帧分为不同的类别,需要注意的是从机的应答帧为一个完整的帧,与帧结构中的“应答”不同。
4、数据段
数据段可以包含1-8个字节,其中包含有两种数据类型,信号(singal)和诊断消息(diagnostic messages)。信号由信号携带帧传递,诊断消息由诊断帧传递。其发送顺序从最低字节开始,DATA1。
另外协议中没有显示数据长度信息,数据长度是由系统设计者根据帧ID事先约定好的。并且总线上的数据是以广播的形式发送的,各从节点根据需求接收,对于响应而言,通常只有一个发布节点,否则就会出现错误。事件触发帧例外,可能出现0,1,多个发布节点。
5、效验和段
校验和段是对帧中所传输的内容进行校验 ,分为标准型效验与增强型效验。采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。
帧的类型
1、无条件帧
无条件帧是具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧。
如上图帧ID=0x30应答部分的发布节点为从机节点1,收听节点为主机节点,应用在从机节点向主节点报告信号状态;帧ID=0x31中,应答部分为主机节点,收听部分为从机节点,应用在主机节点向从机节点发送消息;帧ID=0x32中应答部分的发送节点为从机节点2,收听节点为从机节点1,应用与从机节点之间的通信。
2、事件触发帧
事件触发帧是主机节点在一个帧间隙中查询各从机节点的信号是否发生变化时使用的帧。当存在多个发布节点时,通过冲突解决进度表来解决冲突。
当从机节点信息状态没有发生变化的时候,从机节点可以不应答主机发出的帧头;当有多个节点信息同时发生变化的时候,同时应答事件触发帧头会造成总线的冲突。当主机节点检测到冲突时,便会查询冲突解决进度表来依次向各个节点发送无条件帧(无条件帧只有能1个节点应答)来确定从机节点的信息状态。
与事件触发帧关联的多个无条件帧需要满足以下5个条件:
1、数据段所包含的数据字节数等长;
2、使用相同的效验与类型;
3、数据段的第一个字节为该无条件帧的受保护ID,这样才能够知道应答是哪个关联的无条件帧发送出来的;
4、由不同的从机节点发布;
5、不能与时间触发帧处于同一个进度表中。
3、偶发帧
偶发帧时主节点在同一帧间隙中当自身信号发生变化时向总线启动发送的帧,当存在多个关联的应答信号变化,通过事先定义的优先级进行仲裁。其出现的情况主要有三种:
1、当关联的无条件帧没有信号发生变化,该间隙保持沉默;
2、当其中一个关联的无条件帧包含的信号发生了变化,则发送该关联的无条件帧的应答部分 ;
3、当两个或两个以上关联的无条件帧包含的信号发生变化,则按照事先定义的优先级进行发送。
4、诊断帧
诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断。主机请求帧ID=0x3c,应答部分的发布节点为主机节点;从机应答帧ID=0x3d,应答部分的发布节点为从机节点。数据段规定为8个字节,一律采用标准效验和。
5、保留帧
保留帧的帧 ID 为 0x3E 和 0x3F,为将来扩展用。
进度表
进度表是帧的调度表,规定了总线上帧的传输次序以及传输时间。进度表位于主机节点,主机任务根据应用程需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表的入口处开始执行,到进度表的最后一个帧时,如果没有新的进度表启动则返回到当前进度表的第一个帧开始执行;也有可能在执行到某个进度表时发生中断,跳到另一个进度表后再返回,如事件触发帧就是一个典型的例子。
来源:瑞萨的LIN入门书