('广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925ttp://www.zlgmcu.comLIN规范LIN标准LIN是低成本网络中的汽车通讯协议标准。25M10M1M125K20K0.512.55每个节点相应的通讯成本嵌入式控制多媒体LIN时间触发的单线主机-从机,无晶振J1850CAN-BCAN-C双线仲裁(CSMA)容错的双线仲裁拐射线,TTxD2B,MOST蓝牙容错的时间触发(TDMA),可靠的2x2电缆/光缆光环无线介质图1汽车中的主要网络协议LIN概念LIN(LocalInterconnectNetwork)是低成本的汽车网络,它是现有的汽车复用网络功能上的补充。为了获得更多的质量提高和降低成本,LIN将是在汽车中使用汽车分级网络的启动因素。LIN的标准化将减少重复使用现有的低端复用解决方案,而且将减低汽车电子的开发、生产、服务和后勤成本。LIN标准包括传输协议规范、传输介质规范、开发工具接口规范和软件编程接口规范。LIN在硬件和软件上保证了网络节点的互操作性,并能预测EMC。这个规范包包括了3个主要部分:LIN协议规范部分——介绍了LIN的物理层和数据链路层。LIN配置语言描述部分——介绍了LIN配置文件的格式。LIN配置文件用于配置整个网络并作为OEM和各种网络节点供应厂商的通用接口,以及作为开发和分析工具的输入。LINAPI部分——介绍了网络和应用程序之间的接口。这个概念可以实现开发和设计工具之间的无缝连接,并提高了开发的速度,增强了网络的可靠性。1广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925ttp://www.zlgmcu.com电子控制单元工具软件级硬件级操作系统应用软件LIN应用接口通讯管理器LIN协议总线收发器LIN物理层信号数据库管理器配置语言配置语言网络配置发生器LIN物理层总线分析器/仿真器(LINspector)汽车LIN网络图2LIN规范的范围各部分链接第一部分LIN协议规范第二部分LIN配置语言规范第三部分LINAPI操作规程建议2广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925ttp://www.zlgmcu.comLIN协议规范目录1.介绍........................................................................................................................21.1修订历史................................................................................................................................21.2投稿人...................................................................................................................................22.基本概念.................................................................................................................33.报文传输.................................................................................................................73.1报文帧...................................................................................................................................73.1.1字节场(BYTEfields)...............................................................................................73.1.2报头场(HEADERfields).........................................................................................73.2保留的标识符......................................................................................................................103.3报文帧的长度和总线睡眠检测.............................................................................................113.4唤醒信号..............................................................................................................................114.报文滤波...............................................................................................................125.报文确认...............................................................................................................126.错误和异常处理....................................................................................................136.1错误检测..............................................................................................................................136.2错误标定..............................................................................................................................137.故障界定...............................................................................................................138.振荡器容差............................................................................................................149.位定时要求和同步过程.........................................................................................149.1位定时要求..........................................................................................................................149.2同步过程..............................................................................................................................1410.总线驱动器/接收器...........................................................................................1510.1总体配置............................................................................................................................1510.2信号规范............................................................................................................................1510.3线的特性............................................................................................................................1710.4ESD/EMI的符合条件........................................................................................................1711.参考文献.............................................................................................................18A附录.........................................................................................................................19A.1报文序列的举例..................................................................................................................19A.1.1周期性的报文传输.....................................................................................................19A.1.2总线唤醒过程............................................................................................................19A.2ID场有效值表.....................................................................................................................19A.3校验和计算举例..................................................................................................................21A.4报文错误的原因..................................................................................................................21A.5故障界定的建议..................................................................................................................22A.5.1主机控制单元............................................................................................................22A.5.2从机控制单元............................................................................................................22A.6物理接口的电源电压定义....................................................................................................231广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925ttp://www.zlgmcu.com2广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com1.介绍LIN(LocalInterconnectNetwork)是一个串行通讯协议,它有效地支持分布式汽车应用中机械电子节点的控制。它的应用范围是带单主机节点的和一组从机节点的A类复用总线[1]。LIN总线的主要特性有:\uf097单主机/多从机概念\uf097基于普通UART/SCI接口硬件、的低成本硅设备,低成本软件或作为纯状态机构\uf097从机节点不需要石英或陶瓷谐振器可以实现自同步\uf097保证信号传输的延迟时间\uf097用单线实现成本极低\uf097速度高达20kbit/s本规范的目的是根据ISO/OSI参考模型的数据链路层和物理层实现任何两个LIN设备的互相兼容(见图2.1)。LIN是一种划算的总线通信方式,它不要求有CAN的带宽和多功能性。线的驱动器/接收器的规范遵守ISO9141标准[2],而且EMI性能有所提高。1.1修订历史1999年6月5日:修订版1.02000年4月17日:修订版1.12000年11月17日:修订版1.2\uf097协议\uf02d表2.1:纠正传输速率单元\uf02d第2章:连接:把终端阻抗从范围值该成典型值\uf02d表3.1:增加标称值列\uf02d3.1.3节:说明响应场的使用和校验和字节的功能\uf02d3.2节:为总体的命令和服务报文以及以后扩展的LIN修订版(向上兼容)保留额外的标识符;命令报文代替前面的睡眠模式报文。\uf02d3.3节:说明帧长度的计算\uf02d表3.4:增加标称值列\uf02d6.1节:标识符奇偶错误的错误处理\uf02d6.1节:纠正校验和错误\uf02d表8.1:指出带谐振器的主机和从机节点的时钟容差\uf097物理层\uf02d表10.3:指定最大的转换速率\uf02d表10.4:改变CSLAVE和CMASTER,使ESD和EMI性能更好\uf02d10.4节:修改ESD电压级的注释\uf097整个文档:用“报文帧”或用更合适的词代替“数据帧”。1.2投稿人这个规范是由以下人员投稿:J.Bauer,V.Riebeling,AudiAG,Ingolstadt.J.Fröschl,M.Kaindl,Dr.J.Krammer,BMWAG,Munich.C.Bracklo,W.Welja,DaimlerChryslerAG,Stuttgart.R.Erckert,Dr.J.Krücken,Dr.A.Krüger,Dr.W.Specks,H.-C.Wense,MotorolaGmbH,Munich.I.Horváth,A.Rajnák,VolcanoCommunicationsTechnologies,Gothenburg.3广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comJ.Ende,T.Zawade,VolkswagenAGL.Casparsson,VolvoCarCorporation,Gothenburg.使用这个规范的任何应用都受到知识产权法例保护。2.基本概念LIN协议有下面的特性:\uf097单主机多从机结构(即无总线仲裁)\uf097保证信号传输的延迟时间\uf097可选的报文帧长度:2,4和8字节\uf097配置灵活\uf097带时间同步的多播(multicast)接收,从机节点没有石英晶振或陶瓷谐振器\uf097数据校验和的安全性和错误检测\uf097检测网络中的故障节点\uf097使用成本最低的半导体元件(小型电路板,单芯片系统)根据OSI参考模型的LIN层次结构在图2.1中显示。\uf097物理层定义了信号如何在总线介质上传输。本规范中定义了物理层的驱动器/接收器特性。\uf097MAC(媒体访问控制)子层是LIN协议的核心。它引入从LLC子层接收到的报文,也接受发送到LLC子层的报文。MAC子层由故障界定这个管理实体监控。\uf097LLC(逻辑链路控制)子层负责报文滤波和恢复管理。LLCMAC数据链路层验收滤波恢复管理时基同步报文确认数据封装/解封装错误检测错误标定串行化/解串物理层位定时位同步总线驱动器/接收器管理程序系统同步错误界定总线故障管理LLC=逻辑链路层MAC=媒体访问控制图2.1OSI参考模型这个规范的范围是定义数据链路层和物理层以及周围几层的LIN协议的结果。4广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com报文在总线上发送的信息,有长度可选的固定格式(见第3章)。每个报文帧都包含2、4或8字节的数据以及3字节的控制和安全信息。总线的通讯由单主机控制。每个报文帧都以一个间隔信号开始,接着是一个同步场和一个标识符场,这些都由主机任务发送。从机的任务则是发回数据场和校验场(见图2.2)。通过主机控制单元中的从机任务,数据可以被主机控制单元发送到任何从机控制单元。主机通过相应的报文ID可以触发从机-从机通信。tt...主机控制单元从机控制单元从机控制单元总线从机任务主机任务帧间空间/间隔从机任务主机任务从机任务从机任务同步间隔13位(最小值)标识符场1字节同步场1字节响应空间下一个同步间隔数据场2、4或8字节校验场1字节图2.2LIN的通讯概念信息路由LIN系统中,节点不使用有关系统配置的任何信息,除了单主机节点的命名。系统灵活性:不需要改变任何其他从机节点的软件或硬件就可以在LIN网络中直接添加节点。报文路由:报文的内容由识别符命名。识别符不指出报文的目的地,但解释数据的含义。最大的标识符号码是64,其中4个保留用于专用的通讯,譬如软件升级或诊断。多播:由于引入了报文滤波的概念,任何数目的节点都可以同时接收报文,并同时对此报文做出反应。位速率最大的波特率是20kbit/s,它是由单线传输介质的EMI限制指定。最小的波特率是1kbit/s,可以避免和实际应用的超时周期冲突。为使用低成本的LIN器件,建议使用下面的位速率:表2.1建议的位速率低速中速高速2400bit/s9600bit/s19200bit/s单主机-无仲裁只有包含主机任务的控制器节点可以传输报头,一个从机任务对这个报头作出响应。由于没有仲裁的过程,如果多于一个从机响应就会产生错误。这种情况下的错误界定可以由用户按照应用的要求指定。5广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com安全性错误检测\uf02d监控,发送器比较总线“应当”的值和“现在”的值\uf02d数据场相加将MSB的进位加到LSB,得到的和模256并取反,这个结果就是校验和\uf02d标识符场的双重奇偶校验保护错误检测的性能\uf02d发送器可以检测到所有的本地错误\uf02d对整个协议的错误有高的错误覆盖率错误标定和恢复时间在单主机概念中不能进行直接的错误标定。错误在本地被检测到,并用请求诊断的形式提供(见第6章)。故障界定LIN节点可以区分短时扰动和永久故障,它还能对故障作出合适的本地诊断并采取合适的行动(见第7章)。连接LIN网络节点的最大数量不仅由标识符的数量限制(见上面的信息路由)也由总线的物理特性限制。\uf02d建议:LIN网络的节点数量不应超过16。否则,网络阻抗降低会在很差的环境条件下禁止无错误通讯。每一个额外的节点都可以降低大约3%的网络阻抗(30kΩ~1kΩ)。\uf02d网络中积累的“电”线长度应少于或等于40m。\uf02d主机节点的总线端电阻典型值是1kΩ,从机节点是30kΩ。单通道总线有一个传送位的单通道。从这里数据可以获得重同步信息。物理层物理层是一条单线线与总线,每个节点都连接上拉电阻,电源从汽车的电源网络获得(VBAT),见第10章。与上拉电阻串联的二极管可以防止电子控制单元(ECU)在本地电池掉电的情况下通过总线上电。信号的波形由EMI和时钟同步的要求定义。VBATSCIGNDECULIN总线图2.3物理层的示意图总线值总线有两个互补的逻辑值:“显性”或“隐性”。相应的位和电压值可参见表2.2。表2.2总线的逻辑和物理值6广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com逻辑值位值总线电压(见10.2章)显性0地隐性1电池应答正确接收报文后的应答过程在LIN协议中没有定义。主机控制单元检查由主机任务初始化的报文和在自己的从机任务中接收到报文是否一致。如果不一致(例如:丢失从机响应,校验和不正确等等),主机任务可以改变报文的进度表。如果从机检测到不一致,从机控制器将保存这个信息并将它用诊断信息的形式向主机控制单元请求。诊断信息可以作为普通报文帧的数据发送。命令帧和扩展帧4个有8字节响应的标识符被保留用作特殊的报文帧:两个命令帧和两个扩展帧。两个命令帧都包括8字节响应,可以用于从主机向从机节点(或相反)上载和下载数据。这个特征用于软件升级,网络配置和诊断。帧的结构和普通的报文相同。响应场包含用户定义的命令场而不是数据场,举个例子,命令场可以使从机节点进入服务模式或睡眠模式。两个扩展帧标识符被保留用于将用户定义的报文格式和以后的LIN格式嵌入到现在的LIN协议中,而不需要改变当前的LIN规范。这就保证了LIN从机向上兼容以后的LIN协议修订版。扩展帧标识符向所有的总线成员声明了一个未定义的帧格式。标识符后面紧跟着的是LIN字节场的仲裁号码。接收到这个标识符的从机必须忽略后面的字节场,直到出现下一个同步间隔。睡眠模式/唤醒为了降低系统的功耗,LIN节点可以进入没有任何内部活动而且总线驱动器无源的睡眠模式。用于广播睡眠模式的报文是一个专用的命令,在3.2节中定义。睡眠模式期间,总线呈隐性。任何总线活动或总线节点内部的任何情况都会使节点退出(唤醒)睡眠模式。如果节点被内部唤醒,应利用基于使用唤醒信号的过程向主机通报这一消息。唤醒帧是一个单调的显性位序列,参见3.4节。唤醒时,内部活动重新启动,MAC子层等待系统的振荡器稳定,从机节点则在重新参与总线通讯前等待,直到(自己)和总线活动同步(等待显性的同步间隔)。时钟恢复和SCI同步每个报文帧都由一个同步间隔起始,接着是同步场,这个同步场在几倍的位定时长度中包含了5个下降沿(即:“隐性”到“显性”的跳变)。这个长度可以测量(即:通过定时器的捕获功能)而且可以用于计算从机节点内部时基(见3.1节和第9章)。同步间隔帧使丢失了同步的从机节点可以识别同步场(见3.1.2节)。振荡器容差位定时的要求允许在有容差的从机节点上使用预修剪的在片振荡器(参见表8.1)。主机节点的时钟由石英或陶瓷谐振器发生,而且是“频率中心点”。3.报文传输3.1报文帧报文传输是由报文帧的格式形成和控制。报文帧由主机任务向从机任务传送同步和标识符信息并将一个从机任务的信息传送到所有其他从机任务。主机任务位于主机节点内部,它负责报文的进度表:发送报7广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com头。从机任务位于所有的(即主机和从机)节点中,其中一个(主机节点或从机节点)发送报文的响应。一个报文帧(见图3.1)是由主机节点发送的报头和由主机或一个从机节点发送的响应组成。报文帧的报头包括同步间隔场、同步场和标识符场。报文帧的响应则由3个到9个字节场组成:2、4或8字节的数据场和一个校验和场。字节场由字节间空间分隔,报文帧的报头和响应是由一个帧内响应空间分隔。最小的字节间空间和帧内响应空间是0。这些空间的最大长度由报文帧的最大长度TFRAME_MAX限制,这个长度在表3.3中指出。报文帧报头同步间隔同步场标识符场帧内响应空间数据场数据场数据场数据场校验和场字节间空间响应帧间空间或间隔图3.1LIN报文帧3.1.1字节场字节场的格式(见图3.2)就是通常的“SCI”或“UART”串行数据格式(8N1编码)。每个字节场的长度是10个位定时。起始位是一个“显性”位,它标志着字节场开始。接着是8个数据位,首先发送最低位。停止位是一个“隐性”位,它标志着字节场结束。字节场起始位停止位8个数据位图3.2LIN字节场3.1.2报头场同步间隔为了能清楚识别报文帧的开始,报文帧的第一个场是一个同步间隔。同步间隔场由主机任务发送。它使从机任务有均等的机与总线时钟同步。同步间隔场有两个不同的部分(见图3.3)。第一个部分是由一个持续TSYNBRK或更长时间(即最小是TSYNBRK,不需要很严格)的显性总线电平。接着的第二部分是最少持续TSYNDEL的隐性电平同步定界符。第二个场使可以检测到接下来的同步场的起始位。最大的间隔和定界符时间没有精确的定义,但必须符合整个报头THEADER_MAX的总体时间预算,THEADER_MAX在表3.3中定义。TSYNDEL≥TSYNBRK同步间隔场同步场同步定界符8广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com图3.3同步间隔场从机控制单元的同步间隔场的时序规范及其估计值是LIN网络中允许的时钟容差(见表8.1)。如果显性电平持续的时间比在协议中定义的普通显性位序列(这里是:“0x00”场,有9个显性位)还要长,此时认为这是一个同步间隔场。如果这个间隔超过了用从机的位定时测量的间隔TSBRKTS,则从机节点将检测到这个间隔(见表3.1)。这个“阀值”是从从机节点的最大本地时钟频率得出。基于精确的本地时基,阀值TSBRKTS被指定了两个值。同步间隔场的显性电平长度最小是TSYNBRK(可以更长),这个时间是用主机位定时来测量。最小值是由要求的阀值连接从机节点指定的最小本地时钟频率得出(见表8.1)。表3.1同步间隔场的定时同步间隔场逻辑名字最小值[Tbit]通常值[Tbit]最大值[Tbit]同步间隔低相位显性TSYNBRK13a-同步间隔界定符隐性TSYNDEL1a-同步间隔从机阀值显性TSBRKTS11b9ca.这个位定时基于主机的时基。b.这个位定时基于本地从机的位时基。它对时钟容差低于FTOL_UNSYNCH的节点有效(见表8.1),例如:有RC振荡器的从机节点。c.和b一样,但对时钟容差低于FTOL_SYNCH的节点有效,譬如带石英晶振或陶瓷谐振器的从机节点(见表8.1)。同步场同步场包含时钟的同步信息。同步场的格式是“0x55”,特点是在8个位定时中有5个下降沿(即:“隐性”到“显性”的跳变沿)(见图3.4)。同步的过程在第9章定义。01234567同步场起始位停止位图3.4同步场标识符场标识符场(ID场)定义了报文的内容和长度。其中,内容是由6个标识符位和两个ID奇偶校验位表示(见图3.5)。标识符位的第4和第5位(ID4和ID5)定义了报文数据场的数量NDATA(见表3.2)。这将把64个标识符分成4个小组,每组16个标识符,这些标识符分别有2,4和8个数据场。表3.2在报文帧中控制数据场数量ID5ID4NDATA(数据场的数量)[字节]0020121041189广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comID位ID0~ID3相同但长度代码ID4、ID5不同的标识符可以表示不同的报文。注意:如果在对此技术问题有严格要求的(譬如:在气象系统中)系统中,报文的长度代码可以和表3.2中规定的不同。此时,数据字节的数量可以从0~8任意选择,而和标识符无关。标识符的奇偶校验位通过下面的混合奇偶算法计算:(奇校验)(偶校验)这种情况下,不可能所有的位都是隐性或显性。标识符0x3C、0x3D、0x3E和0x3F以及它们各自的标识符场0x3C、0x7D、0xFE和0xBF(所有8字节报文)都保留用于命令帧(如:睡眠模式)和扩展帧(见3.2节)。ID0ID5ID1ID2ID3ID4P0P1标识符场起始位标识符位长度控制标识符的奇偶校验位停止位图3.5标识符场3.1.3响应场根据应用,如果信息和控制单元无关,则可以不处理报文的响应场(数据和校验和),譬如不知道或错误的标识符。在这种情况下,校验和的计算可以忽略(参见附录A.5)。数据场数据场由通过报文帧传输的有8位数据的字节场组成。首先被传输的是LSB(见图3.6)。D0LSBD2D3D4D5D6D7MSBD1起始位停止位数据位数据场图3.6数据场校验和场校验和场是所有数据字节相加得到的和模256后取反(图3.7)。和用“带进位的加法”计算,每次加法的进位位都加到(和)结果的最低位(LSB)上。这就保证了数据字节MSB的安全。C0C2C3C4C5C6C7C1起始位停止位校验和位校验和场图3.7校验和场所有数据字节的和模256后加上校验和字节得出的值必须是“0xFF”。10广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com3.2保留的标识符命令帧标识符保留的两个命令帧标识符用于主机向所有总线成员为服务广播普通命令请求。它的帧结构和普通的8位报文帧(见图3.8)相同,只由保留的标识符来区别。“0x3C”ID场=0x3C;ID0,1,6,7=0;ID2,3,4,5=1是一个主机请求帧,和“0x3D”ID场=0x7D;ID1,7=0;ID0,2,3,4,5,6=1是一个从机响应帧(可参见附录A2)。标识符“0x3C”是一个“主机请求帧”,它可以从主机向从机节点发送命令和数据。标识符“0x3D”是一个“从机响应帧”,它触发一个从机节点(被以前的下载帧寻址)向主机节点发送数据。命令帧的第一个数据场是一个0x00~0x7F的保留值,它的用法由LIN协会定义。用户可以分配剩下的命令帧。命令帧的第一个数据字节:D7位=0:保留使用D7位=1:自由使用’0x3C’’0x7D’命令帧报头命令/数据场下一个报文帧同步间隔同步场标识符场8个字节场1个校验场8个字节场的内容由用户定义同步间隔同步场图3.8LIN命令帧睡眠模式命令睡眠模式命令用于向所有总线节点广播睡眠模式。在这个报文结束后直到总线上出现唤醒信号退出睡眠模式前的时间内,没有总线活动(见3.4节)。睡眠模式命令是第一个数据字节是0x00的下载命令帧。扩展帧标识符保留的两个扩展帧标识符允许在不改变现在的LIN规范情况下在LIN协议中嵌入用户定义的报文格式和以后的LIN格式。这就保证了LIN从机可以向上兼容以后的LIN协议修订版。扩展帧用保留的标识符场区别:“0x3E”ID场=0xFE;ID0=0;ID1,2,3,4,5,6,7=1是用户定义的扩展帧,和“0x3F”ID场=0xBF;ID6=0;ID0,1,2,3,4,5,7=1是以后的LIN扩展帧(参见附录A2)标识符“0x3E”(标识符场=“0xFE”)表示一个用户定义的扩展帧,它可被自由使用。标识符“0x3F”(标识符场=“0xBE”)直接保留给以后的LIN1扩展版本,现在还不能使用。标识符后面可以跟随任意数量的LIN字节场(见图3.9)。帧的长度、通讯概念2和数据内容这里没有定义。ID场的长度码对这两个帧不起作用。从机接收扩展帧标识符,但如果不使用它的内容,则必须忽略所有的后续LIN字节区直到接收到下一个同步间隔。1相当于CAN协议中从“标准帧”切换到“扩展帧”[3]2甚至可以是多主机11广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com’0xFE’’0xBF’同步间隔扩展帧的报头字节场的内容和数量未知下一个报文帧同步场标识符场字节场校验场同步间隔同步场图3.9LIN扩展帧3.3报文帧的长度和总线睡眠检测报文帧用一个同步间隔场作为起始用校验和场作为结束。报文帧中的字节场用字节间空间和帧内响应空间分隔。字节间空间和帧内响应空间的长度没有定义,只限制了整个报文帧的长度。最小的帧长度TFRAME_MIN是传输一个帧所需要的最小时间(字节间空间和帧内响应空间是0)。最大的帧长度TFRAME_MAX是允许传输一个帧的最大时间。时间值请看表3.3。它们由都数据字节场NDATA的数量决定,并不包括系统固有的(譬如:物理上)信号延时。表3.3报文帧的定时时间名字时间[Tbit]最小报文帧长度TFRAME_MIN10NDATA+44最小报头长度THEADER_MIN34最大报头长度THEADER_MAX(THEADER_MIN+1a)1.4最大报文帧长度TFRAME_MAX(TFRAME_MIN+1a)1.4总线空闲超时TTIME_OUT25,000a.“+1”是使THEADER_MIN和TFRAME_MAX是一个整数值如果从机在TTIME_OUT中检测到总线没有活动,它会假设总线处于睡眠模式。这种情况会在譬如睡眠报文被破坏的时候出现。3.4唤醒信号总线的睡眠模式可以通过任何节点发生一个唤醒信号来中止。唤醒信号可以通过任何从机任务发送,但只有总线之前处于睡眠模式而且节点内部请求被挂起时才有效。唤醒信号是字符“0x80”。当从机不与主机节点同步时,信号可以比精确时钟源的信号长或短15%。主机可以检测到字符“0x80”并像“0xC0”、“0x80”或“0x00”一样将它当作有效的数据字节。第一个场由TWUSIG的显性位序列规定,即8个显性位(包括起始位)。接着的第二个场是持续了至少TWUDEL的隐性唤醒定界符,即至少4个位定时(包括停止位和一个隐性停止位)。TWUSIG总线睡眠从机任务的唤醒信号帧主机任务的同步间隔唤醒定界符图3.10唤醒信号帧在唤醒信号发送到总线上后,所有的节点都运行启动过程并等待主机任务发送一个同步间隔场和同步场。如果在唤醒信号超时时间内没有检测到同步场,请求第一个唤醒信号的节点将再一次发送一个新的唤12广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com醒信号。但这种情况将不超过3次。然后唤醒信号的传输将被3个间隔超时挂起,详细情况请看表3.4和附录A.1。只有有内部唤醒请求挂起的节点才允许重新发送唤醒信号。在3个间隔超时后再重新发送3个唤醒信号,此后就可以决定是否要停止重新发送。表3.4唤醒信号定时唤醒逻辑名字最小值[Tbit]通常值[Tbit]最大值[Tbit]唤醒信号显性TWUSIG8a唤醒信号界定符隐性TWUDEL4b64唤醒信号超时隐性TTOBRK1283个间隔超时隐性TT3BRK15,000a.这个位定时是基于各自的从机时钟。b.要检查这个唤醒时间对所有网络节点是否足够。如果没有其他的节点,位定时Tbit参照主机节点的SCI波特率(见第9章)。4.报文滤波报文滤波是基于整个标识符的。它要通过网络配置来保证只有一个从机任务对所发送的一个标识符作出响应。5.报文确认如果直到帧的结尾都没有检测到错误,这个报文对发送器和接收器都有效。如果报文被破坏,则主机和从机任务都认为报文没有被发送。注意:主机和从机任务在发送和接收到一个错误报文时所采取的行动并没有在协议规范中定义。像主机重新发送或从机进入低效运行(fall-back)操作都由应用的要求来决定,而且要在应用层中说明。在总线上传送的事件信息也可能丢失,而且这个丢失不能被检测到。6.错误和异常处理6.1错误检测这里共定义了5个不同的报文错误类型。产生错误的原因列在附录A.4:位错误向总线发送一个位的单元同时也在监控总线。当监控到的位值和发送的位值不同时,则在这个位定时检测到一个位错误。校验和错误如果所有接收到的数据字节的和模256后取反与校验和相加得到的结果不是“0xFF”,则检测到一个校验和错误(见3.1节,校验和场)。标识符奇偶错误标识符的奇偶错误(即:错误的标识符)不会被标出。典型的LIN从机应用不能区分一个未知但有效的标识符和一个错误的标识符。然而,我们强制所有的从机节点都要评估已知标识符ID场的8个位以及区分已知的和错误的标识符。从机不响应错误如果任何从机任务在发送SYNCH和标识符场前的最大时间TFRAME_MAX(见3.3节)内没有完成报文帧13广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com的发送,则产生一个不响应错误。同步场不一致错误如果从机检测到同步场的边沿在给定的容差外,则检测到一个同步场不一致错误(见第8章)。没有总线活动如果在接收到最后一个有效报文后的TTIMEOUT(见3.3节)时间内没有检测到有效的同步间隔场或字节场,则检测到一个没有总线活动情况。6.2错误标定LIN协议不标定检测到的错误。错误被标记在每个总线节点内而且必须能被第7章指定的故障界定过程访问。7.故障界定故障界定的概念主要依靠可以处理尽量多的错误检测、错误恢复和诊断的主机节点。故障界定主要由系统的要求决定,它除了一些很小的特征外都不是LIN协议的一部分。可能的错误原因请参看附录A.4,附录A.5是建议的故障界定过程。主机控制单元主机控制单元要检测下面的错误状况:\uf097主机任务发送:当回读自己的发送时,在同步或标识符字节检测到一个位错误或标识符奇偶错误。\uf097主机控制单元中的从机任务接收:当从总线要求或读出一个数据时,检测到一个从机不响应错误或校验和错误。从机控制单元任何从机控制单元都应检测以下的错误情况:\uf097从机任务发送:当回读自己的发送时,在数据或校验和场有位错误。\uf097从机任务接收:当从总线读值时,检测到一个标识符奇偶错误和一个校验和错误。当从总线上读值时,会检测到一个从机不响应错误。当一个从机要求从另外一个从机(由标识符决定)接收报文但在报文帧的最大长度TFRAME_MAX(见表3.3)的时间内总线上没有有效的报文,则可以检测到这个错误类型。但当从机不要求接收报文(由标识符决定),它就不需要检测这个错误。当在给定的容差(见第8章)内没有检测到同步场的边沿,则检测到一个同步字节不一致错误。8.振荡器容差片上时钟发生器使用内部校准可以使频率容差在±15%内。这个精确度足够可以报文流中检测到同步间隔。接着,使用同步场的精细校准可以确保正确地接收和发送报文。考虑到操作中温度以及电压漂移的影响,片上振荡器要在剩下的报文中保持稳定。表8.1振荡器容差时钟容差名字∆F/FMaster主机节点FTOL_RES_MASTER<±0.5%带石英晶振或陶瓷谐振器的从机节点(不需要同步)FTOL_RES_SLAVE<±1.5%14广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com无谐振器的从机,丢失同步FTOL_UNSYNCH<±15%无谐振器的从机,同步并有完整的报文FTOL_SYNCH<±2%9.位定时要求和同步过程9.1位定时要求如果没有其他规定,本文档中的所有位时间都使用主机节点的位定时作为参考。9.2同步过程同步场的模式是“0x55”。同步过程是基于模式下降沿之间的时间量度。下降沿在2、4、6和8位时间有效,可以简单地计算基本位时间Tbit。2Tbit012345678Tbit2Tbit2Tbit2Tbit同步场起始位停止位图9.1同步场我们建议也测量起始位和第7位下降沿之间的时间,并将得到的值除8。将结果除8是将二进制的定时器值向LSB移3位,将最低位四舍五入得出结果。10.总线驱动器/接收器10.1总体配置总线驱动器/接收器是一个ISO9141标准的增强设备。它包括双向LIN总线,这个双向总线连接每个节点的驱动器/接收器并通过一个终端电阻和一个二极管连接到电池节点的正极VBAT(见图10.1)。二极管可以在“丢失电池”(掉电)的情况下,强制防止ECU从总线不受控制地上电。要注意:LIN规范将电子控制单元(ECU)的外部电子连接电压作为参考电压,而不是将ECU内部电压作为参考电压。当设计LIN的收发器电路时,特别要考虑反向极性二极管的寄生电压降。VBATGNDVBATtSCIGNDECULINVSUP内部电源电阻图10.1单线的汽车总线接口概念(见附录A.6)15广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com10.2信号规范VBAT80%20%VBAT60%40%驱动器节点隐性显性斜坡时间斜坡时间隐性显性接收器节点图10.2总线的电压电平LIN物理层的电子直流参数和端电阻的值分别列在表10.1和表10.2。注意,在一个集成的电阻/二极管的网络中,必须通过如ESD元件使它不能在总线线路和ECU内部电源(VSUP)之间产生寄生电流通路。表10.1LIN物理层的电子直流参数参数最小值典型值最大值单位备注VBATa818V工作电压范围VBAT_NON_OP-0.340V器件不被破坏的电压范围IBUSb@VBUS=1.2V40200mA显性状态(驱动器启动)cIBUS-1.1VBAT/R显性状态(驱动器关闭)R:=在表10.2中定义的上拉电阻IBUS@VBUS=VBAT8VVBAT也可以应用IBUS@-12V.............[MF=报文帧(MessageFrame);IF-Space=帧间空间(InterFrameSpace)]它可以预知最差情况的定时。A.1.2总线唤醒过程在睡眠模式中,没有总线活动。任何从机节点都可以发送一个唤醒信号中止睡眠模式。在普通的情况下,主机节点会用一个同步间隔启动报文的发送:[SLEEPMODE][NODE-INTERNALWAKE-UP]..........18广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com如果主机节点没有响应,从机将最多再发送2次唤醒信号。然后,唤醒尝试将在某段时间内挂起,直到它恢复:[SLEEPMODE][NODE-INTERNALWAKE-UP][REPEATBUSWAKE-UPPROCEDUREIFSTILLPENDING]A.2ID场有效值表表A.2.1ID场有效值ID[0..5]DecHexID场76543210ID场DECHex数据字节数量00x0001100000001280x80210x0111110000011930xC1220x021001000010660x42230x03000000001130x03240x0411110001001960xC4250x0501100001011330x85260x06000000011060x06270x071001000111710x47280x08000000100080x08290x091001001001730x492100x0A11110010102020xCA2110x0B01100010111390x8B2120x0C1001001100760x4C2130x0D0000001101130x0D2140x0E01100011101420x8E2150x0F11110011112070xCF2160x101001010000800x502170x110000010001170x112180x1201100100101460x922190x1311110100112110xD32200x140000010100200x142210x151001010101850x552220x1611110101102140xD62230x1701100101111510x972240x1811110110002610xD82250x1901100110011530x992260x1A0000011010260x1A2270x1B1001011011910x5B2280x1C01100111001560x9C2290x1D11110111012210xDD219广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com300x1E1001011110940x5E2310x1F0000011111310x1F2320x200000100000320x204330x211001100001970x614340x2211111000102260xE24350x2301101000111630xA34360x2410011001001000x644370x250000100101370x254380x2601101001101660xA64390x2711111001112310xE74400x2801101010001680xA84410x2911111010012330xE94420x2A10011010101060x6A4430x2B0000101011430x2B4440x2C11111011002360xEC4450x2D01101011011730xAD4460x2E0000101110460x2E4470x2F10011011111110x6F4480x3011111100002400xF08490x3101101100011770xB18500x320000110010500x328510x3310011100111150x738520x3401101101001800xB48530x3511111101012450xF58540x3610011101101180x768550x370000110111550x378560x3810011110001200x788570x390000111001570x398580x3A01101110101860xBA8590x3B11111110112510xFB860a0x3C0000111100600x3C861b0x3D10011111011250x7D862c0x3E11111111102540xFE863d0x3F01101111111910xBF8a.标识符60(0x3C)保留用于主机请求命令帧(见3.2节)。b.标识符61(0x3D)保留用于从机响应命令帧。c.标识符62(0x3E)保留用于用户定义的扩展帧(见3.2节)。d.标识符63(0x3F)保留用于以后的LIN扩展格式。A.3校验和计算举例假设:报文帧有4个字节。20广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comData0=0x4AData1=0x55Data2=0x93Data3=0xE5hexCYD7D6D5D4D3D2D1D00x4A0x4A01001010+0x55=(加进位)0x9F0x9F01100001111111111+0x93=(加进位)0x1320x3310000111100001101+0xE5=(加进位)0x1180x1910000001111000001取反0xE6111001100x19+0xE6=0xFF11111111得出的校验和是0x19。校验字节是0xE6,是校验和的反。接收的节点可以用相同的加法机制检查数据和校验字节的一致性。校验和+校验字节必须等于0xFF。A.4报文错误的原因下面的错误机制可以导致报文的损坏:地电平的本地扰动接收方本地的地电平比发送方低,因此,接收节点将显性的总线电平(逻辑电平是“0”)认为是隐性(逻辑电平是“1”)或无效。输入信号的电平比显性信号电平的有效范围高。导致产生地电平偏移的原因可以是:例如在对地连接的寄生电阻上流过很高的负载电流。这个扰动不能通过发送节点的总线电压监控功能检测出来。电源电压的本地扰动接收器的本地电源电压比发送器的高,所以,接收节点将隐性的总线电平(逻辑电平是“1”)认为是显性(逻辑电平是“0”)或无效。输入信号的电平比隐性电平的有效范围低。导致本地电压上升的原因是:譬如,内部电子电源的二极管-电容电压保护。如果网络中有电压降,电容会暂时保持接收方内部电源电压比发送方内部电源电压高。这个扰动不能通过发送节点的总线电压监控功能检测出来。总线信号的总体电子扰动总线上的电压可以被譬如电磁干涉等因素扰动,此时的逻辑总线值是不正确的。这个扰动可以通过发送节点的总线电压监控功能检测出来。不同步时基如果从机节点的时基和主机节点的有显著的偏离,则在定义的位定时窗口中不会采样输入的数据位或发送输出的数据位(见第9章)。这个扰动不能通过发送节点的总线电压监控功能检测出来。发送的从机正确接收到自己的报文,但主机或其他从机接收到用“错误的频率”发送的错误报文。21广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comA.5故障界定的建议特殊的故障界定并不是LIN协议规范的一部分。在执行故障界定时,我们建议使用下面的过程:A.5.1主机控制单元\uf097主机任务发送:在回读自己的发送时可以检测到同步字节或标识符字节的位错误。主机控制单元通过增加主机发送错误计数器来保存任何发送错误的轨迹。当发送同步或标识符场被本地损坏时,计数器每次都加8。当两个场回读都正确时,计数器每次都减1(不低于0)。如果计数器的值超过C_MASTER_TRANSMIT_ERROR-THRESHOLD(假设总线上有重大的扰动),应用层将执行错误处理过程。\uf097在主机控制单元中的从机任务发送:在回读自己的发送时可以检测到数据场或校验和场的位错误。\uf097在主机控制单元中的从机任务接收:当从总线上读或等待一个数据时,可以检测到从机不响应错误或校验和错误。主机控制单元通过增加网络中每个可能的从机节点所提供的主机接收错误计数器[从机节点数量]来保存任何传输错误的轨迹。当没有接收到有效的数据场或校验和场,计数器每次都加8。当两个场都正确接收时,计数器每次减1(不低于0)。如果计数器的值超过C_MASTER_RECEIVE_ERROR-THRESHOLD(假设连接的从机节点不正常工作),应用层将执行错误处理过程。表A:5.1故障界定的错误变量错误变量建议的默认值C_MASTER_TRANSMIT_ERROR-THRESHOLD64C_MASTER_RECEIVE_ERROR-THRESHOLD64A.5.2从机控制单元\uf097从机任务发送:当回读自己的传输时可以检测到数据场和校验和场的位错误。\uf097从机任务接收:从总线上读值可以检测到校验和错误。从机将它的错误计数器加8,并假设如果这是仅由特殊节点(可以被主机检测到)产生的一个报文,则其他的发送节点损坏。如果所有的报文看起来都像是损坏的,则假设它自己的接收器电路有错误。如果正确接收到报文,错误计数器每次都减1。如果这个信息和这个控制单元的应用无关,报文的响应部分(数据以及校验和场)可以不需要处理,这种情况下可以忽略校验和计算。如果从机在6.1节指定的时间内没有看到任何总线活动,它将假设主机是不活动的。基于错误的处理,将启动一个唤醒过程或从机进入“limp-home”模式。假设内部时钟远离(定义的)范围,如3.3节和6.1节所述,从机看不到任何有效的同步报文,只能看到总线的通讯。从机要重新初始化,否则不能进入limp-home模式。由于从机不响应任何报文,错误处理将由主机完成。假设主机不向从机要求任何服务,从机将暂时空闲,可以接收有效的同步报文。此时,从机可以进入limp-home模式。A.6物理接口的电源电压定义VBAT表示控制单元连接器的电源电压。这个单元中电子部件的内部电源电压VSUP和VBAT不同22广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com(见图A.6.1)。它可以保护滤波器元件和总线的动态电压变化。这在LIN中使用半导体元件时要考虑到。RxTxVbatGnd(Kl.30)(Kl.31)VbusVsup1KVbatVsuptVdiode30KVbus80%Vbat主机ECU收发器ICVsup:电子器件的内部电源隐性电平图A.6.1外部电源电压VBAT和内部电源电压VSUP的差异示意图23广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comLIN配置语言规范目录1.介绍........................................................................................................................21.1本文档的目的?.....................................................................................................................22.修订历史.................................................................................................................22.11.0和1.1版的不同点............................................................................................................22.21.1和1.11版的不同点..........................................................................................................22.31.11和1.2版的不同点..........................................................................................................23.参考文献.................................................................................................................24.术语........................................................................................................................24.1缩写.......................................................................................................................................25.通用范围.................................................................................................................36.句法的概述..............................................................................................................37.LIN描述文件的定义................................................................................................37.1LIN协议的版本号定义...........................................................................................................47.2LIN语言版本号的定义...........................................................................................................47.3LIN速度的定义......................................................................................................................47.4节点定义................................................................................................................................47.5节点诊断地址的定义..............................................................................................................47.6信号定义................................................................................................................................47.7帧的定义................................................................................................................................57.8事件触发帧的定义.................................................................................................................67.9诊断帧的定义........................................................................................................................67.10进度表的定义......................................................................................................................77.11信号组的定义......................................................................................................................87.12信号编码类型定义...............................................................................................................97.13信号表示的定义.................................................................................................................108.例子......................................................................................................................108.1LIN描述文件.......................................................................................................................101广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com1.介绍这个文档是LIN规范的一部分。1.1本文档的目的?本文档讲述LIN工具认可的LIN描述语言的句法和语义。2.修订历史修订版本作者日期描述1.0VCT-IHt99-07-02规范的第一版1.1VCT-IHt99-12-14改进句法,纠正一个错误1.11VCT-IHt00-02-11删除以前的第8章1.2VCT-IHt00-08-28加入事件触发帧的定义1.2VCT-IHt00-11-13加入可选的帧长度定义草稿2加入诊断帧处理改变事件触发帧的定义2.11.0和1.1版的差别\uf097LIN协议和语言版本的数字在语法中改成char-string。\uf097纠正了组_偏移的描述错误。\uf097改进了解码类型的语法。\uf097根据修改升级示例。2.21.1和1.11版的差别\uf097删去仿真控制文件的描述\uf097纠正进度表例子的错误2.31.11和1.2版的差别\uf097增加事件触发帧的定义选项\uf097增加可选帧长度的定义\uf097改变事件触发帧的定义\uf097增加诊断地址的定义\uf097增加诊断帧的定义3.参考文献[1]LINProtocolSpecification1.2[2]LINAPIRecommendedPractice1.24.术语4.1缩写LINLocalInterconnectNetwork(局域互连网络)TBDTobedefined(待定义)ToolLINanalyser/emulator(LIN分析仪/仿真器)2广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com5.通用范围本文档所描述的语言是用于建立一个“LIN描述文件”。LIN描述文件描写了整个LIN网络,而且包含了监控网络所需的所有信息。这些信息足够可以通过工具的用户接口进行有限的仿真(如果工具支持)控制。(例如:选择仿真节点,选择进度表)LIN工具的用户接口没有定义句法或语义,使工具供应商可以开发特殊的工具。而且,LIN描述文件可以是用于向电子控制单元(LIN网络的一部分)写软件的一个组件。应用程序接口(API)被认为是(见参考资料[2])操作规程建议,在不同的应用程序中用一个唯一的方法访问LIN网络。但是LIN描述文件不能访问应用程序的功能特性。6.句法的概述下面的句法用经过修改的BNF(Bachus-NaurFormat)来描写:符号意义::=在::=左边的名字用在它右边的句法来表示<>用于标记后面定义的对象|表示选择。可以出现在左边或右边Bold粗体的文字是保留的,它或者是一个保留的字或是一个强制的标点[]方括号中的文字将出现一次或几次()将一些选择子句组合到一起char_string在引号中的任何字符串identifier标识符。典型用于对象的命名;标识符在声明变量时要符合普通C语言的规则integer整数。十进制整数(第一个数字是1~9)或十六进制整数(前缀是0x)real_or_integer实数或整数。实数通常是小数,而且有一个嵌入的小数点在使用这些句法的文件中,可以在任何地方加入注释。注释的句法和C++的一样,是从//到一行的结尾或忽略在定界符/和/之间的内容。7.LIN描述文件的定义::=LIN_description_file;()()()()()()()3广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com7.1LIN协议版本号的定义::=LIN_protocol_version=char_string;范围可以从“0.01”到“99.99”。7.2LIN语言版本号的定义::=LIN_language_version=char_string;范围可以从“0.01”到“99.99”。7.3LIN速度的定义::=LIN_speed=real_or_integerkbps;范围可以从5.00到20.00kbit/s。7.4节点定义::=Nodes{Master:,ms,ms;Slaves:([,]);}::=identifier所有的node_name标识符要在Nodes的子集中唯一。在Master保留字后的node_name标识符定义了主机节点。::=real_or_integertime_base的值定义了主机节点使用的时基,以产生允许的最大帧传输时间。时基可以定义在毫秒级。::=real_or_integerjitter的值定义了从时基起始点到帧头起始点(BREAK信号的下降沿)之间的最大和最小偏差。jitter应定义在毫秒级。(有关使用time_base和jitter的相关信息,请参见Schedule_tables子集的定义。)7.5节点诊断地址的定义::=Diagnostic_addresses{[:;]}::=identifier所有的node_name标识符应和在Nodes子集中定义的其中一个node_name标识符相同。::=integerdiag_addr在范围1~255之间定义了节点的诊断地址。(诊断地址0保留到以后使用。)7.6信号定义::=4广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comSignals{[:,,[,];]}::=identifier所有signal_name标识符在Signals子集中应唯一。::=integersignal_size是在1~16位之间,它定义了信号的大小。::=integerinit_value定义了可以被所有用户节点使用的信号值,直到帧所包含的信号被接收。相同的初始信号值应当从发布者节点发送(根据进度表)直到应用程序更新信号。::=identifier::=identifierpublished_by标识符和subscribed_by标识符应和在Nodes子集中定义的其中一个node_name标识符相同。7.7帧的定义::=Frames{[:,(,){[,;]}]}::=identifier所有的frame_name标识符应在Frames子集中唯一。::=integerframe_id的范围是0~63,它定义了帧的ID号。这个ID号在Frames子集的所有帧中唯一。根据LIN协议规范,帧的大小继承帧的ID。::=identifierpublished_by标识符要和在Nodes子集中定义的其中一个node_name标识符相同。::=integerframe_size是可选项,范围是1~8字节,定义了帧的大小。如果没有定义frame_size,则如在LIN协议规范中定义的,帧的大小将偏离frame_id。::=identifiersignal_name标识符应和在Signals子集中定义的其中一个signal_name标识符相同。在一个帧中定义所有信号应被和published_by标识符定义的相同的节点发布。::=integersignal_offset的值定义了帧中信号最低位的位置。它的值可以从0到(8frame_size-1)。信号的最低位将被首先发送。举例:信号“S”(大小=10bits)被放置于一个4字节的帧中,偏移是16。(S的LSB在偏移16,MSB在偏移25。)5广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comSSSSSSSSSS0781516232431字节0字节1字节2字节3首先发送最后发送信号的封装规则:\uf097强迫所有8位或大于8位信号的(最低位)字节对齐。\uf097小于8位的信号要求包含在一个单个字节中(因此,“小”信号不能越过字节的边界)。7.8事件触发帧的定义::=Event_triggered_frames{[:[,];]}::=identifier所有event_trig_frm_name标识符应在Event_triggered_frames的子集中唯一,而且和在Frames子集中定义的所有标识符都不同。::=integerframe_id的范围是0~63,它定义了帧的ID号。这个ID号在Frames子集和Event_triggered_frames子集的所有帧中唯一。::=identifier所有frame_name标识符应等于Frames子集中定义的其中一个标识符。由frame_name标识符列表定义的所有帧可以通过网络上不同的节点发布。注意:当由Frames子集中的frame_name定义的帧是一个事件触发帧时,这个帧在设计中受到额外的限制。事件触发的帧保留了第一字节。这个字节应包括在Frames子集中定义的完整的帧id(标识符和奇偶校验位)。只有当帧的内容在上次传输事件触发帧后更新了,从机任务才会响应事件触发帧的id(在Event_triggered_frames子集中定义)。注意:当事件触发帧和在Frames子集中定义的帧在网络中同时有效时,这两个帧的数据内容应一致。如果有多于一个节点同时响应事件触发帧,则会产生总线冲突。在这种情况下,主机ECU负责查询各个从机的ECU以获得在Frames子集中定义的带帧id的所有映射帧。7.9诊断帧的定义::=Diagnostic_frames{MasterReq:60{MasterReqB0,0;MasterReqB1,8;MasterReqB2,16;MasterReqB3,24;MasterReqB4,32;MasterReqB5,40;MasterReqB6,48;6广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comMasterReqB7,56;}SlaveResp:61{SlaveRespB0,0;SlaveRespB1,8;SlaveRespB2,16;SlaveRespB3,24;SlaveRespB4,32;SlaveRespB5,40;SlaveRespB6,48;SlaveRespB7,56;}}MasterReq和SlaveResp保留的帧名字用于识别诊断帧。MasterReq根据LIN协议规范的定义有固定的帧ID(60)和固定的长度(8字节)。MasterReq只能由主机节点发送。SlaveResp根据LIN协议规范的定义有固定的帧ID(61)和固定的长度(8字节)。SlaveResp只能由前面的MasterReq帧所选择的从机节点发送。从机节点的选择由在Diagnostic_addresses子集中定义的从机诊断地址决定。保留的信号名字MasterReqB0到MasterReqB7将MasterReq帧中的信号定义成8位的长整数。保留的信号名字SlaveRespB0到SlaveRespB7将SlaveResp帧中的信号定义成8位的长整数。MasterReqB0和SlaveRespB0可以如LIN协议规范3.2节所定义的进行使用。预定义诊断信号(带有MasterReq和SlaveResp帧)的封装描述在普通的帧描述句法后面。(signal_name,signal_offset;)7.10进度表的定义::=Schedule_tables{[{[delayms;]}]}::=identifier所有的schedule_table_name标识符应在Scheduletables子集中唯一。::=identifierframe_name标识符应等于在Frames子集中定义的frame_name标识符的其中一个。::=real_or_integerframe_time定义了两个相邻帧之间的时间间隔。这个时间要比允许的最大帧传输时间长,而且应当是主机节点时基值的精确倍数。frame_time的值应定义在毫秒级。进度表的选择由主机应用程序控制。进度表之间的切换应在帧时间(当前发送的帧)过去后立即完成。举例:Schedule_tables{VL1_ST1{7广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comVL1_CEM_Frm1delay15ms;VL1_LSM_Frm1delay15ms;VL1_CPM_Frm1delay15ms;VL1_CPM_Frm2delay20ms;}}#1VL1_CEM_Frm115ms#2VL1_LSM_Frm115ms#3VL1_CPM_Frm115ms#4VL1_CPM_Frm220ms#1VL1_CEM_Frm115ms...时间time_base=5ms进度表入口进度表入口进度表入口进度表入口抖动最差情况下的帧传输时间备用延迟延迟延迟延迟进度表入口延迟每个进度表入口的延时要比jitter和最坏情况下的帧传输时间长(见参考文献[1])。注意!如何使用以及在不同的进度表中切换是应用程序的问题,但相应的机制在参考文献[2]中有描述。7.11信号组的定义信号组子集在LIN文件中是一个可选项。::=Signal_groups{[:{[,;]}]}::=identifier所有signal_group_name标识符应在signal_group子集中唯一,而且和在Signals子集中定义的signal_name标识符不同。::=integergroup_size的范围是1~(8frame_size)位,它定义了信号的长度。::=identifiersignal_name标识符应和在Signals子集定义的其中一个signal_name标识符相同。::=integergroup_offset的值定义了组中信号最低位的位置。它值的范围是0~(group_size-1)。最低位被首先发送。组中不使用的位(位置)应填上0。信号组通常由一个帧中的信号组成。根据组的定义,大于16位的单个信号可以用工具显示(使用预定义的信号编码类型)。7.12信号编码类型定义信号编码类型子集是LIN文件的可选部分。::=Signal_encoding_types{[{8广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com[]}]}::=identifier所有的signal_encoding_type_name标识符应在Signalencodingtypes子集中唯一。::=logical_value,(,);::=physical_value,,,,(,);::=bcd_value;::=ascii_value;::=integer::=integer::=integer::=real_or_integer::=real_or_integer::=char_string其中signal_value、min_value、max_value值的范围在0~65535之间。max_value的值要大于或等于min_value。工具可以使用信号编码类型信息,用逻辑/放大的物理值和/或监控过程中一个预定义的字符串来代替原始值。如果原始值在定义的最大和最小值范围内,物理值可以用下面的算式计算:物理值=放大倍数原始值+偏移举例:Signal_encoding_types{1BitDig{logical_value,0,”off”;logical_value,1,”on”;}Temp{physical_value,0,250,0.5,-40,”degree”;physical_value,251,253,1,0,”undefined”;logical_value,254,”outofrange”;logical_value,255,”error”;}}7.13信号表示的定义信号表示子集是LIN文件中的可选项。::=Signal_representation{[:9广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com([,]);]}::=identifiersignal_encoding_type_name标识符应和在signal_encoding_types子集中定义的其中一个signal_encoding_type_name标识符相同。::=::=identifier::=identifiersignal_name标识符应是和Signals子集中定义的其中一个signal_name标识符相同。signal_group_name标识符应是和signal_groups子集中定义的其中一个signal_group_name标识符相同。8.示例8.1LIN描述文件//这是一个LIN描述示例文件//由IstvanHorvath发布LIN_description_file;LIN_protocol_version=“1.0”;LIN_language_version=“1.1”;LIN_speed=19.2kbps;Nodes{Master:CEM,5ms,0.1ms;Slaves:LSM,CPM;}Signals{RearFogLampInd:1,0,CEM,LSM;PositionLampInd:1,0,CEM,LSM;FrontFogLampInd:1,0,CEM,LSM;IgnitionKeyPos:3,0,CEM,LSM,CPM;LSMFuncIllum:4,0,CEM,LSM;LSMSymbolIllum:4,0,CEM;StartHeater:3,0,CEM;CPMReqB0:8,0,CEM;CPMReqB1:8,0,CEM;CPMReqB2:8,0,CEM;CPMReqB3:8,0,CEM;CPMReqB4:8,0,CEM;CPMReqB5:8,0,CEM;CPMReqB6:8,0,CEM;CPMReqB7:8,0,CEM;ReostatPos:4,0,LSM;HeadLampBeamLev:4,0,LSM;10广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comFrontFogLampSw:1,0,LSM;RearFogLampSw:1,0,LSM;MLSOff:1,0,LSM;MLSHeadLight:1,0,LSM;MLSPosLight:1,0,LSM;HBLSortHigh:1,0,LSM;HBLShortLow:1,0,LSM;ReoShortHigh:1,0,LSM;ReoShortLow:1,0,LSM;LSMHWPartNoB0:8,0,LSM;LSMHWPartNoB1:8,0,LSM;LSMHWPartNoB2:8,0,LSM;LSMHWPartNoB3:8,0,LSM;LSMSWPartNo:8,0,LSM;CPMOutputs:10,0,CPM;HeaterStatus:4,0,CPM;CPMGlowPlug:7,0,CPM;CPMFanPWM:8,0,CPM;WaterTempLow:8,0,CPM;WaterTempHigh:8,0,CPM;CPMFuelPump:7,0,CPM;CPMRunTime:13,0,CPM;FanIdealSpeed:8,0,CPM;FanMeasSpeed:8,0,CPM;CPMRespB0:1,0,CPM;CPMRespB1:1,0,CPM;CPMRespB2:1,0,CPM;CPMRespB3:1,0,CPM;CPMRespB4:1,0,CPM;CPMRespB5:1,0,CPM;CPMRespB6:1,0,CPM;CPMRespB7:1,0,CPM;}Frames{VL1_CEM_Frm1:32,CEM{RearFogLampInd,0;PositionLampInd,1;FrontFogLampInd,2;IgnitionKeyPos,3;LSMFuncIllum,8;LSMSymbolIllum,12;StartHeater,16;}11广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comVL1_CEM_Frm2:48,CEM{CPMReqB0,0;CPMReqB1,8;CPMReqB2,16;CPMReqB3,24;CPMReqB4,32;CPMReqB5,40;CPMReqB6,48;CPMReqB7,56;}VL1_LSM_Frm1:33,LSM{ReostatPos,0;HeadLampBeamLev,4;FrontFogLampSw,8;RearFogLampSw,9;MLSOff,10;MLSHeadLight,11;MLSPosLight,12;HBLSortHigh,16;HBLShortLow,17;ReoShortHigh,18;ReoShortLow,19;}VL1_LSM_Frm2:49,LSM{LSMHWPartNoB0,0;LSMHWPartNoB1,8;LSMHWPartNoB2,16;LSMHWPartNoB3,32;LSMSWPartNo,40;}VL1_CPM_Frm1:50,CPM{CPMOutputs,0;HeaterStatus,10;CPMGlowPlug,16;CPMFanPWM,24;WaterTempLow,32;WaterTempHigh,40;CPMFuelPump,56;}12广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comVL1_CPM_Frm2:34,CPM{CPMRunTime,0;FanIdealSpeed,16;FanMeasSpeed,24;}VL1_CPM_Frm3:51,CPM{CPMRespB0,0;CPMRespB1,8;CPMRespB2,16;CPMRespB3,24;CPMRespB4,32;CPMRespB5,40;CPMRespB6,48;CPMRespB7,56;}}Schedule_tables{VL1_ST1{VL1_CEM_Frm1delay15ms;VL1_LSM_Frm1delay15ms;VL1_CPM_Frm1delay20ms;VL1_CPM_Frm2delay20ms;}VL1_ST2{VL1_CEM_Frm1delay15ms;VL1_CEM_Frm2delay20ms;VL1_LSM_Frm1delay15ms;VL1_LSM_Frm2delay20ms;VL1_CEM_Frm1delay15ms;VL1_CPM_Frm1delay20ms;VL1_CPM_Frm2delay20ms;VL1_LSM_Frm1delay15ms;VL1_CPM_Frm3delay20ms;}}Signal_groups{CPMReq:64{CPMReqB0,0;CPMReqB1,8;CPMReqB2,16;CPMReqB3,24;13广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comCPMReqB4,32;CPMReqB5,40;CPMReqB6,48;CPMReqB7,56;}}Signal_encoding_types{1BitDig{logical_value,0,”off”;logical_value,1,”on”;}2BitDig{logical_value,0,”off”;logical_value,1,”on”;logical_value,2,”error”;logical_value,3,”void”;}Temp{physical_value,0,250,0.5,-40,”degree”;physical_value,251,253,1,0,”undefined”;logical_value,254,”outofrange”;logical_value,255,”error”;}Speed{physical_value,0,65500,0.008,250,”km/h”;physical_value,65501,65533,1,0,”undefined”;logical_value,65534,”error”;logical_value,65535,”void”;}}Signal_representations{1BitDig:RearFogLampInd,PositionLampInd,FrontFogLampInd;Temp:WaterTempLow,WaterTempHigh;Speed:FanIdealSpeed,FanMeasSpeed;}14广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comLINAPI操作规程建议目录1.介绍........................................................................................................................21.1本文档的目的........................................................................................................................22.修订历史.................................................................................................................23.参考文献.................................................................................................................24.术语........................................................................................................................24.1缩写.......................................................................................................................................25.总体描述.................................................................................................................26.API规范..................................................................................................................36.1初始化...................................................................................................................................36.1.1l_sys_init.....................................................................................................................36.2信号调用................................................................................................................................46.2.1信号类型.....................................................................................................................46.2.2读调用.........................................................................................................................46.2.3写调用.........................................................................................................................46.3标志调用................................................................................................................................46.3.1l_flg_tst.......................................................................................................................56.3.2l_flg_clr.......................................................................................................................56.4过程调用................................................................................................................................56.4.1l_sch_tick....................................................................................................................56.4.2I_sch_set....................................................................................................................66.5接口调用................................................................................................................................66.5.1l_ifc_init.......................................................................................................................66.5.2l_ifc_connect...............................................................................................................66.5.3l_ifc_disconnect..........................................................................................................76.5.4l_ifc_ioctl.....................................................................................................................76.5.5l_ifc_rx........................................................................................................................76.5.6l_ifc_tx.........................................................................................................................76.5.7l_ifc_aux......................................................................................................................86.6用户提供的调用.....................................................................................................................86.6.1l_sys_irq_disable........................................................................................................86.6.2l_sys_irq_restore........................................................................................................87.范例........................................................................................................................97.1LINAPI的使用......................................................................................................................97.2LIN描述文件........................................................................................................................111广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com1.介绍本文档是有关在LIN软件模块中使用应用程序接口(API)的操作规程建议,并作为对LIN标准规范的补充。1.1本文档的目的本文档的目的是为LIN软件模块和应用软件定义一个合适的接口。2.修订历史修订版本作者日期描述1.0VCT-CBn00-02-10操作规程建议的第一版1.1VCT-CBn00-08-28根据在00-07-03发布的请求变化更新。改变l_sch_tick函数的返回值政策,在l_sch_set函数中增加输入参数。1.2VCT-CBn00-11-13根据在00-09-26发布的请求改变更新。为l_ifc_connect和l_ifc_disconnect函数增加返回值。在l_ifc_init函数中加入额外的描述文字。纠正动态l_ifc_ioctl函数的返回值类型错误。3.参考文献[1]LINConfigurationlanguagespecification1.114.术语4.1缩写APIApplicationProgramInterface(应用程序接口)ECUElectronicControlUnit(withµ-Controller/µ-Processor)(带微控制器/微处理器的电子控制单元)LCFGLINConfigurationtool(PC-program)(LIN配置工具(PC程序))LINLocalInterconnectNetwork(局域互连网络)TBDTobedefined(待定义)5.总体描述本章叙述了如何在应用程序中集成LINAPI的一个可行的解决方案。LINAPI是一个网络软件层,它在用户为任意的ECU建立应用程序时,隐藏了LIN网络配置的详细情况(例如:信号如何映射到相应的帧)。所以,它向用户提供了一个API,这个API着重于LIN网络的信号传输。前面介绍的PC工具“LCFG”将处理从网络配置到完成程序代码的这些步骤。它为用户提供了配置灵活性。LCFG的输入是一个或很多LIN网络配置文件(见参考文献[1])和一个本地描述文件(另外叙述)。网络配置文件包括指定LIN网络的完整定义。本地文件叙述节点的专用实体(譬如:连接到信号/帧和HW规范的标志)。LCFG可以产生ANSIC文件和H文件,这些文件应当和应用软件一起编译。而且用户可以将提供的LIN库包含到应用程序中。使用LIN库和API来创建用LIN作为通讯接口的应用的流程如下面的图1所示。2广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comLCFG配置描述文件(1~n)本地描述文件LIN库自动生成C-/H-文件应用程序编译最终的应用程序图1LIN配置的流程图6.API规范LINAPI是一组函数,它们为了减少和已有软件冲突的风险而给API一个独立的名字空间。所有函数和类型都有前缀“l_”(小写的“L”和一条“下划线”)。LIN软件定义了以下的类型:\uf097l_bool\uf097l_ioctl_op\uf097l_irqmask\uf097l_u8\uf097l_u16为了获得效率,这些函数大多数是静态函数(C预处理器宏#define,由LIN配置工具自动产生)。6.1初始化6.1.1l_sys_init原型l_booll_sys_init(void);描述l_sys_init执行LIN软件的初始化。返回值“0”:如果成功初始化。“非零”:初始化失败。注意用户在LIN软件中使用任何其他API函数前必须首先调用l_sys_init函数。3广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com6.2信号调用6.2.1信号类型信号有3种不同的类型:\uf02dl_bool:一位的信号(如果出错则是0,其他情况是非零)\uf02dl_u8:1~8位大小的信号\uf02dl_u16:9~16位大小的信号6.2.2读调用动态原型l_booll_bool_rd(l_signal_handlesss);l_u8l_u8_rd(l_signal_handlesss);l_u16l_u16_rd(l_signal_handlesss);静态应用l_booll_bool_rd_sss(void);l_u8l_u8_rd_sss(void);l_u16l_u16_rd_sss(void);其中sss是信号的名字(例如:l_u8_rd_EngineSpeed())描述读和返回名字是sss的信号的当前值。注意无6.2.3写调用动态原型voidl_bool_wr(l_signal_handlesss,l_boolv);voidl_u8_wr(l_signal_handlesss,l_u8v);voidl_u16_wr(l_signal_handlesss,l_u16v);静态应用voidl_bool_wr_sss(l_boolv);voidl_u8_wr_sss(l_u8v);voidl_u16_wr_sss(l_u16v);其中sss是信号的名字(例如:l_u8_wr_EngineSpeed(v))。描述将名字是sss的信号的当前值设置成v。注意无6.3标志调用标志是ECU的本地对象,用于应用和LIN软件之间的同步。标志可以由LIN软件自动设置,应用程序只能测试/清除标志。6.3.1l_flg_tst动态原型4广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.coml_booll_flg_tst(l_flag_handlefff);静态应用l_booll_flg_tst_fff(void);其中fff是标志的名字(例如:l_flg_tst_RxEngineSpeed())。描述返回值是C的布尔类型,表示由名字fff指定的标志的当前状态(即:如果标志被清除则返回0,否则返回值非零)。注意无6.3.2l_flg_clr动态原型voidl_flg_clr(l_flag_handlefff);静态应用voidl_flg_clr_fff(void);其中fff是标志的名字(例如:l_flg_clr_RxEngineSpeed())。描述将名字是fff的标志的当前值置零。注意无6.4过程调用6.4.1l_sch_tick动态原型l_u8l_sch_tick(l_ifc_handleiii);静态应用l_u8l_sch_tick_iii(void);其中iii是接口的名字(例如:l_sch_tick_MyLinIfc())。描述l_sch_tick函数跟在进度表的后面。当帧变得合适时,它将被初始化发送。如果当前的进度表已经到达末尾,l_sch_tick从在最后一次调用l_sch_set时设置的最后一个进度表的开始处再次启动。ECU的每个接口必须独立调用l_sch_tick,其速率在网络配置文件中定义。返回值“非零”:如果下一次调用l_sch_tick会启动下一个进度表入口的帧的发送,返回值非零。返回值在这种情况下是下一个进度表入口的号码(从进度表的开始算起)。所以,如果进度表有N个入口,则返回值可以是1~N。否则是“零”。注意l_sch_tick只能在主机节点使用。l_sch_tick的调用不仅仅启动下一个帧的发送,它还会更新由前面一次l_sch_tick调用所接收到的信号值(即,这个接口的上一个帧)。(见l_sch_set返回值的使用注意事项。)5广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com6.4.2I_sch_set动态原型voidl_sch_set(l_ifc_handleiii,l_schedule_handlesch,l_u8ent);静态应用voidl_sch_set_iii(l_schedule_handlesch,l_u8ent);其中iii是接口的名字(譬如:l_sch_set_MyLinIfc(MySchedule1,0))。描述设置下一个进度表sch紧跟在l_sch_tick函数后,接口是iii。在当前的进度表到达它的下一个进度表的入口时,新的进度表被立即激活。输入参数ent定义了起始的新进度表的起始入口点。如果进度表有N个入口,ent的值可以是0~N,如果ent是0或1,新的进度表将从起点启动。注意l_sch_set只能在主机节点使用。Ent的输入值和l_sch_tick的返回值组合可以用于譬如:用另外一个进度表暂时中断一个进度表,而且能返回被中断进度表的中断点。6.5接口调用6.5.1l_ifc_init动态原型voidl_ifc_init(l_ifc_handleiii);静态应用voidl_ifc_init_iii(void);其中iii是接口的名字(例如:l_ifc_init_MyLinIfc())。描述l_ifc_init初始化名字为iii的控制器(即设置如波特率等内部值)。由调用l_ifc_init设置的默认进度表是所谓的NULL_Schedule,没有帧会被发送和接收。注意接口在本地描述文件中列出。用户在使用其他相关的LINAPI函数接口(例如:l_ifc_connect()或l_ifc_rx())前必须首先调用函数l_ifc_init()。6.5.2l_ifc_connect动态原型l_booll_ifc_connect(l_ifc_handleiii);静态应用l_booll_ifc_connect_iii(void);其中iii是接口的名字(譬如:l_ifc_connect_MyLinIfc())。描述调用l_ifc_connect会将接口iii连接到LIN网络上,可以向总线传输报头和数据。返回值“0”:表示“连接操作”成功“非零”:表示“连接操作”失败注意无6广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com6.5.3l_ifc_disconnect动态原型l_booll_ifc_disconnect(l_ifc_handleiii);静态应用l_booll_ifc_disconnect_iii(void);其中iii是接口的名字(譬如:l_ifc_disconnect_MyLinIfc())。描述调用l_ifc_disconnect会将接口iii和LIN网络断开连接,不能向总线传输报头和数据。返回值“0”:表示“断开操作”成功“非零”:表示“断开操作”失败注意无6.5.4l_ifc_ioctl动态原型l_u16l_ifc_ioctl(l_ifc_handleiii,l_ioctl_opop,voidpv);静态应用l_u16l_ifc_ioctl_iii(l_ioctl_opop,voidpv);其中iii是接口的名字(譬如:l_ifc_ioctl_MyLinIfc(MyOp,&MyPars))。描述这个函数控制了协议和接口专用的参数。其中iii是接口的名字,在op中定义的操作要应用到这个接口。指针pv指向可选的参数块。它所支持的操作由接口类型决定,程序员必须参考目标绑定文件中专用接口的文档。文档会指出它执行什么操作,返回值是多少。注意参数块的解释基于所选的操作。一些操作不需要这个模块。这种情况下,指针pv可置为NULL。当参数块是相关的,那么它的格式由接口决定而且必须考虑目标绑定文档的接口规范。6.5.5l_ifc_rx动态原型voidl_ifc_rx(l_ifc_handleiii);静态应用voidl_ifc_rx_iii(void);其中iii是接口的名字(例如:l_ifc_rx_MyLinIfc())。描述当接口iii接收到数据的一个字符时调用。譬如:当接收到数据的一个字符时,在由UART引起用户定义的中断处理程序中调用。这种情况下函数会在UART的控制寄存器执行必要的操作。注意应用程序负责绑定中断和设置正确的接口处理(如果使用了中断)。6.5.6l_ifc_tx动态原型7广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.comvoidl_ifc_tx(l_ifc_handleiii);静态应用voidl_ifc_tx_iii(void);其中iii是接口的名字(譬如:l_ifc_tx_MyLinIfc())。描述当接口iii发送了数据的一个字符时调用。例如:当发送了数据的一个字符时,在由UART引起用户定义的中断处理程序中调用。这种情况下函数会在UART的控制寄存器执行必要的操作。注意应用程序负责绑定中断和设置正确的接口处理(如果使用了中断)。这个函数在发送和l_ifc_rx函数调用联合的情况下可以为空。这将在目标绑定文件中为用户说明。6.5.7l_ifc_aux动态原型voidl_ifc_aux(l_ifc_handleiii);静态应用voidl_ifc_aux_iii(void);其中iii是接口的名字(例如:l_ifc_aux_MyLinIfc())。描述这个函数可以在从机节点使用,使从机与主机在iii接口发送的BREAK和SYNC字符同步。譬如:由连接到iii接口的硬件引脚侧面检测引起,在用户定义的中断处理程序中调用。注意l_ifc_aux只能在从机节点中使用。这个函数与硬件连接有紧密关系,而实际的执行和使用在目标绑定文件中描述。当在l_ifc_rx函数中进行BREAK/SYNC检测时,这个函数甚至可以是空的。6.6用户提供的调用用户必须提供一对可以从LIN软件中调用的函数,使可以某些内部操作前禁止所有控制器中断,并可以在某些操作后恢复以前的状态(这些函数用于例如l_sch_tick函数中)。6.6.1l_sys_irq_disable动态原型l_irqmaskl_sys_irq_disable(void);描述这个函数必须在不产生控制器中断的情况下使用。注意无6.6.2l_sys_irq_restore动态原型voidl_sys_irq_restore(l_irqmaskprevious);描述用户使用这个函数时必须恢复previous标记的状态。注意8广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com无7.示例本章将给出一个非常简单的示例显示如何使用API。这里将给出C应用程序代码和LIN描述文件。7.1LINAPI的使用//文件:hello.c/作者:ChristianBondesson/描述:在LIN主机ECU中使用LINAPI的示例代码/注意:这里使用静态API!!!/$Header$/日期:作者:描述:/------------------------/990830VCT-CBn新建立/000828VCT-CBn采用APIversion1.1(更新了l_sch_tick和l_sch_set函数/001113VCT-CBn采用APIversion1.2(更新了带返回值的l_ifc_connect函数)/包含文件:/--------------/#includefile#include"lin.h"//程序:l_sys_irq_restore/描述:在调用l_sys_irq_disable前,将中断屏蔽恢复为1/入口参数:previous-旧的中断级/voidl_sys_irq_restore(l_imaskprevious){/某些控制器的专用事件...}/l_sys_irq_restore结束//程序:l_sys_irq_disable/描述:禁止控制器的所有中断并返回中断级,使可以在以后恢复/l_imaskl_sys_irq_disable(void){/某些控制器的专用事件...}/l_sys_irq_disable结束//中断:lin_char_rx_handler/描述:名字是LIN_ifc的接口的LIN接收字符中断处理程序/voidINTERRUPTlin_char_rx_handler(void)9广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com{/只调用LINAPI提供的函数/执行实际的工作l_ifc_rx_MyLinIfc();}/lin_char_rx_handler结束///中断:lin_char_tx_handler/描述:名字是LIN_ifc的接口的LIN发送字符中断处理程序/voidINTERRUPTlin_char_tx_handler(void){/只调用LINAPI提供的函数/执行实际的工作l_ifc_tx_MyLinIfc();}/lin_char_tx_handler结束//程序:main/描述:Main程序...初始化部分/voidmain(void){/初始化LIN接口if(l_sys_init()){/如果初始化LIN软件失败}else{l_ifc_init_MyLinIfc();/初始化接口if(l_ifc_connect_MyLinIfc()){/连接LIN接口失败}else{/已连接,现在已经准备好发送/接收/设置正常的进度表从这个指定接口的/起点开始运行l_sch_set_MyLinIfc(MySchedule1,0);}}start_main_application();/初始化完毕,启动实际的应用程序}/main结束10广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com/根据LIN描述文件,最小的LIN节拍时间是10ms...voidmain_application_10ms(void){/完成某些应用专用的操作.../如读和写信号就是一个小型的例子if(l_flg_tst_RxInternalLightsSwitch()){l_u8_wr_InternalLightsRequest(l_u8_rd_InternalLightsSwitch());l_flg_clr_RxInternalLightsSwitch();}/信号的输入/输出,与返回值无关,/因此,无论如何也不会切换进度表(void)l_sch_tick_MyLinIfc();}/main_application_10ms结束7.2LIN描述文件//文件:hello.ldf/作者:ChristianBondesson/描述:示范程序的LIN描述文件/$Header$/日期:作者:描述:/------------------------/990830VCT-CBn新创建LIN_description_file;LIN_protocol_version=“1.0”;LIN_language_version=“1.1”;LIN_speed=19.2kbps;Nodes{Master:CEM,5ms,0.1ms;Slaves:LSM;}Signals{InternalLightsRequest:2,0,CEM,LSM;InternalLightsSwitch:2,0,LSM,CEM;}Frames{VL1_CEM_Frm1:1,CEM{InternalLightsRequest,0;}VL1_LSM_Frm1:2,LSM{InternalLightsSwitch,0;11广州周立功单片机发展有限公司Tel:(020)3873097638730977Fax:38730925http://www.zlgmcu.com}}Schedule_tables{MySchedule1{VL1_CEM_Frm1delay15ms;VL1_LSM_Frm1delay15ms;}}Signal_encoding_types{2BitDig{logical_value,0,“off”;logical_value,1,“on”;logical_value,2,“error”;logical_value,3,“void”;}}Signal_representations{2BitDig:InternalLightsRequest,InternalLightsSwitch;}12',)