“现在汽车电子网络都在使用CAN总线,FlexRay,以太网,谁还研究LIN总线啊。”
真是这样吗?
可能你未必懂LIN总线。
0 什么是LIN总线?
相对于CAN总线而言,LIN总线协议较为简单,对单片机的要求也并不高,基本的串口就可以实现,因而成本较低。作为CAN总线的辅助总线,LIN总线广泛应用于车门、车窗、车灯以及中控锁等车身控制领域。
1998 的十月,在德国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 发布。
当然,LIN总线有其“局域”特性,在汽车中一般不独立存在,通常与上层CAN网络相连,形成CAN-LIN网关节点,通常汽车电子中整车厂会规定该“网关节点”的控制器归属。
-
单主控器/多从设备模式无需仲裁机制;
-
低成本,基于通用UART 接口所有控制机都具备LIN 必需的硬件;
-
单信号线传输,同时保证信号传输的延迟时间;
-
LIN具有可预测的电磁兼容性能,为了限制EMC的强度,LIN协议规定最大传输速率为20kbps;
-
LIN总线提供信号的配置、处理、识别和诊断功能。
LIN总线的任务
LIN总线主要负责如下任务:
- 调度总线上帧的传输次序;
- 监测数据,处理错误;
- 作为标准时钟参考;
- 接收从机节点发出的总线唤醒命令;
- 从机任务不能直接向总线发送数据,需要接受到主节点发送的帧头后,根据帧头所包含的信息来判断。
LIN报文帧结构
LIN报文的帧头和应答
LIN报文的结构
且帧中的任何其它字段都不会发出大于9位的显性电平,所以同步间隔场由至少13位(通常选择13位或14位)显性电平组成。所以我们可以得出结论,同步间隔场可以代表一帧的开始。另外,同步间隔场的间隔符至少为1位隐性电平。
举个例子。
如果同步间隔段我们规定13位显性电平表示,同步间隔段用1位隐性电平表示。那么帧头的同步间隔段时间就是14*t,值得注意的是,14位的时间是由主机节点的位速率来确定的。
当从机节点选择的时钟(精度不高的时钟)在容限范围内(±14%)时,(13-11.18)/13=14%,即当处于最差情况下(时钟相差14%)时,从机任务按照自身时钟测量的主机节点发送的13显性电平不会低于11.18 位,若识别阈值高于11.18位,那么当选用14%的时钟时,就会出现主机发送同步间隔,而从机检测不到的情形。由于在除同步间隔段以外,帧中其余段都不会发送超过9位的显性电平,(10.26-9)/9=14%,即是说判断阈值必须大于10.26位,否则可能把帧中其余部分误判作为同步间隔段。综上,识别阈值为 11 位显性电平。
当从机节点选择的时钟(精度较高的时钟)在容限范围内(±1.5%)时,按照上面的计算,识别阈值应在9.135位(由(9.135-9)/9=1.5%计算而来)到12.805位((13–12.805)/13=1.5%计算而来)之间。具体设定阈值会随着所选时钟的精度,取值范围在 9.135 位到 12.805 位之间浮动。
(2) 同步场
从机节点可以不采用高精度的时钟,而采用片上振荡器等精度和成本相对较低的时钟,由此带来的与主机节点时钟产生的偏差,需要通过同步段进行调整,调整的结果是使从机节点数据的位速率与主机节点一致。同步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。
计算公式如下:
(3)PID场
帧ID的取值范围为0x00~0x3F,共64个,帧ID标识了帧的类别,从机任务会根据帧头ID作出反应(接收/发送/忽略应答),其中P0与P1效验如下:
其中“⊕”代表“异或”运算,“¬”代表“取非”运算。由公式可以看出,PID 不会出现全 0 或全 1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断传输错误。
LIN总线根据帧ID的不同,将报文分为信号携带帧、诊断帧、保留帧。
效验和场是为了对帧传输内容进行效验。效验分为标准型效验与增强型效验。采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。
上图展示的是LIN总线的通讯方式,可以看出无论什么时候帧头都是由主机节点发布,当主机节点要发布数据时,整个帧全部由主机节点发送。当从机节点要发布数据时,帧头部分由主机节点发布,应答部分由从机节点发布,这样其余节点都能收到完整的报文。所以,LIN总线的通讯都是由主机节点发起,只要合理的规定好每个节点的配置,这样就不会存在总线冲突的情况(事件触发帧冲突时采用冲突解决进度表)。
了解了帧的结构以后,我们就可以计算出帧在总线上的传输时间了。如下图实例。
LIN的帧类型
帧 ID = 0x30 应答部分的发布节点为从机节点 1,收听节点为主机节点。典型应用如从机节点 1 向主机节点报告自身某信号的状态。
帧 ID = 0x31 应答部分的发布节点为主机节点,收听节点为从机节点 1 和从机节点 2。典型应用如主机节点向从机节点发布信息。
帧 ID = 0x32 应答部分的发布节点为从机节点 2,收听节点为从机节点 1。典型应用如从机节点之间彼此通信。
2. 事件触发帧
1) 当关联的无条件帧没有信号发生变化,这是主机连帧头也不需要发送。
2) 当关联的一个无条件帧信号发生变化则发送该帧。
3) 当有多个无条件帧发生信号变化时,则按照事先规定要的优先级依次发送。
调度表
状态机的实现
收发 LIN 帧需要的硬件包括协议控制器(Protocol Controller)、总线收发器(Bus Transceiver)和 LIN 总线三部分。
协议控制器主体是一个基于UART/SCI的通信控制器,工作方式是半双工。协议控制器既可以使用专用模块实现,也可以用“UART/SCI+定时器”实现。
发送时,协议控制器把二进制并行数据转变成高-低电平信号,并按照规定的串行格式(8数据位,1停止位,无校验位)送往总线收发器;
接收时,协议控制器把来自总线收发器的高-低电平信号按照同样的串行格式储存下来,然后再将储存结果转换成二进制并行数据。
协议控制器要能产生和识别帧的同步间隔段。同步间隔段包含一个低电平脉冲,长度至少为 13位。发出和识别同步间隔段虽然增加了硬件设计的复杂度,但是从接收方的角度看,这样做能把同步间隔段与普通的数据字节区别开,确保了同步信息的特殊性。
协议控制器要能执行本地唤醒(Local Wakeup)。需要唤醒总线时,协议控制器通过总线收发器向 LIN 总线送出唤醒信号。协议控制器要能识别总线唤醒(Bus Wakeup)。当收到来自 LIN 总线的唤醒信号时,协议控制器能够正确动作,进入规定的通信状态。
总线收发器
总线收发器还包括一些附加的功能,例如总线阻抗匹配、压摆率(Slew-rate)控制等。
此外,LIN规范要求总线收发器具备这样一种特性:本地节点掉电或工作异常时,不能影响总线上其他节点工作。
作者简介:
Demu,传统汽车电控向智能驾驶转变的汽车人。从事发动机控制器系统工程师和软件工程师多年,有丰富的ECU系统和软件设计经验。欢迎大家一起留言交流,共同进步。