1 LIN基本概念
LIN(Local Interconnect Network)
总线是针对汽车分布式电子系统而定义的一种低成本的串行通讯网络,是对控制器区域网络
(CAN)
等其它汽车多路网络的一种补充,适用于对网络的带宽、性能或容错功能没有过高要求的应用。
LIN
总线是基于
SCI(UART)
数据格式,采用单主控制器
/
多从设备的模式,是
UART
中的一种特殊情况。
使用一根
12V
信号总线和一个无固定时间基准的节点同步时钟线。
2 通信特点(单线通信,传输速率较低)
LIN
线在物理上是一个上拉到
12V
的集电极开漏总线,多个节点可以并联到同一根线上,与
IIC
的
SDA
类似,但其没有独立的时钟线,靠通信双方约定的波特率进行通信,与
UART
类似,但由于
UART
之处在于,其可以通过同步场进行时钟同步,使传输变得更可靠。这样与
CAN
总线的一对差分双绞线不同,其抗干扰能力大大减弱,通信速率最高只能
20Kbps,
而
CAN
可达
1Mbps
。
主从结构,中心化拓扑
)
LIN
线拓扑结构是主从结构的星型模型,所有传输都是
master
发起,
slave
不可以主动发起请求。这个其实与
modbus
更类似。也可以把
slave
看做消息的发布者,
master
看成消息的订阅者,想要获取某个变量值,就需要不断轮询读应节点对应的报文。这个结构就决定了
LIN
线传输的消息不可能太多,以保证消息更新的实时性,通常一条
LIN
线上定义的消息要比一条
CAN
线上定义的消息少一个数量级。当然,如果中心节点出现了问题,整个网络也就挂掉了。
4 通信协议解析
LIN总线的帧格式如上图所示。可以看出,一个典型的LIN数据帧主要包含header、header
response以及response域。LIN一帧数据最大可以传8bytesLIN2.x规定可以传输的LIN字节数可选是2,4,8并不是1-8内任意一个数字。一般而言,车内会选择一个统一字节数,最常用比如每帧都传8个字节。
Header场中包含break,synch以及受保护的id。其实break就是告诉总线传输开始,然后用synch同步始终,然后使用受保护id来寻址,如果有LIN
slave节点可以提供这个id的服务,那在master发出protected
id后,就他就会插入一个应答,与IIC从机在sda上给出类似应答类似。值得注意的是,这个protected
id并不是slave从机地址,而是想要订阅的报文id,换个说法,一个slave从机可以提供多个报文id的服务,比如一个车灯控制ECU,可以提供灯控制、状态、故障码、软硬件版本信息等多个LIN
ID服务。而slave从机地址是隐性的与其所提供的报文ID是有个对应关系的
。
与CAN总线的CRC校验不同,LIN的提供奇偶校验以及checksum方式,对header中的protected
id进行奇偶校验,也会对data进行checksum校验,有classic以及enhanced区分
。
LIN
总线的主从结构决定了
master
节点要周期性的去
slave
读取数据,也可以去设置一个报文。一条
LIN
总线上有多个
slave
节点,每个
slave
要发布多个
ID
报文时,就需要
master
在兼顾实时行的条件下,顺序的读取或这设置每个
slave
的每个
ID
报文。对于每个
slave
可以提供哪些报文,有
ldf
文件统一描述,与
CAN
的
dbc
文件不同。
Ldf
文件全称为
LIN Configuration Description File
,描述了一条
LIN bus
完整的主从节点信息,以及报文格式,调度信息。根据
ldf
文件可以得到
schedule tables
,这个调度表给
master
设置了读取
slave
节点报文
id
的时间间隔,比如
10ms
,
100ms
。这个调度表可以由专门的生成工具由
ldf
文件来生成。