LIN协议介绍

一、LIN总线应用场景

​ LIN总线在汽车应用方面主要应用于座位、车门与天窗模块、开关面板汽车方向盘、乘员舒适系统等外围ECU实时性要求不高或不需要精确容错的场景。

二、LIN总线特点

串行通信(线间干扰小,节省线束,传输距离长

物理层基于ISO9141

单线传输(总线电压12V

最高传输速率20kbps(满足车身大部分应用需求)

单主多从式结构(不存在冲突,无需仲裁

基于UART/SCI接口(几乎所有MCU都具备LIN总线硬件基础

从节点无需晶振或陶瓷振荡器就可以实现同步(利用报头里的同步场实现同步

可计算的信号传输的延迟时间(网络通信可预期

可灵活增加或减少从节点(无需改变其他节点或硬件电路

一条总线最多可连接16个节点

LIN网络拓扑结构:

在这里插入图片描述
特点

  • 一个LIN网络由一个主任务,若干个从任务组成
  • 主节点既有主任务又有从任务
  • 从节点只包含从任务
  • 主任务负责决定总线上的报文,从任务提供每一帧的数据

LIN报文帧:

在这里插入图片描述
通信原理:主任务发送报头,从任务用响应来补充报头形成完整报文

系统灵活性:能自由增减从节点,不需要改变其他从节点的软硬件

报文传输:报文的内容有ID来定义(与CAN相似)

广播:所有节点都能够同时地接受和响应总线上的帧

三、LIN总线详解

1、帧的结构

在这里插入图片描述
字节间隔位于每个字节之间,响应间隔位于报头与响应之间:

  • 留给MCU足够的处理时间
  • 帧长度可能增长
  • 最小值可以是0

帧的整体结构
在这里插入图片描述
帧头包括同步间隔段、同步段和受保护ID段(PID),由主机节点发送

应答包括数据段和校验和段,由从机节点发送

0为显性电平,1为隐性电平

1)字节场(Byte Field)

在这里插入图片描述

  • 基于SCI的通信格式
  • 发送一个字节需要10个位时间(TBIT)

2)间隔场(Break Field)

在这里插入图片描述

  • 表示一帧报文的起始,由主节点发出
  • 间隔信号至少由13个显性位组成,间隔界定符至少由1个隐形位组成
  • 间隔场是唯一一个不符合字节场格式的场
  • 从节点需要检测到至少11个显性位才认为是间隔信号

3)同步场(Sync Break Field)

在这里插入图片描述

  • 确保所有从节点使用与主节点相同的波特率发送和接收数据

4)标识符场(Identifier Field)

在这里插入图片描述

  • 帧ID的范围从0到63(0x3f)
  • 奇偶校验符(Parity)P0,P1:
    在这里插入图片描述

5)数据场(Data Field)

在这里插入图片描述

  • 数据场长度1到8个字节
  • 低字节先发,低位先发
  • 如果某一信号长度超过1个字节,采用低位在前的方式发送(小端)

6)校验和场(Checksum Field)

在这里插入图片描述

  • 用于校验接收的数据是否正确(1个字节)
  • 经典校验:只校验数据场部分
  • 增强校验:校验数据场部分+ID部分
  • 标识符为0x3C(60)和0x3D(61)的帧只能使用经典校验

2、帧类型

1)无条件帧(Unconditional Frame)

​ 无条件帧是具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧。 无条件帧在主机任务分配给它的固定的帧时隙中传输。总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答),

特点

  • 标识符(ID)为0-59(0x00-0x3b)
  • 标准LIN帧类型,用于周期通信
  • 主任务发出报头,相应的从任务对报头提供响应帧,所有节点接收

三种情况:
在这里插入图片描述

2)事件触发帧(Event Triggered Frame)

​ 事件触发帧是主机节点在一个帧时隙中查询各从机节点的信号是否发生变化时使用的帧,当存在多个发布节点时,通过冲突解决进度表来解决冲突。事件触发帧可以增强LIN总线的响应能力,避免为了很少发生的事件,而对从节点进行轮询,从而浪费了大量的带宽。

特点

  • 事件触发帧与一个或几个无条件帧相关联
  • 当其中的某个无条件帧有信号被更新时,才发送数据
  • 多个无条件帧冲突时,利用冲突解决调度表解决
    在这里插入图片描述
    ​ 事件触发帧的典型应用就是轮询四个车门的开关情况。与其利用无条件帧每个车门轮询一遍,不如同时对四个车门进行询问,如果其中一个车门打开了(事件发生),该车门要对询问作应答,即事件触发的含义。这样做可以减小带宽,但同时会导致两种现象,其一就是没有车门被打开,即无节点应答——事件触发帧允许一帧中只有帧头无应答;另外一种情况就是冲突,即同时有大于等于两个车门被打开,对该问题同时作答——事件触发帧允许两个以上的节点对帧头作应答而不视为错误。当发生冲突时,主机节点需要重新作轮询,这样会增加一些响应时间,但由于事件触发帧本身就用来处理低概率事件,总的来说还是节省了带宽。

