概述
本文对Lin的特征,物理层,协议层和应用层进行说明。
1. Lin简介
1.1 Lin通信节点主要有物理层,协议层,应用层三大部分。
信号和消息位于帧中的数据段,是节点向其他节点传达的实质信息。信号被封装在信号帧,其ID的范围是0x00~0x3B,消息则被封装在诊断帧中,其专用ID是0x3C 和0x3D.
1.2. 主/从机节点与主/从机任务
LIN 的拓扑结构为单线总线,应用了单一主机多从机的概念。总线电平为12V,传输位速率(Bitrate)最高为20kbps。由于物理层限制,一个LIN 网络最多可以连接16 个节点,典型应用一般都在12 个节点以下,主机节点有且只有一个,从机节点有1 到15 个。
主机节点(Master Node)包含主机任务(Master Task)和从机任务(Slave Task),从机节点(Slave Node)只包含从
机任务,如图1.5 所示。
2. LIN 的特点
LIN 具有以下特点:
(1) 网络由一个主机节点和多个从机节点构成。
(2) 使用LIN 可以大幅度的削减成本,表现在以下方面:
● 开放型规范:规范可以免费从官方网站获得。
● 硬件成本削减:基于普通UART/SCI 接口的低成本硬件实现,无需单独的硬件模块支持;从机节点无需高精度时钟就可以完成自同步;总线为一根单线电缆。
● 装配成本削减:LIN 采用了工作流(Work Flow)和现成节点(Off-the-shelf Node)的概念,将网络装配标准化,并可通过LIN 传输层进行再配置。
● 缩短软件开发周期:LIN 协议将API(Application Programming Interface,应用编程接口)标准化。
(3) 信号传输具有确定性,传播时间可以提前计算出。
(4) LIN 具有可预测的EMC(ElectroMagnetic Compatibility,电磁兼容性)性能。为了限制EMI(ElectroMagnetic Interference,电磁干扰)强度,LIN 协议规定最大位速率为20kbps。
(5) LIN 提供信号处理、配置、识别和诊断四项功能。
3. Lin协议层
3.1 帧的结构
帧包含帧头(Header)和应答(Response)两部分。帧头由主机发送,从机接收帧头后对帧头作出应答或者接收应答,亦或是不作任何反应。
帧头主要由同步间隔段,同步段,PID段(受保护ID段)三部分组成。其中同步间隔段的数据格式是唯一一个不遵循字节域格式的。同步段是固定的0x55数值,作用是保持帧的同步性。
应答部分由数据段和校验和段构成。
此外,在帧头和应答之间有应答间隔。
字节间间隔包括同步段和受保护ID段之间的间隔、数据段各字节间之间的间隔以及数据段最后一个字节和校验和段之间的间隔。
下面对各个段进行详细说明:
3.1.1 同步间隔段(Break Field)
同步间隔段由同步间隔(Break)和同步间隔段间隔符(Break Delimiter)构成,如图3.3 所示。同步间隔是至少持续13 位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并且帧中的任何其它字段都不会发出大于9 位的显性电平,因此同步间隔可以标志一个帧的开始。同步间隔段的间隔符是至少持续1 位的隐性电平。
从机任务接收帧头的同步间隔段时,以该从机任务所在节点的位速率为准,当检测总线上出现持续11 位的显性电平时,认为是帧的开始。当从机节点使用精度较高的时钟时,识别阈值可以选择9.5 位。
协议没有规定同步间隔段的发送和检测方法。
注:1. 发送显性电平的下限为13 位,上限应保证帧的最大传输时间THeader_Maximum在规定范围之内。
(若同步段和PID之间的字节间隔取最小值0bit,同步间隔界定符取最小值1,则同步段上限可取26bit。另外。同步间隔界定符的上下限是1~14 bit*(特别说明:class B:对应的最小值是1 bit,Class C:对应的最小值是0.75bit)。。总之,同步段和字节间隔的总长度不能超过341.4-20=27.6bit)。
2. 当从机节点选择的时钟(精度不高的时钟)在容限范围内(±14%)时,(13 - 11.18) / 13= 14%,即是说当处于最差情况下(时钟相差14%)时,从机任务按照自身时钟测量的主机节点发送的13位显性电平不会低于11.18 位,若识别阈值高于11.18 位,那么当选用14%的时钟时,就会出现主机发送同步间隔,而从机检测不到的情形。由于在除同步间隔段以外,帧中任何其余部分都不会发送超过9位的显性电平,(10.26 - 9) / 9 = 14%,即是说判断阈值必须大于10.26位,否则可能把帧中其余部分误判作为同步间隔段。综上,识别阈值为11 位显性电平。
3. 当从机节点选择的时钟(精度较高的时钟)在容限范围内(±1. 5%)时, 识别阈值应在9.135 位(由(9.135 - 9) / 9 = 1.5%计算而来)到12.805 位(由(13 – 12.805) / 13 =1.5%计算而来)之间。具体设定阈值会随着所选时钟的精度,取值范围在9.135 位到12.805 位之间浮动。
3.1.2 同步段(Sync Byte Field)
字节域定义
字节域包括1 位起始位(Start Bit,显性) + 8位数据位 + 1 位停止位(Stop Bit,隐性),是一种标准UART 数据传输格式,如图3.4 所示。在完整的一帧中,除了同步间隔段,其余段都是通过字节域的格式传输的。
在LIN 帧中,数据传输都是先发送LSB (Least Significant Bit,最低有效位),最后发送MSB (Most Significant Bit,最高有效)。
同步段的固定格式
LIN 同步段以下降沿为判断标志,采用固定字节0x55(转换为二进制为01010101b)。同步段的字节域如图3.5 所示。
从机节点可以不采用精度高的时钟,而采用片上振荡器等精度和成本相对较低的时钟,由此带来的与主机节点时钟产生的偏差,需要通过同步段进行调整,调整的结果是使从机节点数据的位速率与主机节点一致。同步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。计算公式如下:
通过计算,可以得到主机节点实际传输1 位所用的时间,即位速率。
3.1.3 PID段(受保护ID段-Protected Identifier Field)
受保护ID 段的前6 位叫作帧ID(Frame ID),加上两个奇偶校验位后称作受保护ID。如图3.6 所示。
帧ID 的范围在0x00~0x3F 之间,共64 个。帧ID 标识了帧的类别和目的地。从机任务对于帧头作出的反应(接收/发送/忽略应答部分)都是依据帧ID 判断的。**如果帧ID 传输错误,将会导致信号无法正确到达目的地, 因此引入奇偶校验位。**校验公式如下,其中“⊕”代表“异或”运算,“¬”代表“取非”运算。
P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ¬ (ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
由公式可以看出,PID 不会出现全0 或全1 的情况,因此,如果从机节点收到了“0xFF”或“0x00”,可判断为传输错误。
依据帧ID 不同将帧进行分类,如表3.1 所示,对各种类型的详细说明参照3.2 节。
特别说明:
虽然数据段的字节长度范围是1~8,但实际LIN帧中的字节个数只有2/4/8三种格式,而且各个ID帧数据段传输的字节个数是由PID段的ID4和ID5确定的。详细对应关系如下表所示:
3.1.4 数据段(Data Field)
节点发送的数据位于数据段,包含1 到8 个字节,先发送编号最低的字节Data1,编号依次增加,如图3.7 所示。
数据段包含了两种数据类型,信号(Signal)和诊断消息(Diagnostic messages)。
信号(Signal)由信号携带帧传递,一个帧ID 对应的数据段可能包含一个或多个信号。信号更新时要保证其完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher);其余的一个或多个节点接收,它们称为信号的收听节点(Subscriber)。
诊断消息(Diagnostic message)由诊断帧传递,对消息内容的解析由数据自身和节点状态决定。
注:
- 协议没有规定帧中的哪一部分显示数据长度码的信息,数据的内容和长度是由系统设计者根据帧ID 事先约定好的(请参考3.1.3节“特别说明”)。
- 总线上的数据是以广播形式被发送到总线上的,任何节点均能接收,但并非所有信号对每个节点都有用。收听节点接收帧的应答是因为该节点的应用层会使用这些信号,而对于其余节点,由于用不到这些信号,所以没有必要作接收处理,将忽略帧的应答部分。发布和收听由哪个节点进行完全根据应用层的需要由软件或配置工具实现。一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能存在零个、一个或多个发布节点。
3.1.5 校验和段(Checksum Field)
校验和段是对帧中所传输的内容进行校验,如图3.8 所示。
校验和分为标准型校验和(Classic Checksum)及增强型校验和(Enhanced Checksum),如表3.2 所示。
采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧ID 来判断采用哪种校验和。
校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于256 时就减去255),并将所得最终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为0xFF,则校验和无误,这在一定程度上保证了数据传输的正确性。
例如:采用标准型校验和,Data1 = 0x4A,Data2 = 0x55,Data3 = 0x93,Data4 = 0xE5,计算方法如表3.3
所示:
3.1.6 帧传输时间的计算
帧在总线上传输的时间计算如表3.4 所示。其中 TFrame_Maximum为帧在总线上传输的最大时间;THeader_Maximum为帧头在总线上传输的最大时间;TResponse_Maximum为应答在总线上传输的最大时间;THeader_Nominal为帧头额定传输时间:同步间隔段(包含同步间隔和同步间隔段间隔符)的最小传输时间 +同步段传输时间 + 受保护ID段传输时间;帧头的余量THeader_Rest包含字节间间隔,规定为帧头额定传输时间的0.4 倍;TResponse_Nominal为应答额定传输时间:数据段传输时间 + 校验和段传输时间;应答的余量TResponse_Rest包含应答间隔以及字节间间隔,规定为应答额定传输时间的0.4 倍;Ndata表示数据段包含N个字节。
3.2 帧的类型
下面对常用的5类帧(无条件帧,事件触发帧,偶发帧,诊断帧,保留帧)进行详细说明。
3.2.1 无条件帧(Unconditional Frame)
无条件帧是具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧。
无条件帧在主机任务分配给它的固定的帧时隙(参照3.3 节)中传输。总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答),如图3.10 所示,其中列出的帧ID 的值只是为了举例说明,协议并未强制规定。
帧ID = 0x30 应答部分的发布节点为从机节点1,收听节点为主机节点。典型应用如从机节点1 向主机节点报告自身某信号的状态。
帧ID = 0x31 应答部分的发布节点为主机节点,收听节点为从机节点1 和从机节点2。典型应用如主机节点向从机节点发布信息。
帧ID = 0x32 应答部分的发布节点为从机节点2,收听节点为从机节点1。典型应用如从机节点之间彼此通信。
3.2.2 事件触发帧(Event Triggered Frame)
事件触发帧是主机节点在一个帧时隙(参照3.3 节)中查询各从机节点的信号是否发生变化时使用的帧,当存在多个发布节点时,通过冲突解决进度表(参照3.3 节)来解决冲突。
当从机节点信号发生变化的频率较低时,主机任务一次次地轮询各个信号会占用一定的带宽。为了减小带宽的占用,引入了事件触发帧的概念。
事件触发帧允许两个以上的节点对帧头作应答而不视为错误。当发生冲突时,主机节点需要重新作轮询,这样会增加一些响应时间,但由于事件触发帧本身就用来处理低概率事件,总的来说还是节省了带宽。
原先用作轮询的无条件帧,称为与该事件触发帧关联的无条件帧,即事件触发帧的应答部分是与其关联的无条件帧所提供的应答。当发生冲突时,需要立刻中断当前的进度表(参照3.3 节),启动冲突解决进度表(Collision Resolving Schedule),重新调用这些关联的无条件帧。其中,冲突解决进度表要求包含所有的关联的无条件帧。
图3.11 示例描述了事件触发帧的传输状况。事件触发帧的帧ID 为0x10,与其关联的两个无条件帧的帧ID 分别是0x11 和0x12,这些帧ID 的值只是为了举例说明,协议并未强制规定。
与事件触发帧关联的多个无条件帧需要满足以下5 个条件:
(1) 数据段包含的数据字节数等长;
(2) 使用相同的校验和类型;
(3) 数据段的第一个字节为该无条件帧的受保护ID,这样才能够知道应答是哪个关联的无条件帧发送出来的;
(4) 由不同的从机节点发布;
(5) 不能与事件触发帧处于同一个进度表。
3.2.3 偶发帧(Sporadic Frame)
偶发帧是主机节点在同一帧时隙(参照3.3 节)中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁。
与事件触发帧一样,偶发帧的应答也关联了一组无条件帧。规定偶发帧只能由主机节点作为发布节点。偶发帧的传输可能出现三种状况:1)当关联的无条件帧没有信号发生变化时,该时隙(参照3.3 节)保持沉默,如图3.12 第一个帧时隙所示,主机节点连帧头都不需要发送;2)当其中一个关联的无条件帧包含的信号发生了变化,则发送该关联的无条件帧的应答部分;3)如果有两个或两个关联的无条件帧包含的信号发生了变化,则按照事先规定好的优先级,优先级较高的关联的无条件帧获得发送权,优先级较低的要等到下一个偶发帧的帧头到来时才能发送应答。由于主机节点是唯一的发布节点,所以主机节点事先就知道各个关联信号的优先级别,这样在传输时就不会产生冲突。
引入偶发帧的目的在于为进度表(参照3.3 节)增加一些动态特性——当主机节点的信号发生变化时才有通信发生。事件触发帧和偶发帧反映了帧在不同时机(信号变化或未发生变化)的传输状况,引入它们的目的是为了增加通信的灵活性。
3.2.4 诊断帧(Diagnostic Frame)
诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。主机请求帧(Master Request Frame,MRF),帧ID = 0x3C,应答部分的发布节点为主机节点;从机应答帧(Slave Response Frame,SRF),帧ID = 0x3D,应答部分的发布节点为从机节点。数据段规定为8 个字节,一律采用标准型校验和。诊断帧的具体用法参照第5 章。
3.2.5 保留帧(Reserved Frame)
保留帧的帧ID 为0x3E 和0x3F,为将来扩展用。
3.3 进度表(Schedule)
进度表是帧的调度表,规定总线上帧的传输次序以及各帧在总线上的传输时间。进度表位于主机节点,主机任务根据应用层需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表规定的入口处开始顺序执行,到进度表的最后一个帧时,如果没有新的进度表启动,则返回到当前的进度表第一个帧循环执行;也有可能在执行某个进度表当中发生中断,执行另一个进度表后再返回,如事件触发帧的冲突解决过程就是一个典型的例子,如图3.13 所示。
进度表除规定了帧ID 的传输次序外,还规定了**帧时隙(Frame Slot)**的大小。帧时隙是进度表规定的一个帧的帧头起始到下一个的帧的帧头起始的时间。每个帧的帧时隙都可以不同,一个帧时隙对应了进度表的一个入口,如图3.14 所示,其中i = 1~8。
其中TFrame_Maximum为帧在总线上传输的最大时间,参照3.1.6 节的表3.4。抖动(Jitter)为帧的同步间隔段的下
降沿与帧时隙起始时刻相差的时间。时基(Time Base)为LIN子网的最小计时单位,通常设定为5ms或10ms。帧
时隙必须为时基的整数倍,并且起始于时基的开始时刻(称为时基的节拍(Tick)),切换到另外一个进度表时一定
要等到当前帧时隙的结束。
3.4 状态机(State Machine)实现
3.4.1 主机任务的状态机
当进度表启动后,主机任务依次发送同步间隔段、同步段和受保护ID 段,如图3.15 所示。
3.4.2 从机任务的状态机
从机任务负责发布或者接听帧的应答。包括两个状态机:
1. 同步间隔段和同步段检查器
2. 帧处理器
从机任务状态机如表3.5 所示,其中帧处理的状态机如图3.16 所示。
备注:关于3.5章节的网络管理和3.6章节的状态管理请参考“Lin2.1通信协议入门解析—笔记(2)”。