LIN
是
Local Interconnect Network 的缩写,即局部连接网络,也被称 为“局域网子系统”。是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface,通用异步收发器
/
串行通信接口
)
的低成本串行通信协议。可用于汽车、家电、办公设备等多种领域。
LIN总线历史
1996年,Volvo 和Volcano通讯为Volvo S80 系列车型开发了一种基于UART/SCI的协议,即Volcano Lite.
1997年Motorola与Volvo和Volcano合作,帮助他们改善了Volcano Lite 协议以满足各种不同需求(比如无需晶振的从机设备自动同步),并制定可以支持各种半导体产品的开放标准。
1998
年
12
月,
Audi
、
BMW
、
Daimler Chrysler 和Volkswagen
也加入进来,由此形成了
LIN
协会
(
http://www.lin-subbus.org
)
。开发
LIN
标准的目的在于适应分层次车内网络在低端(
速度和可靠性要求不高、低成本的场合
)
的需求。
LIN总线概述
LIN在分布式汽车电子网络中的应用主要应用于车身系统,如天窗,座椅,空调,车灯等对可靠性要求不高地方,通常LIN网络会与CAN网络相连,作为CAN总线上的子网络,CAN报文通过CAN-LIN网关(主节点)与从节点进行通讯。
LIN属于A类总线,有如下特点
拓扑结构:LIN总线为一主多从的网络;CAN总线为多主的网络。
数据传输线:LIN总线为单线传输;CAN总线为双绞线差分信号传输。
工作电压:LIN为12V;CAN为5V。
传输速率:LIN总线最高为20Kbp/s;LIN 总线最高为1Mbp/s。
最大传输距离:LIN总线线缆最长为40M;CAN总线最长为10Km(典型40m)。
最大节点数量:LIN 最多挂载16个节点;CAN理论可以最多挂载100个节点(通常会挂载64以内)。
仲裁机制:LIN总线无需仲裁;CAN总线采用非破坏性仲裁,
标识符位数:LIN总线有6位(64个ID);CAN总线有11位或29位标识符位。
补充:
CAN节点太多会导致如下一些问题:
1、通信速度变慢:如果总线连接的节点过多,那么每个节点在总线上发送数据和接收数据的时间就会变长,总线的通信速度就会变慢,从而影响系统的实时性和可靠性。
2、信号衰减:随着总线连接的节点数量增加,总线的物理长度也会增加,总线信号的衰减就会变得更加明显,导致数据传输出现错误,这是大部分通信总线存在的毛病。
3、抗干扰能力下降:当总线连接的节点过多时,总线的抗干扰能力也会下降,容易受到外界电磁干扰的影响,从而导致数据传输错误。
2、CAN总线稳定性
虽然CAN总线确实好用,并且实时性也优秀的,但在实际使用过程中用得不好也是会让系统奔溃的,所以在实际现场使用过程中需要注意如下几点:
1、总线拓扑结构:CAN总线的拓扑结构应该是线性结构或者星型结构,不要使用环状结构,以避免数据冲突和错误。
2、总线长度:CAN总线的长度应该根据具体情况进行规划,一般来说,总线长度不应超过40米,否则总线信号会衰减,影响数据传输。
3、总线终端电阻:每个CAN总线的两端应该连接120Ω的终端电阻,以确保总线的阻抗匹配,避免信号反射和数据损失。
4.总线通信速率:CAN总线的通信速率应该根据具体情况进行设置,一般来说,通信速率越高,数据传输越快,但也会导致总线抗干扰能力下降,传输距离也会变短。
5、总线节点数量:CAN总线的节点数量应该根据具体情况进行规划,一般来说,总线节点数量不应超过100个,否则会影响总线的通信速度和可靠性。
6、总线错误处理:在使用CAN总线时,需要对总线错误进行处理,包括错误帧的处理、总线掉线的处理、总线冲突的处理等等,这个一般在相应的CAN外设配置中都会有设计,以确保总线的稳定性和可靠性。
LIN总线的优点
LIN总线加入新节点时,不需要对硬件进行改动。
从节点不需要晶体震荡器就可以实现同步,节省了硬件成本
基于通用UART/SCI接口的低成本硬件实现,无需单独的模块支持
信号传输具有确定性,传播时间可以提前计算出
LIN总线的缺点
低速率:LIN 总线的最高速率通常为 20 kbps,相比于其他通信协议如 CAN(Controller
Area Network
),传输速率较低。这限制了
LIN
总线在高带宽数据传输和实时性要求较
高的应用场景的适用性。
有限的数据传输能力:每帧数据传输容量有限,
LIN
总线不适用于大规模数据传输和复
杂通信任务。它更适用于传输简单的控制命令和状态信息。
缺乏网络管理功能:相比于其他高级通信协议如
CAN
,
LIN
总线在网络管理和故障诊
断功能的支持上较为有限。这限制了其对系统监测和故障定位能力的应用。
受到电磁干扰影响:由于
LIN
总线使用的是两线传输方式,它相对于
CAN
总线更容易
受到电磁干扰的影响。在电子系统设计中需要采取适当的措施来减少干扰和保证通信的
可靠性
LIN总线主机/从机任务
主机任务负责:
(1)
调度总线上帧的传输次序;
(2)
监测数据,处理错误;
(3)
作为标准时钟参考;
(4)
接收从机节点发出的总线唤醒命令。
上图中可以看到,主机节点可以处理从机任务,主节点可以给自身发送请求,自身可以反馈自身状态。
从机任务不能够主动发送数据,需要接收主机发送的帧头
根据帧头所包含的信息(帧ID)
判断:
(1)
发送应答
(
帧中除帧头外剩下的部分
)
;
(2)
接收应答;
(3)
既不接收也不发送应答。
LIN 协议层
帧的结构
帧
(Frame)
包含帧头
(Header)
和应答
(Response)
两部分。主机任务负责发送帧头;从机任务接收帧头并对帧头 所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。
帧头包括同步间隔段、同步段以及
PID(Protected Identifier
,受保护
ID)
段,应答包括数据段和校验和段,如 图 所示,其中值
“0”
为显性电平
(Dominant)
,值
“1”
为隐性电平
(Recessive)
,总线上实行
“
线
-
与
”
:
当总线上有大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(
不发送任何信 息时总线默认呈隐性电平)
时,总线才呈现隐性电平,即显性电平起主导作用。图中帧间隔为帧之间的间隔;应答间隔为帧头和应答之间的间隔;字节间间隔包括同步段和受保护ID
段之间的间隔、数据段各字节间之间的间隔以及数据段最后一个字节和校验和段之间的间隔。下面对帧头和应答的各部分进行详细说明。
一个完整帧由同步间隔段+同步段+PID段+数据段+Checksum段构成
- 同步间隔段:同步间隔段由同步间隔(Break)和同步间隔段间隔符(Break Delimiter)构成,如图3.3所示。同步间隔是至少持续 13 位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并 且帧中的任何其它字段都不会发出大于 9 位的显性电平,因此同步间隔可以标志一个帧的开始。同步间隔段的 间隔符是至少持续 1 位的隐性电平。
- 同步段:LIN 同步以下降沿为判断标志,采用字节 0x55(转换为二进制为 01010101b)
在介绍同步段之前,首先介绍一下字节域
(Byte Field)
的概念,字节域包括
1
位起始位
(Start Bit
,显性
) + 8 位数据位 + 1
位停止位
(Stop Bit
,隐性
)
,是一种标准
UART
数据传输格式,如图
3.4
所示。在
LIN
的一帧当中, 除了上一节讲述的同步间隔段,后面的各段都是通过字节域的格式传输的。在 LIN
帧中,数据传输都是先发送LSB(Least Significant Bit,最低有效位
)
,最后发
MSB(Most Significant Bit
,最高有效位
)。
点时钟产生的偏差,需要通过同步段进行调整,调整的结果是使从机节点数据的位速率与主机节点一致。同 步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同段计算出主机节点位速率,根据计算结果对自身的位速率重新作调整。通过计算,可以得到主机节点实际传输
1
位所用的时间,即位速率。计算公式如下:
- 受保护 ID 段(Protected Identifier Field)
受保护
ID
段的前
6
位叫作帧
ID(Frame ID)
,加上两个奇偶校验位后称作受保护
ID
。
帧
ID
的范围在
0x00
~
0x3F
之间,共
64
个。帧
ID
标识了帧的类别和目的地。从机任务对于帧头作出的反 应(
接收
/
发送
/
忽略应答部分
)
都是依据帧
ID
判断的。如果帧
ID
传输错误,将会导致信号无法正确到达目的地,因此引入奇偶校验位。校验公式如下,其中“
⊕
”
代表
“
异或
”
运算,
“
¬
”
代表
“
取非
”
运算。
校验位P0 = ID0
⊕
ID1
⊕
ID2
⊕
ID4
校验位P1 =
¬
(ID1
⊕
ID3
⊕
ID4
⊕
ID5)
由公式可以看出,
PID
不会出现全
0
或全
1
的情况,因此,如果从机节点收到了
“0xFF”
或
“0x00”
,可判断为传输错误。
注意1.
从机应答帧是一个完整的帧,与帧结构中的
“
应答
”(
帧的一部分
)
不同,注意区别。
- 数据段:节点发送的数据位于数据段,包含 1 到 8 个字节(注 1),先发送编号最低的字节 DATA1,编号依次增加, 如图所示。
数据段包含了两种数据类型,信号
(Signal)
和诊断消息
(Diagnostic messages)
。信号(Signal)
由信号携带帧传递,一个帧
ID
对应的数据段可能包含一个或多个信号。信号更新时要保证其完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节(Publisher)
;
其余的一个或多个节点接收,它们称为信号的收听节点
(Subscriber)(
注
2)。
诊断消息(Diagnostic message)
由诊断帧传递,对消息内容的解析由数据自身和节点状态决定
注:
1.
协议没有规定帧中的哪一部分显示数据长度码的信息,数据的内容和长度是由系统设计者根据帧
ID
事 先约定好的。
2.
总线上的数据是以广播形式被发送到总线上的,任何节点均能接收,但并非所有信号对每个节点都有用。 收听节点接收帧的应答是因为该节点的应用层会使用这些信号,而对于其余节点,由于用不到这些信号, 所以没有必要作接收处理,将忽略帧的应答部分。发布和收听由哪个节点进行完全根据应用层的需要软件或配置工具实现。一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能存在零个、一个或多个发布节点
校验和分为标准型校验和
(Classic Checksum)
及增强型校验和
(Enhanced Checksum)
采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧
ID
来判断采用哪种 校验和。
校验方法为将校验对象的各字节作带进位二进制加法
(
每当结果大于等于
256
时就减去
255)
,并将所得最 终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制 加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为 0xFF
,则校验和无误,这在一定程度 上保证了数据传输的正确性。
帧的类型
- 无条件帧:具有单一节点,无论信号是否发生变化,帧头都被无条件应答的帧。如果帧头发送出去了了,必须要有从机应答,没有从机任务应答会报接收超时错误。
- 事件触发帧(Event Triggered Frame)
事件触发帧是主机节点在一个帧时隙
(
参照
3.3
节
)
中查询各从机节点的信号是否发生变化时使用的帧,当存 在多个发布节点时,通过冲突解决进度表(
参照
3.3
节
)
来解决冲突。 当从机节点信号发生变化的频率较低时,主机任务一次次地轮询各个信号会占用一定的带宽。为了减小带宽的占用,引入了事件触发帧的概念。
事件触发帧的典型应用就是轮询四个车门的开关情况。与其利用无条件帧每个车门轮询一遍,不如同时对 四个车门进行询问,如果其中一个车门打开了(
事件发生
)
,该车门要对询问作应答,即事件触发的含义。这样 做可以减小带宽,但同时会导致两种现象,其一就是没有车门被打开,即无节点应答——
事件触发帧允许一帧 中只有帧头无应答;另外一种情况就是冲突,即同时有大于等于两个车门被打开,对该问题同时作答——
事件 触发帧允许两个以上的节点对帧头作应答而不视为错误。当发生冲突时,主机节点需要重新作轮询,这样会增 加一些响应时间,但由于事件触发帧本身就用来处理低概率事件,总的来说还是节省了带宽。
原先用作轮询的无条件帧,称为与该事件触发帧关联的无条件帧,即事件触发帧的应答部分是与其关联的 无条件帧所提供的应答。当发生冲突时,需要立刻中断当前的进度表(
参照
3.3
节
)
,启动冲突解决进度表
(Collision Resolving Schedule),重新调用这些关联的无条件帧。其中,冲突解决进度表要求包含所有的关联的无条件帧。
偶发帧是主机节点在同一帧时隙
(
参照
3.3
节
)中当自身信号发生变化时向总线启动发送的帧。当存在多个关 联的应答信号变化时,通过事先设定的优先级来仲裁。
引入偶发帧的目的在于为进度表
(
参照
3.3
节
)
增加一些动态特性
——
当主机节点的信号发生变化时才有通 信发生。事件触发帧和偶发帧反映了帧在不同时机(
信号变化或未发生变化
)
的传输状况,引入它们的目的是为 了增加通信的灵活性
与事件触发帧一样,偶发帧的应答也关联了一组无条件帧。规定偶发帧只能由主机节点作为发布节点。偶 发帧的传输可能出现三种状况:1)
当关联的无条件帧没有信号发生变化时,该时隙
保持沉默,第一个帧时隙所示,主机节点连帧头都不需要发送;
2)
当其中一个关联的无条件帧包含的信号发生了变化, 则发送该关联的无条件帧的应答部分;3)
如果有两个或两个关联的无条件帧包含的信号发生了变化,则按照事 先规定好的优先级,优先级较高的关联的无条件帧获得发送权,优先级较低的要等到下一个偶发帧的帧头到来 时才能发送应答。由于主机节点是唯一的发布节点,所以主机节点事先就知道各个关联信号的优先级别,这样 在传输时就不会产生冲突。
进度表(Schedule)
务根据应用层需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表 规定的入口处开始顺序执行,到进度表的最后一个帧时,如果没有新的进度表启动,则返回到当前的进度表第 一个帧循环执行;也有可能在执行某个进度表当中发生中断,执行另一个进度表后再返回。
当总线处于休眠状态时,主
/
从机节点都可以向总线上发送唤醒信号,唤醒信号持续
250μs
~
5ms
。其余节 点(
除发送唤醒信号以外的节点
)
以大于
150μs
为阈值判定唤醒信号。每个从机节点必须在唤醒信号显性脉冲的 结束处算起 100ms
以内准备接收来自主机的命令
(
帧头
)
;主机节点也必须被唤醒,
100ms
之内主机节点发送帧 头开始通信。主机节点的同步间隔段也可以充当唤醒信号,由于从机节点需要作初始化处理,因此主机节点所 发的这个帧有可能不会被正常接收。
如果节点发送出唤醒信号后,在
150ms
~
250ms
之内没有接收到总线上的任何命令
(
帧头
)
,则可以重新发送 一次唤醒信号。唤醒信号最多可以发送 3
次,
3
次之后,必须等待至少
1.5s
之后才可以再次发送唤醒信号。
总线可以在两种情况下进入休眠:
(1)
利用诊断帧中的主机请求帧
0x3C
作休眠命令,要求数据段的第一个字节为
0x00
,其余字节为
0xFF
。 休眠命令由主机节点发出,总线上的从机节点只判断数据段的第一个字节,其余字节忽略。从机节点在接 收到休眠命令后,不一定要进入低功耗模式,根据应用层需要设置。
(2)
当总线静默
(
没有显性和隐性电平之间的切换
)4s
~
10s
时,节点自动进入休眠状态。
总线错误类型: