Lin总线
2023-06-19 20:43:24

Lin总线

Lin总线是CAN总线网络的低成本补充(具有更少的线束和更便宜的节点);

Lin总线通常由充当网关的Lin主机(主节点)和最多16个从节点构成;

Lin用例:舒适总线,动力总线,发动机(小型电机,冷却风扇电机等)等。

Lin节点通常捆绑在集群中,每个节点都有一个与CAN总线连接的主节点:

Lin总线工作原理:主节点循环通过每个从节点,发送信息请求,每个从节点在轮询时响应数据;

image-20230615172745257

Lin总线消息帧:通常由一个报头和一个响应组成;

报头:

image-20230615174629696

Sync Break Field (SBF) aka Break(Break):最小长度为13+1(通常为18+2),Break字段充当总线上所有Lin从节点的”帧开始“通知;

Sync:具有预定义值0x55(0101 0101),该结构允许Lin节点确定上升/下降之间的时间,从而确定主节点使用的波特率,让每个节点保持同步;

ID:标识符,用作发送每条Lin消息要与哪些节点对报文做出反应的标识符;

Parity:奇偶校验位(2个),用于确定从设备ID字段的有效性==》并进行:

1、忽略后续数据传输;2、监听从另一个节点传来的数据;3、响应头部发布数据。

响应:

image-20230615175529320

Data:当一个Lin从节点被主节点轮询时,它通过发送2,4或8个字节的数据来响应;数据长度可以自定义,但通常与ID范围有关:

ID 字节
0~31 2
32~47 4
48~63 8

CheckSum:校验和字段,和CAN类似,确保Lin帧有效性;经典的8位校验和仅基于对数据字节求和(Lin 1.3),增强的校验和还包括标识符字段(Lin 2.0);

特殊:由于Lin从节点一般性能不佳,所以会出现延迟,为了缓解情况==》可以选择添加字节间空间;此外,在报头和响应之间,还有一个响应空间,允许从节点有足够的时间对主节点的报头做出反应:

帧类型:

ID 类型 描述
0~59 无条件帧 周期性广播特定信息,不需要请求
0~59 事件触发帧 发生特定事件时触发,例:传感器等
0~59 间歇帧(零星帧) 没有按照固定时间间隔进行发送,没有特定的触发条件
60~61 诊断帧 主机从从机读取诊断信息;60:主机请求;61:从机响应
62 用户自定义帧 可以包含任何类型的帧
63 保留帧

大部分的通信都是通过无条件帧完成的。

配置文件(NCF)与描述文件(LDF):为了实现快速设置Lin总线网络,Lin节点都带有节点配置文件NCF,详细描述Lin节点功能;

OEM会将这些节点的NCF文件组合成一个集群文件==》Lin描述文件LDF==》主节点根据LDF设置和管理Lin集群;

image-20230616094301434

Lin描述文件LDF解码:

类似于CAN总线解码:

字段 描述
ID 标识符
Name 名称
Start bit 起始位
Length 长度
Endianness 字节序,大端序/小端序
Scale 比例因子,比例缩放
Offset 偏移
Unix/Min/Max 数值型信号,可能需要知道最小值,最大值以及在Unix时间戳中的解释方式

LDF文件例:

LIN {
  Name = "MyLINNetwork";
  Version = "1.0";

  Nodes {
    Node1 {
      NAD = 0x01;
      Supplier = "CompanyA";
      Function = "ECU1";
    }

    Node2 {
      NAD = 0x02;
      Supplier = "CompanyB";
      Function = "ECU2";
    }
  }

  Frames {
    Frame1 {
      Name = "Frame1";
      ID = 0x100;
      Length = 8;
      Publisher = Node1;
      Subscribers = Node2;
      CycleTime = 10ms;
      Signals {
        Signal1 {
          Name = "Signal1";
          StartBit = 0;
          Length = 16;
          Endianness = LittleEndian;
          Scale = 0.1;
          Offset = -100;
          Min = -1000;
          Max = 1000;
        }
      }
    }

    Frame2 {
      Name = "Frame2";
      ID = 0x200;
      Length = 4;
      Publisher = Node2;
      Subscribers = Node1;
      CycleTime = 20ms;
      Signals {
        Signal2 {
          Name = "Signal2";
          StartBit = 0;
          Length = 8;
          Endianness = BigEndian;
          Scale = 1;
          Offset = 0;
          Min = 0;
          Max = 255;
        }
      }
    }
  }
}

描述了一个名为MyLINNetwork的Lin网络,包含两个节点Node1和Node2和两个帧Frame1和Frame2,每个节点都有唯一的Node Address(NAD)和供应商/功能信息;每个帧也有其详细信息。

当你获得了一个LDF文件或NCF文件时,可以采用以下解析器对其进行解析:

#Ldfparser
https://github.com/c4deszes/ldfparser

#Ldf-parser
https://github.com/TrippW/LDF-Parser

#NCF-parser
https://github.com/TrippW/NCF-Parser