LIN 笔记

LIN 使用了 1 根线来进行通信,但是,它必须要参考 VBat 和 GND。离开这两个参考电平,并没有办法来判断线上的 bit 状态。

另外,根据经典的 LIN 驱动电路(一个 OC 门),RX 接收到的高电平,就是由 Vbat 通过上拉电阻提供;当 TX 为 1 时,下面的三极管打开,RX 电平被拉低。接收到的高电平就是下面提到的隐性位,总线上电平被拉低接收到的就是所谓显性位

     

实际的要比这个复杂,但是,这个很好的说明了 LIN 的通信原理。右侧图中,就是 LIN BUS 连接的一个示例。这个网络中,Master 的上拉电阻通常选 1 KOhm, Slave 的上拉电阻通常 30 KOhms.

为了解决传输的冲突问题,这个网络中定义了,LIN Master 根据 Schedule table 来调度通信。实际通信时:

  • Master 根据 schedule table,将 Frame 的 帧头部分按顺序发送到总线上;
  • 因为总线上的数据,对所有节点都是可见的,各节点根据从总线上读到的帧 ID,判断自己是否要向总线发送数据部分,或者读取某些信号

 

Frame

LIN 通信的最小单元是 Frame。

LIN 是基于 UART/SCI  实现的,所以它每个 Byte 的传输基本是和 UART 一样;网上有人使用有限状态机+UART 来完成 LIN 通信,有兴趣可以了解下。

如图下面是 LIN 的帧结构,可以回忆 UART 帧结构来理解。

LIN 的一个 Frame 由 5个部分组成,分别是:间隔段、同步段、ID段、数据段、校验字

1) 间隔段相当于 UART 发送数据 0x00。这是一个 Frame 的第1个 ‘Byte’。

    注意这里,正常 UART 通信没法产生一个13bit 的间隔段;如果非要用普通 UART 来完成这个操作,可以尝试,先用低波特率发 0x00,然后切到高波特率发送同步段,每发一个 frame 都重复这样操作。slave 不用担心这个问题,因为帧头都是 master 发的

2) 同步段相当于 UART 发送数据 0x55。这是一个 Frame 的第2个 Byte。

3) ID 段同样也是 8bit,但是,前两个 bit 用作 paritybit,实际上只有 6bit 作为 Frame ID。即可用的 Frame ID 只有 64 个。常见帧类型有以下几种(ID分配不一定是和下面表格一致,看具体设计)。

LDF 文件中,常规帧的描述部分,会定义 Publisher,以及,会在信号的描述部分,定义信号的 Publisher 和 Recevier。

实际通信时,一般并不在总线上发送节点地址 (NAD),具体每个节点需要收/发哪些 Frame,在节点实现的时候,已经根据 LDF 文件进行了绑定。

一个例外是诊断帧(请求 ID 0x3C,响应 ID 0x3D),节点地址(NAD)会被包含在诊断帧的数据部分。下面是一个单帧诊断请求的例子:

4) 数据段的长度是在设计网络时事先定义好的,必须是 1-8 个 Bytes。数据段内容,根据帧类型的不同,有可能携带 singal 或者 statistic messages

5) 校验和也没有特殊约定,具体的设计可能有不同方案。

 

实际通信过程

LIN 通信过程,实际是一个基于 Frame ID 的通信过程。

Frame ID 部分必须是由 Master 发送的,而 Data 根据设计不同,由不同的 Publisher(Slave Node) 来发送

所以,BUS 上的情形可能是下面这种的:

实际的的通信数据,会是下面的场景:

Li 29              Tx     8 00 00 18 00 F8 02 80 F8  checksum = 89

Li 2D              Rx    8 24 00 80 F2 FF FF FF FF  checksum = BA

在一些自动寻址的应用中(比如 LIN 电机),因为 frame ID 和 NAD 的绑定关系是可以改变的。

所以,Master 发送数据时候,第一个 Byte 会是 Slave 的 NAD,即,数据段额外的包含了地址信息。

数据段里面的地址信息,用以标识,主设备的这一帧数据,是发给哪个从设备的。这样,从设备只接收指定 Frame ID 的数据,但是从上到下的数据通道仍然是可以区分不同 slave 的。

 

LDF 文件

LDF 是 LIN Description File 的缩写。根据我们上面的描述,这个网络里面的诸多特性,都是可以灵活配置的,所以,便有了 LDF 这样一个统一的对网络的描述方式(LIN Spe. 指定了 LDF 的格式,所以是通用的)。

基本上,LDF 文件,描述了下面这几个方面的内容:

1. 总线上都有哪些节点?

2. 总线上都有哪些数据帧会被传输(帧ID、数据长度、数据由谁发布)?

3. 某一帧上面携带了哪些 Signals(Mapping)?

4. BUS 上的帧以怎样一个顺序发布(schedule table) ?

5. 帧数据的解析方式,用的什么编码 ?

 下面对 LDF 文件的几个重要内容作一一解释(图片来自microchip)。

 最后,再上传一个好用的 LDF 编辑工具:LDFTool

posted @ 2018-08-22 15:26  Biiigfish  阅读(3035)  评论(0编辑  收藏  举报