LIN协议的那些事【入门以及配置】

LIN介绍

全称为Local Interconnect Network,是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议,应用了单主机多从机的概念,总线电平一般为12V,传输速率最高限制为20kbps。由于物理层的限制,一个LIN网络最多可以连接16个节点,最长总线长度为40米。对于不需要像动力系统和底盘系统那样的速率和可靠性的传感器和执行器,即车身系统,可以采用LIN来构筑简单、低成本的局域网络,适用范围包括车窗、座椅、天窗、门锁、空调、照明等舒适性相关的领域。

LIN&CAN总线对比

由于LIN网络在汽车中一般不独立存在,通常会与上层CAN网络相连,形成CAN-LIN网关节点。

LIN总线特点

  • 线形总线
  • 主从方式(一主多从)
  • 令牌方式
  • 报文地址寻址方式(所有节点可以接收LIN报文)
  • 基于时间表式的通信(时间触发方式)【这样的方式不会造成bus的过负载,实现稳定的通信。】
  • 数据最大传送速度20kbit/sec
  • UART接口(多数芯片都带有的串口通信装置)
  • 不需要晶振和陶瓷谐振的自我同期(从节点)
  • 短报文(最大8Byte)
  • 简单的数据保护(奇偶、和校验)
  • LIN总线提供信号的配置、处理、识别和诊断功能。

LIN硬件

LIN节点由芯片和LIN收发器构成,一般通过多数芯片都搭载的UART功能来实现。

LIN任务

对于LIN节点任务来说,可分为“主任务”和“从任务”两种。
主任务:只有主节点才有的任务,按照事先决定的时刻在网络中发送令牌,从而实现网络的传输时刻管理。
从任务:主节点和从节点双方都有的任务,数据的传输,即,监视的主任务中发送的令牌,在主节点的令牌后发送数据。只要没收到令牌,绝不发送数据。

LIN协议组成

一个令牌和一条数据构成一条LIN报文。
在LIN的标准中,令牌被称为“header”,数据被称为“response”,报文被称为“Frame”。在“header”中含有表示报文身份的“ID”,各个节点根据“ID”决定是否发送“Response”。同时,LIN报文是地址寻址方式,总线上的所有节点都能收到报文。

帧头结构包括同步间隔段、同步段、PID段(受保护ID)段

应答部分包括数据段与效验和段。其中值“0”为显性电平、“1”为隐性电平,这点与CAN总线相类似。在总线上实行“线-与”:当总线有至少一个节点发送显性电平时,总线呈现显性电平;所有节点均发送隐性电平或者不发送信息时,总线呈隐性电平,即显性电平起着主导作用。LIN 的字节场格式就是通常的“SCI”或“UART”串行数据格式(N81编码)。即每个字节场的长度是10个位定时(BIT TIME):1bit起始位+8bits数据位+1bit停止位【间隔场是唯一一个不符合字节场格式的场。从节点需要检测到至少连续11个显性位才认为是间隔信号。】

以下部分出于引用博客:https://blog.csdn.net/IOT2017/article/details/86008184
1)同步间隔段

同步间隔段至少是由13位的显性电平组成,由于帧中的所有间隙或者总线空闲时总线均保持隐性电平状态。所以同步间隔段可以标志一个帧的开始。其中同步间隔段的间隔符至少为1位隐性电平。
(2)同步段
LIN同步以下降沿为判断标志,采用字节0x55(01010101b)进行同步。在从机节点上可以不采用高精度的时钟,由此带来的偏差,需要通过同步段来进行调整。【LIN出于对成本削减的考虑没有专门布置用于时钟同步的配线,同时,对于LIN的从节点,同样出于对成本削减的考虑一般采用误差较大的CR时钟。这样如果什么都不做的话,LIN的各个节点间容易产生误差。
通过搭载高精度晶振的主节点,将同步信号在总线上发送给各个从节点,各个从节点再根据此信号进行误差补正,从而达到信号同步的目的。这里提一下,LIN协议中对误差的要求是±14%,而一般高精度晶振的误差为±1.5%。

(3)PID段
受保护的ID的前6位叫做帧的ID,加上两个奇偶效验码后称作受保护的ID。帧ID的取值范围为0x00~0x3f总共64个,帧ID标识了帧的类别和目的地。从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。其中P0与P1效验如下:

LIN总线根据帧ID号的不同,把报文分为信号携带帧、诊断帧、保留帧。
【ID4和ID5为数据长度控制位(ID4是低位)。
值为00或10时,数据长度为2个字节。
值为01时,数据长度为4个字节。
值为11时,数据长度为8个字节。】


PS:从机应答帧是一个完整的帧,与帧结构中的“应答”不同!
(4)数据段
数据段可以包含1-8个字节,其中包含有两种数据类型,信号(singal)和诊断消息(diagnostic messages)。信号由信号携带帧传递,诊断消息由诊断帧传递。

协议中并没有规定哪一部分显示数据长度码的信息(这点与CAN总线不同),数据的内容与长度均是由系统设计者根据帧ID事先约定好的。
总线上的数据是以广播形式发出,任何节点均可以收到,但并非对每个节点有用(与CAN相同)。具体到发布与接听是由哪个节点进行完成这个取决于应用层的软件配置,一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能出现0,1,多个发布节点。
(5)校验和段
校验和段是为了对帧传输内容进行效验。校验分为标准型校验与增强型校验。采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种校验和。【校验和场是数据场所有字节的和的反码。所有数据字节的和的补码,与校验和字节相加所得的和必须是0xFF。】

LIN总线的通讯都是由主机节点发起的,只要合理的规定要每个节点的配置,这样就不会存在总线冲突的情况(事件触发帧冲突时采用采用冲突解决进度表)。

EB Tresos中关于LIN的配置

  • 时钟配置
  • 波特率引脚配置
  • LINIF 配置
  • 配置进度表运行模式
  • LIINSM配置
  • 其他配置

未完待更新。。。。

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语言来实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值