LIN总线
全称
LIN:Local Interconnect Net
本地连接网络
连接方式
1根信号线
1个主节点,最多16个从节点
主节点:通常既可以接收CAN总线信号,也可以接收LIN总线信号
从节点:可以根据主节点的请求,发送信号
特点
速度不高,容错率低
速度:1-20kbit/s
长度:最多40米
数据长度可变
2,4,8字节
错误检查,校验,配置
数据内容包含
工作电压 12V
没有信号优先级的概念(总线仲裁),只有按顺序发送数据
应用场景
汽车车窗,雨刮器,空调,座椅控制等设备
报文格式
同步间隔段
作用:提示整个总线上的设备,告诉它们我要发消息了。
方法:常见连续13+1或者20个0表示
注意
在LIN总线中,0用低电平0V表示,1用高电平12V表示。整个总线上的显性电平是0V,如果同时遇到12V和0V,则以0V表示同步段
由于时序等原因,不同设备间的信号读取可能不同步,因此设置同步段使得各设备之间实现同步读取
通常同不断使用0x55表示,即二进制01010101。LIN主节点发送同步段信号是从低位向高位发送,即首次应发送1.
这里注意,对照上图中发现第一位是0,这是因为同步段发送的第一位是起始位,这一位不算。必须从第二个开始计算。同时,最后一位也不算,同步段将其定义为停止位
受保护段(PID)
全称:Protected ID
长度:8位
组成:6位ID和2位校验
作用:告诉总线上的设备,现在要干什么
ID定义
| ID值 | 帧类型 |
|---|---|
| 0x00~0x3B | 信号携带帧:无条件帧,事件触发帧,偶发帧 |
| 0x3C | 诊断帧:主机请求帧 |
| 0x3D | 诊断帧:从机应答帧 |
| 0x3E | 用户定义帧 |
| 0x3F | 保留帧 |
其中,低4位组成了设备在总线中的ID值,6位中的高2位为校验位,只能是0,1,2,3
校验位
作用:保证报文传输正确
计算公式:
p0 = ID0 xor ID1 xor ID2 xor ID4 p1 = NOT( ID1 xor ID3 xor ID4 xor ID5)从节点读取受保护段数据后分析校验位是否正确以判断报文是否正确。
------------上述部分一定是主节点发送------------
接下来的部分是主节点或从节点发送
帧应答
长度:2,4,8字节
校验和段
作用:对帧传输内容进行校验
类型:标准型校验,增强型校验
- 标准型校验:校验数据段各字节,计算公式如下,忽略所有的进位
Checksum_Classic = ~(Data_0 + Data_1 + ... + Data_7)比如,现在有8个字节的数据
02 07 00 00 00 00 00 00根据行数公式计算结果为F6
如果存在进位,则需要进行自动回卷,即当和超过0xFF(即255)时,仅保留低8位并加1(处理进位),无需额外的进位检查。
比如,现在有数据如下
80 80相加后进行自动回卷,其值为0x01,取反后的校验和结果为0xFE
- 增强型校验:数据段各字节+PID,计算公式如下,忽略所有的进位
Checksum_Enhanced = ~(Protected_ID + Data_0 + Data_1 + ... + Data_n)假设 PID =0x30(帧 ID 0x30 经过奇偶校验后得到的值)
数据为 2 字节:0x4A、0x55
- 求和(带进位回卷)
sum = 0x30 + 0x4A + 0x55 = 0xCF
无进位,sum = 0xCF。 - 取反
checksum = ~0xCF = 0x30
校验和 = 0x30
进位的例子
假设 PID =0x80
数据为0x80,0x80
- 求和(带进位回卷)
0x80 + 0x80 + 0x80 = 0x180
低 8 位 =0x80,进位 =0x01
回卷:0x80 + 0x01 = 0x81
- 取反
~0x81 = 0x7E
校验和 = 0x7E
帧分类及用途
无条件帧(最常用)
主节点发送报文头给指定从节点请求信息,从节点一定会应答
上图是无条件帧的三种情况。这里要说明,其核心思想是想要从机做什么,则主机发送什么报文
例如:
想要从机1发送报文给主机,那么主机1就发送ID=0x30的PID
想要主机1发送报文给所有主机,因为主机即可以发送也可以接收,所以主机可以看作master+slave,那么发送ID=0x31的PID
想要从机2向从机1发送报文,那么主机发送ID=0x32的PID到LIN总线
事件触发帧
主机不挨个点名,而是问“谁有情况?”,有情况(数据更新)的从机再自己站出来回答
如果有且仅有一个从机有数据更新,它就发送。响应数据的第一个字节是它自己的保护ID(PID),这样主机就知道是谁汇报的
如果多个从机同时有数据更新,它们会同时发送响应,导致总线冲突。当主机检测到冲突时,它会暂停当前调度表,并跳转到“冲突解决调度表”。这个特殊调度表会依次单独询问所有相关的从机,保证不遗漏任何重要数据。
偶发帧
实际用的很少
诊断帧
主节点向从节点发送0x3C的PID,数据段带上请求让从节点进行某种诊断。紧接着主节点向从节点发送0x3d的PID,让从节点将诊断数据发回主节点。