LIN总线

LIN总线

全称

LIN:Local Interconnect Net

本地连接网络

连接方式

1根信号线

1个主节点,最多16个从节点

主节点:通常既可以接收CAN总线信号,也可以接收LIN总线信号

从节点:可以根据主节点的请求,发送信号

特点

  1. 速度不高,容错率低

    速度:1-20kbit/s

    长度:最多40米

  2. 数据长度可变

    2,4,8字节

  3. 错误检查,校验,配置

    数据内容包含

  4. 工作电压 12V

  5. 没有信号优先级的概念(总线仲裁),只有按顺序发送数据

应用场景

汽车车窗,雨刮器,空调,座椅控制等设备

报文格式

同步间隔段

作用:提示整个总线上的设备,告诉它们我要发消息了。

方法:常见连续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

校验位

作用:保证报文传输正确

计算公式:

assembly 复制代码
p0 = ID0 xor ID1 xor ID2 xor ID4
p1 = NOT( ID1 xor ID3 xor ID4 xor ID5)

从节点读取受保护段数据后分析校验位是否正确以判断报文是否正确。

------------上述部分一定是主节点发送------------

接下来的部分是主节点或从节点发送

帧应答

长度:2,4,8字节

校验和段

作用:对帧传输内容进行校验

类型:标准型校验,增强型校验

  • 标准型校验:校验数据段各字节,计算公式如下,忽略所有的进位
mathematica 复制代码
Checksum_Classic = ~(Data_0 + Data_1 + ... + Data_7)

比如,现在有8个字节的数据

bash 复制代码
02 07 00 00 00 00 00 00

根据行数公式计算结果为F6

如果存在进位,则需要进行自动回卷 ,即当和超过0xFF(即255)时,仅保留 低8位 并 加1(处理进位),无需额外的进位检查。

比如,现在有数据如下

mathematica 复制代码
80 80

相加后进行自动回卷,其值为0x01,取反后的校验和结果为0xFE

  • 增强型校验:数据段各字节+PID,计算公式如下,忽略所有的进位
mathematica 复制代码
Checksum_Enhanced = ~(Protected_ID + Data_0 + Data_1 + ... + Data_n)

假设 PID = 0x30(帧 ID 0x30 经过奇偶校验后得到的值)

数据为 2 字节:0x4A、0x55

  1. 求和(带进位回卷)
    sum = 0x30 + 0x4A + 0x55 = 0xCF
    无进位,sum = 0xCF。
  2. 取反
    checksum = ~0xCF = 0x30

校验和 = 0x30

进位的例子

假设 PID = 0x80

数据为 0x80, 0x80

  1. 求和(带进位回卷)

0x80 + 0x80 + 0x80 = 0x180

低 8 位 = 0x80,进位 = 0x01

回卷:0x80 + 0x01 = 0x81

  1. 取反

~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,让从节点将诊断数据发回主节点。

相关推荐
HQB20265 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science7 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
桀人8 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯9 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C9 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路9 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc10 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院10 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
恒锐丰科技林技术员11 小时前
EG1160 高压半桥驱动芯片:高压功率变换的实用驱动方案
经验分享·嵌入式硬件·硬件工程
智购科技自动售卖机厂家12 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse