4. LIN协议层

LIN(Local Interconnect Network)是一种低成本、单主多从的串行通信总线,广泛用于车身电子中的车窗、雨刮、座椅、空调风门等对带宽要求不高的场景。理解LIN协议层,核心就是理解一帧报文如何被拆解、发送、接收和校验。LIN的一帧报文由报文头(Header)和响应(Response)两部分组成,报文头由主节点发出,响应可以由主节点或从节点发出。报文头包含同步间隔场、同步场和标识符场;响应包含数据场和校验和场。掌握这五个字段的时序与语义,是进行LIN节点集成、调试和排障的基础。

一、帧结构总览:报文头与响应的分工

LIN总线采用单线双向传输,逻辑电平以显性(Dominant,约0V)和隐性(Recessive,约电池电压)表示。一帧完整报文的结构如下:

  • 同步间隔场(Break Field):至少13个显性位,用于唤醒并通知所有从节点一帧即将开始。
  • 同步场(Sync Field):固定字节0x55,从节点据此测量主节点波特率并完成时钟同步。
  • 标识符场(Identifier Field):6位ID加2位奇偶校验,决定帧类型、方向、长度和发布/订阅关系。
  • 数据场(Data Field):1~8字节,承载实际信号,低字节先发。
  • 校验和场(Checksum Field):1字节,分为经典校验和与增强校验和两种。

报文头与响应之间允许存在帧内响应空间,主节点发送完标识符后,目标从节点必须在规定时间内开始发送响应,否则主节点会判定为超时错误。

LIN 一帧报文结构(报文头 + 响应) 报文头 Header(主节点发送) 同步间隔场 ≥13 显性位 同步场 0x55 标识符场 ID + P0/P1 响应 Response(主节点或从节点发送) 数据场 1~8 字节(低字节先发) 校验和场 1 字节 时序要点: ① 同步间隔场用于帧起始唤醒;② 同步场固定 0x55,从节点据此校准波特率;③ 标识符场决定帧方向与长度;④ 响应必须在帧内响应空间内启动。

二、同步间隔场与同步场:从节点如何“对齐时钟”

同步间隔场是LIN帧的起始标志,长度至少为13个显性位,随后跟随至少1个隐性位作为间隔符。从节点检测到这一超长显性电平后,会进入接收准备状态。紧接着的同步场固定为0x55,其二进制为01010101,具有规律的方波特征。从节点通过测量0x55中下降沿之间的时间,计算出主节点的实际位时间,从而调整自身波特率。这一机制使LIN无需晶振也能实现可靠通信,是低成本节点设计的关键。

同步场0x55的位模式为“0-1-0-1-0-1-0-1”,从节点通常采用下降沿捕获并计算连续边沿间隔,再取平均或查表修正,以抑制抖动。

三、标识符场:ID、奇偶校验与帧类型

标识符场共8位,低6位为帧ID(0x00~0x3F),高2位为奇偶校验位P0和P1。ID不仅标识报文,还隐含了帧的长度、方向与发布者。LIN 2.x中,ID 0x3C和0x3D分别用于主请求帧和从响应帧,属于诊断帧;其余ID用于普通通信。奇偶校验计算如下:

P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ¬(ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
标识符字节 = P1 P0 ID5 ID4 ID3 ID2 ID1 ID0

从节点收到标识符后,先校验奇偶位,再根据ID查表确定数据长度和方向。若校验失败,从节点应忽略该帧,不发送响应。

四、数据场与校验和:信号承载与错误检测

数据场长度由ID决定,可为1~8字节,采用低字节先发、低位先发的顺序。数据场中承载的是信号,信号可以是布尔量、无符号整数、数组或带缩放因子的物理量。校验和场位于数据场之后,分为两种:

类型计算范围适用场景
经典校验和仅数据场各字节LIN 1.x,诊断帧除外
增强校验和标识符场 + 数据场LIN 2.x,诊断帧与普通帧

校验和采用带进位循环相加后取反的方式。接收节点计算校验和并与收到的校验和比较,不一致则丢弃该帧并记录错误。增强校验和把ID纳入计算,能发现标识符错误导致的误响应,因此在新设计中应优先使用。

五、案例:车窗从节点的一帧收发过程

假设主节点要控制左前车窗上升,使用ID 0x21,数据长度2字节,数据为0x01 0x64(方向上升、速度100)。主节点依次发送:同步间隔场、同步场0x55、标识符0x21(含奇偶位)、数据0x01 0x64、增强校验和。从节点收到后校验ID与校验和,执行动作,并在下一帧中通过另一ID回传车窗位置。若从节点未在帧内响应空间内启动响应,主节点会记录“响应超时”错误,并在调度表中重试或标记节点离线。

常见误区:把同步场0x55当作普通数据字节处理,忽略其时钟校准作用;或在新节点中仍使用经典校验和,导致与主节点校验方式不一致而通信失败。

六、排障复盘清单

  • 示波器测量同步间隔场是否≥13个显性位,间隔符是否足够。
  • 确认同步场是否为0x55,从节点波特率是否与主节点一致。
  • 检查标识符奇偶校验是否正确,ID是否与LDF文件一致。
  • 核对数据长度与ID定义是否匹配,字节序是否正确。
  • 确认校验和类型(经典/增强)与主节点一致。
  • 检查响应是否在帧内响应空间内启动,是否存在超时。

掌握帧结构、报文头与响应的字段语义,以及同步、标识符和校验和的细节,才能在LIN节点集成中快速定位通信异常,并为后续调度表、LDF文件和网络管理打下基础。