3)偶发帧(Sporadic Frame)

​ 偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁。偶发帧能够为进度表增加一些动态特性——当主机节点的信号发生变化时才有通信发生。事件触发帧和偶发帧反映了帧在不同时机(信号变化或未发生变化)的传输状况,引入它们的目的是为了增加通信的灵活性。

特点

  • 关联的无条件帧没有信号变化,该间隙沉默,主机节点无需发帧头
  • 关联的无条件帧信号变化时,发送该关联无条件帧应答部分
  • 若两个及以上关联的无条件帧信号发生变化,按照事先规定的优先级进行发送
    在这里插入图片描述

4)诊断帧(Diagnostic Frame)

​ 诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用。主请求帧:60(0x3c),从响应帧:61(0x3d)。

传输方式:
​ 主节点发送主请求帧报头和诊断服务,然后再发送从相应帧报头,等待从节点根据诊断服务发送响应。
在这里插入图片描述

5)保留帧(Reserved Frame)

​ 保留帧的帧ID为0x3E和0x3F,为将来扩展用。

3、调度表

作用

  • 负责调度网络各报文发送的顺序
  • 为每帧报文分配发送时隙(slot)(发送时隙:报文可以被发送的时间,不同报文的发送时隙可能不同
  • 调度表在网络系统设计阶段确定
  • 调度表使得LIN通信具有可预测性

在这里插入图片描述
在这里插入图片描述
切换调度表

​ 主任务可以拥有多个调度表,并在不同的调度表之间进行切换,该处理方式增加通信的灵活性。
在这里插入图片描述

4、网络管理

1)初始化

​ 复位或者唤醒时先进入初始化状态,初始化时间小于100ms,初始化结束后进入工作模式。

2)睡眠

​ 主节点发送一帧ID为60(0x3C),第一个字节为0x00其余全为0xFF的主请求帧使处于工作模式的节点进入睡眠。

​ 从节点接收到睡眠指令后,也可以选择不进入睡眠状态而继续工作,这根据应用层程序而定。

​ 当总线空闲4到10秒的时候,所有从节点自动进入睡眠状态。(空闲的定义是没有显性位和隐形位之间的转换

3)唤醒

​ 在一个处于睡眠状态的LIN网络中,任何一个节点都可以发送唤醒信号

​ 唤醒信号是一个250us(在20Kbit/s波特率)到5ms(在1Kbit/s波特率)的显性电平(5个位)。

​ 每一个节点都需要检测唤醒信号,当检测到唤醒信号之后,在100ms内完成初始化工作。

​ 当从节点发出唤醒信号之后150ms,主节点仍未发送报头时,从节点可以再次发送唤醒信号。当连续发送了3次唤醒信号之后如果主节点仍未发送报头,从节点要至少等待1.5秒以后才可以发送第四次唤醒信号。
在这里插入图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lin协议是一种串行通信协议,用于汽车电子系统中的通信。它是一种主从式通信协议,其中一个设备扮演主设备(发送器),其他设备扮演从设备(接收器)。Lin协议的核心是“帧”,每个帧包含了一个消息。 Verilog是一种硬件描述语言(HDL),用于设计数字电路。在实现Lin协议时,可以使用Verilog语言来描述协议中的时序和状态机。例如,可以使用Verilog来实现Lin协议中的帧同步、头部和数据域解析、CRC校验等功能。 以下是一个简单的Verilog代码示例,实现Lin协议中的帧同步: ``` module lin_frame_sync( input clk, input reset, input frame_in, output reg frame_sync ); reg [3:0] state; parameter IDLE = 4'b0000; parameter SYNC_1 = 4'b0001; parameter SYNC_2 = 4'b0010; parameter SYNC_3 = 4'b0011; parameter SYNC_4 = 4'b0100; always @(posedge clk or posedge reset) begin if (reset) begin state <= IDLE; frame_sync <= 0; end else begin case(state) IDLE: begin if (frame_in == 1'b0) begin state <= SYNC_1; end end SYNC_1: begin if (frame_in == 1'b1) begin state <= SYNC_2; end else begin state <= IDLE; end end SYNC_2: begin if (frame_in == 1'b0) begin state <= SYNC_3; end else begin state <= IDLE; end end SYNC_3: begin if (frame_in == 1'b1) begin state <= SYNC_4; end else begin state <= IDLE; end end SYNC_4: begin if (frame_in == 1'b0) begin frame_sync <= 1; end state <= IDLE; end endcase end end endmodule ``` 该代码实现了一个Lin协议的帧同步器,通过检测接收到的帧信号,判断是否为一个完整的帧。当检测到帧同步码时,将输出一个帧同步信号。这个简单的例子只是Lin协议中的一小部分,Lin协议还包括许多其他功能,可以使用Verilog语言来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值