LIN协议适用于轿车内进行低本钱、短距离、低速网络通讯,其用处是传输开关设置状况以及对开关改动呼应。本文详细分析了LIN总线协议的特性、音讯协议的组成、检错机制等,并介绍怎么依据PICmicro器材来完结LIN总线从节点。
LIN协议是由欧洲车辆制造商协会开发用来进行低本钱、短距离、低速网络通讯,其用处是传输开关设置状况以及对开关改动呼应,因而通讯事情是在百毫秒以上时刻内产生,而不像引擎办理等其它速度快得多的轿车运用。此协议支撑在单根线上进行双向通讯,运用由RC振荡器驱动的低本钱微操控器,这样能够省去晶振或陶瓷振荡器的本钱。别的,此协议实践上是以时刻和软件上的价值交换硬件上本钱的节省。LIN协议的每一条音讯都包括主动波特率步进的数据,最高能够支撑波特率为20k,一同低功耗睡觉形式能够关断总线,以防止产生不必要的功耗。总线能够由恣意一个节点供给电源。
LIN总线特性
LIN总线交融了I2C和RS232的特性:像I2C总线那样,LIN总线经过一个电阻上拉到高电平,而每一个节点又都能够经过集电极开路驱动器将总线拉低;像RS232那样经过开端位和中止位标识出每一个字节,每一位在时钟上异步传输。
图1给出了典型的LIN协议装备。当恣意一个节点将总线拉低时,总线处于低电平,标识着总线进入占用状况;而当一切节点都使总线浮空时总线处于电池的电压(9-18V),则意味着总线处于非占用状况(Recessive state);在闲暇状况下浮空的总线经过电阻被上拉到高电平。
总线作业在9到18伏的电压下,但一切衔接到总线上的器材有必要能接受40V的电压。一般情况下,微操控器经过线路驱动器或接纳器与总线阻隔。总线在每一个节点上被端接到Vbat,主节点经过一个1kΩ的电阻端接而从节点则经过一个20kΩ到47kΩ的电阻端接。总线最大长度为40米。
总线上传输的每一个字节都是与开端位和中止位一同组成帧。开端位的状况与闲暇状况相反(即为0),而中止位则与闲暇状况同为1。在每个字节中,首要传输的是最低有用位。
音讯协议
主节点操控总线的方法是轮询各个从节点并与总线上其余部分同享从节点的数据。从节点仅在接到主节点的指令时才进行数据传输,这样就能够进行双向传输而且无需进一步的裁定。音讯传输是以主节点宣布一次同步中止开端,紧接着是音讯的同步字段和音讯字段。经过在每条音讯的开端处传送的同步字段还设定了整个总线的时钟,每个从节点用该字节来调整其波特率。
同步中止使总线进入占用状况,该状况坚持时刻为13位数据的传输时刻,紧接着是一个中止位(非占用状况),这奉告从节点行将有音讯传输。主节点与从节点的时钟漂移最大答应在15%,因而从节点接纳的同步中止或许只需11位或长达15位数据位的传输时刻。
每一条音讯的第二个字节是标明字节,用来奉告总线在该字节后边传输的是什么数据和哪一个节点应该应对,以及应对的长度(标明字段如图2所示)。一条指令仅会有一个从节点对其进行呼应,从节点仅在主节点的指示下才发送数据。数据只需呈现在总线上,每一个节点都能够接纳到。因而,无须主节点专门操控从节点之间的通讯。
因为规划中选用廉价的RC振荡器,从节点有必要在每一次传输时检测主节点的波特率并调整其本身当时的波特率。因而,每一次通讯都由一个由替换的“0”和“1”组成的同步字节开端。标识字段紧跟在同步字段的后边,它奉告总线后边传输的内容是什么。标识字段又分为三个子字段,最低4位(0-3位)是寻址总线上的器材,中心两位(4-5位)是后边传输的音讯的长度,最高两位(6-7)用作奇偶校验位。
除了睡觉指令,LIN协议并没有界说每一条音讯的内容。其它指令是由详细运用来界说的。
检错机制
下面描绘的过错有必要被检测出,而且在每个节点内进行计数。
位过错-传输节点有必要将它以为应该传输的数据位与总线上实践呈现的数据位进行比较。因为总线需求呼应时刻,操控器有必要在检测数据位之前等候满足长的时刻。假定最小的电压翻转速率为1V/μs,而总线最高电压为18V,则发送器有必要等候18μs才干检测总线上的数据位是否正确。
校验和过错-每一条音讯的内容都是由校验和字节进行维护。
奇偶校验错-指令字节的6个数据位由两个奇偶校验位进行维护,需求从头进行核算这些位并比较。假如过错呈现,应当疏忽当时指令而且记录下过错。LIN协议中没有直接的过错报告机制,但每一个从节点应当盯梢其本身的过错,主节点能够要求从节点将过错状况作为正常音讯协议的一部分来传输。
LIN总线与CAN总线
LIN协议并不直接与CAN总线兼容,但人们希望两者进行彼此操作。CAN总线或许用在整个轿车内来完结通讯,而LIN总线仅用在轿车的部分电路内,如车门。为了衔接两种总线,需求选用CAN-LIN协议接口节点,该节点从LIN总线节点搜集信息然后传送到CAN总线上。
低功耗睡觉形式
主节点经过发送标识码0x80指示一切节点进入睡觉形式,睡觉指令后边跟从的数据字节的内容没有界说。收到睡觉指令的从节点应当对本身进行设置,以便利总线产生改动时能唤醒,并封闭本身的电压以使电流耗费最低。当处于睡觉形式时总线将处于高电平而且不耗费电流。
恣意一个节点都能够经过发送唤醒信号来唤醒总线。当收到唤醒信号后,一般情况下一切的节点应当激活并等候主节点开端总线轮询。
硬件示例
图3给出了有两个按钮和三个LED组成的硬件示例。每按动十下按钮1 LED1改动一次状况。相同,每按动十下按钮2,LED2改动一次状况。作为标识为ID1的呼应,按钮的按动次数被传送到总线上。作为标识为ID4的呼应,按钮的按动次数的改写被传送到总线上。
软件操作
LIN协议程序作业在由RB0触发的中止下以完结总线的睡觉/唤醒。在触发中止时,程序对低电平数据位的长度进行计数,然后读同步字节并确认数据位时刻,最终再将其与开始的数据位时刻进行比较,以确认开始的低电平时刻是否大于10个数据位的时刻,大于10为同步中止,小于10为唤醒信号。假如是唤醒信号,程序退出并持续等候同步中止;假如是同步中止,程序就读取指令字节,查看奇偶位并查看动作表(action table)来确认接下来的动作。动作表界说了总线上数据的来历或目的地。
为了初始化LIN协议的从节点句柄(Slavehandler),用户有必要调用InitLinSlave程序,这个程序初始化RB0中止引脚和TMR0寄存器。TMR0寄存器用来丈量数据位的长度并生成波特率。初始化完结之后,用户能够履行自己的程序。一旦检测到RB0引脚上的下降沿,用户程序就将被中止。当检测到下降沿时,程序就跳转到中止服务程序。有必要制止除了TMR0和RB0中止之外一切的中止源,以便对同步字段进行准确丈量。核算出波特率之后,中止服务程序就退出履行。
鄙人一次RB0中止产生时,LIN协议Slavehandler主动进入接纳形式,以接纳标识字段或数据字节。假如检测到标识字段的开端位,就对标识字段进行接纳和解码。然后,依据收到的标识履行相应的代码,例如存储数据或点亮LED。总线上一个帧传输完结之后,标志FCOMPLETE被置位。这个标志指示一切的数据都已正确接纳结束并能够进行后续的处理。此标志由用户固件铲除。
LIN协议从节点句柄Slavehandler最高能够作业在20K的波特率下,需求420字的程序存储空间以及23字节的数据存储空间。
因为其低本钱,LIN协议具有在轿车运用中广泛选用的潜力。能够运用内置的RC振荡器而且运行在4MHz的时钟频率下的比如Microchip的各种器材的微处理器,使得规划师们能以最低的或许本钱规划运用体系