本文是笔者在学习LIN的相关知识时,找到的一个网址,其中对于LIN的各项解释简洁明了的同时由通俗易懂。笔者对其进行了转载,以供笔者后续复习。同时在整个网页上还有部分实用的LIN小工具,所以建议大家移步LIN_C: LIN学习模块 (vector.com)进行学习。
过去几十年来,我们为汽车开发了越来越多的功能,目的是让驾驶更安全、更舒适以及更环保。在此过程中,越来越多的功能通过电子组件实现,因此对信息交换的需求也在不断增长。这些电子组件包括ECU以及传感器和执行器。
长期以来,传感器和执行器通常都是通过单独的导线连接到ECU上。(参见图片:Conventional Networking)。但连接数量的增加导致线束更粗、更重,从而对重量和空间的要求更高。此外,为不同车型生产线束也更为复杂,因为必须进行大量的定制修改。而且,线路数量增加导致系统更容易出错。综合来看,这些问题导致车载网络成本不断增加。
1983年,Robert Bosch GmbH开发了CAN,并于1986年在SAE(Society of Automotive Engineers,汽车工程学会)大会上将其作为全新串行总线系统发布。CAN可以通过一对导线对多个信号进行位串行传输,从而减少所需的线束。
尽管如此,CAN用于连接舒适系统领域的传感器和执行器还是过于昂贵。在1990年代中期,一些汽车整车厂和供应商开始开发更经济的解决方案。由于这些专有总线系统涉及的零件较少,因而在降低成本方面的效果有限。因此,一些整车厂共同组成了LIN联盟,目的是开发统一、标准化且经济高效的通信系统。
在宝马的倡议下,戴姆勒-奔驰(现今的戴姆勒)、摩托罗拉(现今的恩智浦)和VCT(现今的明导)于1998年底成立了一个工作组,旨在开发全新的总线系统。除发起者外,工作组成员还包括奥迪、沃尔沃和大众。工作组成员作为LIN联盟的创始成员,并组成了指导委员会。
通过定义简单且经济高效的物理层、精简通信协议,以及节点和网络的软件自动开发方法(工作流),联盟定义了对全新车辆总线系统的要求。
此后,LIN做为子总线,几乎用于所有车辆。LIN特别适用于汽车空调、座椅、车门和后视镜控制模块等舒适系统应用场景。与常规接线不同(参见图片:Conventional Networking),所有传感器和执行器均有总线接口,并通过总线连接至中央ECU(参见图片:Networking in LIN)。该ECU做为CAN-LIN网关。
第一版规范于1999年制定。次年,联盟于底特律SAE大会上发布了1.1版本,包含以下部分:LIN协议规范、LIN配置语言规范、LIN应用程序接口规范。
2000年对LIN1.1规范进行修订,同年11月发布了LIN1.2版本。2002年11月发布了LIN 1.3版本,特别修订了物理层。
为应对汽车行业的发展趋势,经过一年的修订,2003年9月发布了2.0版本,主要目标是利用“货架”节点的概念来提高零件产量。为了使网络的开发更经济高效、更快速、更简单和更安全,实现了软件的自动设计和生成。
“货架”节点是执行简单标准任务(例如驱动电动机)的总线节点,基本上是标准产品,经过少量开发即可使用,便于大量购买。典型的应用场景包括座椅、车窗升降机、后视镜、滑动式天窗和后舱盖的控制器。LIN2.0规范还补充了配置方法和用于描述“货架”节点的语法。
2006年11月发布了规范2.1,包含八个规范。2010年12月发布了LIN规范2.2,修正了一些小错误,并弱化了位采样规则。
联盟不仅定义了数据通信所需的一组标准,还定义了统一的工作流,以便更轻松、更快速地开发网络(参见:Graphic Workflow)。其核心是描述整个网络的LDF。
信所需的一组标准,还定义了统一的工作流,以便更轻松、更快速地开发网络(参见:Graphic Workflow)。其核心是描述整个网络的LDF。
LDF定义了网络的所有属性,通过这些属性可以自动生成用于通信的软件组件。此外,LDF可以为各种分析、测量和测试工具或残余总线仿真器提供必要信息。
LIN配置语言规范描述了创建LDF的语法。由于LDF语法非常简单,因此手动创建LDF也很轻松,不过借助系统定义工具来创建LDF是更好的选择。
从规范2.0开始,推出了针对节点的统一描述语言,即LIN节点能力语言,可用于描述“货架”节点。报文和信号定义以及节点诊断功能等信息保存在NCF文件中。
LIN网络包含多个通过物理传输介质互连的节点(参见图片:Network)。两种类型的节点之间存在明显的差异:控制总线访问的主节点(master)始终只有一个,而发送和接收信息的从节点(slave)则有多个。
出于成本原因,一般不使用专用通信控制器,但必须将协议以软件组件的形式集成到微控制器。节点必须明确定义为主节点或从节点。微控制器通过串行接口连接到收发器,即SCI(Serial Communication Interface,串行通信接口)。
收发器将总线以物理方式连接到网络,并将逻辑位序列转换为可传输总线电平,反之亦然。收发器具有Tx端和Rx端:Tx端用于生成总线电压,Rx端用于解析接收的电平。此外,收发器具有可通过总线唤醒节点的机制,即唤醒(Wakeup)。
在LIN中,物理信号传输仅需一根导线,即单线(single wire)。为将电气辐射保持在限制范围内,LIN的传输速率限制为20 kBit/s。另一个限制是推荐的最大节点数为16。
收发器通过微控制器的SCI接口连接。最初,使用UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器)作为串行接口。但通过UART难以实现无故障接口,因此目前也使用带ESCI(Enhanced SCI,增强型SCI)或LIN SCI的微控制器。
网络中的串行数据传输以字节为单位。SCI首先发送每个字节的最低有效位(lsb),每个字节中还有一个起始位和一个停止位。十个位组成一个SCI帧。一条报文由多个SCI帧构成(参见图片:Frame)。
每个SCI帧均以显性起始位开头,这会产生一个下降沿,所有接收方据此进行重同步。节点可以延迟SCI帧的传输,这会导致传输暂停。这些暂停称为字节间隔。
LIN使用常规单线线路,因此无法使用差分电压信号传输物理信号。在单线传输中,逻辑0和逻辑1通过预先定义的阈值电压区分。典型拓扑结构为总线。
为确保足够的抗噪能力,使用ECU的电源电压和车辆地(参见图片:Drivers)作为总线电平的参考电位。接收方将低于电源电压的40%的电平当做逻辑0,将高于电源电压的60%的电平当做逻辑1(参见图片:Signal Specification for Receivers)。发送方发送低于20%的电压电平作为逻辑0,发送高于80%的电压电平作为逻辑1(参见图片:Signal Specification for Senders)。
在电路方面,LIN网络相当于集电极开路。所有节点均通过收发器被动连接到总线。当所有节点的Tx晶体管均处于截止状态时,上拉电阻(pull-up resistor)可确保总线电平与电源电压(高电平)几乎一致。Tx晶体管在导通状态下导通时,总线电平下拉至几乎接地(低电平)。因此,低电平代表显性位,可覆盖隐性的高电平。
从节点上拉电阻阻值为30kΩ,主节点上拉电阻阻值为1kΩ。与从节点不同,主节点的上拉电阻必须在外围电路实现。如果没有电源电压,集电极支路中的二极管会阻止通过总线为节点供电。
LIN 网络中的通信基于主从结构。这意味着始终有一个节点作为主节点,控制着各从节点之间的所有通信。实现方式是:从节点仅在主节点发出请求时才会发送信息。主节点在总线上发送请求(帧头,header),然后相应的从节点给出对应请求的(响应,response)。请求和响应组合在一起称为帧(参见图片:Frame)。
由于主节点授权网络中的响应发送权限,因此总线访问方式(bus access method)称为“授权令牌”。其优势在于通信几乎毫无冲突,也意味着可以实现可预测的数据传输。这是因为对于主节点的单个请求都有其对应的响应,这样就可以建立发送方案(调度表,Schedule)。因此,授权令牌方法是确定性总线访问方式。
主节点集中控制的缺点之一在于,主节点可能发生故障,从而导致所有通信失败。因此,该总线系统不适用于必须保证功能正常运行的安全性至关重要的应用。另一个缺点在于,这种方式不适用于事件驱动通信。由于必须由主节点发出请求,因此各从节点无法自主访问总线以发送报文。
为弥补与事件驱动通信有关的缺点,LIN扩展了附加报文。这些报文的发送规则与授权令牌不同。附加报文类型共有四种,分别是无条件帧(Unconditional Frame)、零星帧/偶发帧(Sporadic Frame)、事件触发帧(Event Triggered Frame)和诊断帧(Diagnostic Frame)。
由于没有通信控制器,因此协议是以运行于微控制器的软件组件的形式实现的。通过这些软件组件,特定节点接收执行通信所需的主任务或从任务。原则上,每个节点都有一个接收和发送信息的从任务。主节点还有额外的主任务,负责授权发送权限并控制总线访问(参见图片:Master and Slave Task)。
网络开始运行后,主节点中将启动主任务。然后,主任务开始按顺序循环发送调度表中的帧头。调度表中定义了各个报文的时隙(slot)。这些时隙必须大到足够发送帧头和帧响应(参见图片:Frame)。时隙中可以传输一个完整的帧。
从任务的响应行为是指从任务应如何响应收到的帧头。可能的响应行为如下:发送、接收或忽略响应。发出的响应将被所有需要该响应的从任务接收(参见图片:Communication Process)。LDF中描述了各节点的预期响应行为。
主节点根据LDF种定义的发送方案控制网络中的所有通信。由于时序固定,因此网络中的通信可以预测(参见图片:Schedule)。
调度表包含多个时隙,每个时隙传输一个帧。时隙的大小由微时隙定义。微时隙是主任务处理调度表的最小时间间隔。微时隙的长度就是通信过程中的时基(time base)。
在计算时隙大小时,增加了抖动值。这是时隙的标称起点与实际起点之间的潜在时间差。如果一个帧没有完全填满时隙,在下一个时隙开始前,将会出现一段等待时间,这一时段称为IFS(Inter-Frame Space,帧间间隔)(参见图片:Computing the Length of a Frame Slot)。
如果系统设计人员正确计算了所有帧的时隙,则通信进行期间不会发生冲突。每个时隙必须大到能够保证传输相关的帧(参见交互图:Computing the Length of a Frame Slot)。由于通常使用价格便宜但功能较弱的处理器,因此节点最多可预留40%的时间来保证报文传输。
通过将想要发送的报文的帧头发送到总线上,主节点发起所有报文。帧头由同步间隔场(Sync Break Field)、同步场(Sync Field)和PID(Protected Identifier,受保护ID)场构成(参见图片:Frame Header)。
同步间隔场是一个特殊的位序列,从节点根据同步间隔场识别帧头的开头。然后,主节点发送同步间隔场界定符,再发送同步场。从节点必须通过同步场与主节点达成同步。因此,这两个场用于启动数据传输以及与主节点的时间同步。
发送同步场后,主节点传输报文的ID。ID对应于LDF中定义的通信关系,以及各从节点的响应行为。从节点可以不作出回应,也可以发送或接收响应。由于ID具有重要意义,因此使用奇偶校验位P0和P1对其进行保护。ID和奇偶校验位的组合就是PID。
主节点将同步间隔场发送到总线,以明确表示传输开始。同步间隔场可细分为同步间隔(Sync Break)和同步间隔界定符(Sync Break Delimiter)(参见图片:Frame Header)。
同步间隔至少包含13个显性位。由于使用的是价格便宜的振荡器,因此频率可能存在±14%的波动。通过传输至少13个显性位,可确保慢速从节点也能够检测到数据传输的启动。
同步间隔是一个没有起始位和停止位的特殊序列,不能在任何常规SCI帧中发送。要想通过SCI发送同步间隔场,主节点可以以较低的传输速率发送数值为0x00的标准SCI帧。这可以通过将典型传输速率减半来实现。
同步间隔符具有至少十三个显性位,而同步间隔界定符则具有至少一个显性位,最多四个隐性位(参见图片:Frame Header)。这会分隔同步间隔与后续的同步场,后者使用SCI进行串行通信,因此以显性起始位开头。
为确保所有从节点使用相同时钟发送和接收,主节点先发送同步间隔场,然后发送同步场。同步场数值为0x55。为计算出时钟,从节点测量同步场的第一个下降沿与最后一个下降沿之间的时间差,然后除以八,结果等于一个位时间。
ID用于区分报文,从而可以建立通信关系。由于主节点始终在总线上发送帧头,因此从节点可以根据ID确定是否需要发送响应。
ID由六个位构成,可用的值有64个(参见图片:Protected Identifier),其中4个ID值已预先定义(参见图片:Reserved Identifiers)
ID受两个奇偶校验位保护。ID与奇偶校验位一起组成PID。奇偶校验位P0和P1的计算基于异或逻辑,其中P0表示偶校验,P1表示奇校验(参见图片:PID Computer)。
相较于其他数据保护机制,此种保护方法的质量并不是很高。例如,假设误码率为10-3,则此种保护方法的出错概率约为10-5 。这意味着,每一百个位错误中会有一个检测不到。
从节点使用帧响应来响应主节点的请求。各从节点根据帧头中的ID来确定是否需要生成响应。通常,帧由来自主节点的帧头和来自从节点的响应构成(参见图片:Frame Response)。
一个帧响应最多可以传输八个数据字节。从最低有效字节到最高有效字节以升序进行传输。同时,字节通常是从最低有效位到最高有效位进行传输的。这意味着从响应的开头到结尾,位和字节的有效性单调递增(参见图片:Byte Order)
所有节点原则上均可接收帧响应(广播)。具体哪个节点会使用响应中的数据在LDF中定义(参见图片:Typical Communication)。这些有用数据受校验和保护。
###### 4.4.4 RS(Response Space,响应间隔)
主节点的请求(帧头)和从节点的响应之间有一段空闲时间,即RS。在此时段内,节点从接收状态切换为发送状态。
无条件帧通常用于传输有用数据,相当于标准帧,无需其他任何条件即可使用。所有其他类型的报文仅用于特定情况。
无条件帧由帧头和响应构成。主节点将帧头作为请求发送到总线,然后,特定的从节点以响应方式进行答复。从任务根据ID确定是否需要发送响应。此外,主节点中的从任务也可以响应对应ID的帧头。LDF文件中描述了具体由哪个节点发送相关响应。
由于无条件帧包含帧头和响应之间的唯一关系,因此运行期间不会发生冲突。一个时隙只能由一个节点使用。因此,无条件帧非常适合传输周期性数据,其中报文出现在总线上的时间是可预测的。
此报文类型用于传输事件驱动的信息,只有当需要时才会由节点发送。本质上,事件触发帧等同于标准化的无条件帧。不同之处在于,多个从节点可以向来自主节点的帧头发送响应。
主节点发送具有事件触发帧ID的帧头时,对应的从节点都可以将其特定响应追加到该帧头之后。由于帧头后只会跟一个响应,因此事件触发帧的响应中第一个数据字节通常为该响应对应无条件帧的PID。这样就可以确定哪个节点发送的响应。为确保事件触发帧的长度,所有对应同一事件触发帧的无条件帧中响应的数据字节数均相同。
由于可能会有多个节点同时对事件触发帧进行响应,因此可能会发生冲突。主节点使用冲突解决调度表(Collision Resolving Schedule)解决这个问题。这是一种特殊的发送方案,该方案将依次发送对应这一事件触发帧的所有无条件帧的帧头,并按常规的无条件帧处理它们的响应。主节点在检测到冲突后跳转至冲突解决调度表进行一轮发送,然后跳转回最初的调度表。这保证了所有需要发送的响应最终都能被发送出来。
主节点使用零星帧/偶发帧发送很少使用的信息。此帧等同于无条件帧,只是会有多个无条件帧共享同一时隙。主节点根据需要发送零星帧/偶发帧。如果无需发送,则相关的时隙为空。零星帧/偶发帧可以当作是主节点的事件触发帧。
如果至少一个与无条件帧相关的信号发生了更改,则存在发送需求。多个从节点需要进行发送时,不会发生冲突,因为主节点会根据LDF中定义好的优先级顺序,将这些无条件帧依次在调度表多轮运行的同一时隙进行发送。
根据ISO 15765-2和ISO 14229 UDS,协议定义了两个诊断帧:主请求帧和从响应帧。主请求帧通常用作诊断请求或用于配置从节点,从响应帧用作诊断响应。
与无条件帧、事件触发帧和零星帧/偶发帧类似,这两个诊断帧均由帧头和帧响应构成。对于主请求帧(诊断请求),主节点传输帧头和帧响应。帧头以ID=0x3C传输。对于从响应帧(诊断响应),主节点发送帧头,被诊断的从节点发送帧响应。帧头以ID=0x3D发送(参见图片:Diagnostic Principle)。
数据传输保护是车辆电子系统可靠性的前提。尽管采取了实现电磁兼容设计的措施,但传输过程中仍可能发生位错误。为增强数据完整性,需要采用错误检测机制,并且必须进行有效的错误处理。
尽管状态管理(Status Management)框架中定义了各种错误检测机制和一种错误信号通知类型(参见图片:Error Detection),但LIN中未针对错误处理制定任何规定。在实现节点功能时需自行定义和设置错误处理方法。
LIN中定义如下检测机制:
状态管理用于检测有缺陷的从节点。即使存在有缺陷的节点,仍需确保通信正常运行。主节点执行状态管理,从节点必须在每个通信周期内报告一次自己的状态。
为报告自己的状态,每个从节点有自己的状态位。从节点每个发送周期使用无条件帧发送一次状态位,并由主节点评估。如果从节点在上个通信周期内检测到错误,则此位为隐性。如果未检测到错误,则此位为显性。
校验和有两种:经典校验和(classic checksum)和增强型校验和(enhanced checksum)。若使用经典校验和,则仅保护有用数据。若使用增强型校验和,则保护有用数据和PID。自2.0版协议起,增强型校验和用于ID为0到59的报文。为保持向下兼容,始终使用经典校验和保护诊断帧。
校验和的计算公式如下:
通过翻转八位和算法求得校验和,然后从任务将校验和进行传输。接收方根据同一算法计算接收的数据字节的校验和,但不取反。如果接收方计算所得的结果与接收到的校验和之和不等于0xFF,则接收方会检测到传输错误。
这种保护方法不是特别完善,但实现了用于子总线区域时所需的数据完整性,尤其适合含少量数据字节的无条件帧。这种保护方法的出错概率随着数据字节的增加而增加。
ISO传输协议定义了帧响应的结构及其所含数据的功能。无论是主节点帧响应还是从节点帧响应,其第一个字节始终包含待配置或待诊断从节点的正式节点地址(NAD)。
帧响应的第二个字节(PCI)提供有关传输模式的信息。ISO传输协议定义了未分段数据传输和分段数据传输。未分段数据传输使用一个主请求帧和一个从响应帧SF(Single Frame,单帧)执行。例如,用于配置节点的诊断请求通常是未分段的。
如果八个数据字节不足以传输诊断数据,则使用分段数据传输。在这种情况下,数据被分拆到多个帧。这种情况下的第一个帧称为FF(first frame,首帧),而所有后续帧则称为CF(consecutive frames,连续帧)。FF中显示了整个数据块的大小。
主节点使用SID告知从节点应执行的诊断服务(参见图片:Service Identifier)。SID在诊断请求中位于帧响应的第三个字节。在从响应帧中,使用RSID(Response Service ID,响应服务ID)替代SID。LIN规范中“节点配置与标识”部分对诊断服务进行了描述。
协议中定义了单独的网络管理,规定了从节点的四种状态:关机、初始化、运行和睡眠。此外,还定义了状态转换(参见交互图:Slave State Model)。上电将从节点切换为初始化状态且切换必须在100毫秒内完成。然后,从节点自动切换为运行状态。
主节点可以通过发送Go-to-sleep命令使所有从节点进入睡眠状态。此命令是一个主请求帧,第一个数据字节的值为0x00(相当于NAD=0),其他七个数据字节值为0xFF。
如果四到十秒内没有总线活动,从节点会转换为睡眠状态。根据规范,切换到睡眠状态并不需要同步切换为低功耗状态。这意味着微控制器不会完全切换为节能模式(节能模式下会关闭不必要的硬件资源)。
除主节点外,每个从节点都可以唤醒子网。从节点可以在总线上发送唤醒信号(参见交互图:Slave State Model)。此信号是一个显性脉冲,持续时间最短250微秒,最长5毫秒。检测到唤醒信号后,节点将退出睡眠状态并转换为初始化状态。再过100毫秒后,节点切换为运行状态。
如果从节点负责唤醒,并且初始化后150毫秒内未检测到任何帧头,则该节点将发送另一个唤醒信号(参见交互图:Wakeup Procedure)。如果连续3次尝试唤醒失败(3个唤醒信号 = 1个唤醒块),则从节点将停止唤醒程序1.5秒,然后才可以再次启动(如果适用)。具体行为最终取决于系统设计需求。
LIN是目前常见的总线系统之一,如今已应用于大多数车辆。LIN主要用于车内舒适系统领域,因为此领域通常不需要较高的传输速度或特别保护的传输信息。典型的应用场景包括空调系统、座椅、车门和后视镜控制模块。
AUTOSAR等其他规范也对LIN进行了定义。从理论上讲,可以在各个节点中使用与AUTOSAR兼容的软件组件。但实际上很少这样操作,因为这会增加成本。通常,仅在主节点中使用与AUTOSAR兼容的软件组件。
访问AUTOSAR联盟网站,请点击此处:
在Vector网站上,您将找到有关LIN的其他有用信息。您可以从下载中心下载技术文章、应用说明和CANoe演示版。CANoe演示版包含LIN的示例配置,这些配置可用于模拟LIN网络中的通信。
技术文章