目录
一、LIN帧的结构
帧(Frame)包含两个部分:
- 帧头:由主机任务负责发送,,从机任务接收并对帧头包含的信息进行解析,然后决定是发送应答还是接收应答,还是不做响应
- 应答:由从机任务负责发送
1、帧头的帧结构
帧头包含:同步间隔段、同步段、受保护ID段
(1)同步间隔段
同步间隔段由同步间隔和同步间隔段间隔符构成:
- 同步间隔:至少是持续13位的显性电平(以主机节点速率为准),由于帧中所有间隔或总线空闲的时候都必须保持隐性电平,且帧中其他字段不会发出大于9位的显性电平,因此同步间隔可以标志一个帧的开始。(注:从机任务接收同步间隔段时,以该从机任务所在节点速率为准,当检测到总线上有持续11位的显性电平时,则认为是帧的开始)
- 同步间隔段间隔符:至少持续1位的隐性电平
(2)同步段
在LIN帧中,数据传输都是先发送LSB(最低有效位),最后发送MSB(最高有效位)
LIN同步段以下降沿为判断标志,采用字节0x55( 01010101b ),如下图:
(3)受保护ID段
受保护ID段的前6位叫做帧ID,加上2个奇偶校验位后称作受保护ID,从机任务对帧头做出的反应都是依据ID判断的,如果ID传输错误,会导致该信号无法正确到达目的地,因此引入奇偶校验位:
- P0 =(ID0 ^ ID1 ^ ID2 ^ ID4)& 0x01
- P1 =(~(ID1 ^ ID3 ^ ID4 ^ ID5))& 0x01
- 可以看出PID不会出现全0或全1的情况,因此,如果从机节点收到0xFF或者0x00,可判断为传输错误
帧的类型:
注意:诊断帧0x3C与0x3D默认采用标准校验
2、应答的帧结构
应答包含:数据段、校验和段
(1)数据段
数据段包含了两种数据类型:信号和诊断消息
数据的内容与长度是由系统设计者根据帧ID事先设计好的
(2)校验和段
校验和段是对传输的内容进行校验:
校验和类型:
- 标准型校验和的计算方法:
- 发送方:将各字节做带进位的二进制加法(每当结果大于256时就减去255),并将所得结果取反
- 接收方:将接收的各字节做带进位的二进制加法,结果不取反,该和与接受到的校验和作加法,若结果为0xFF,则校验和无误
3、帧在总线上传输时间的计算
4、帧的类型
(1)无条件帧
无条件帧具有单一发布节点,无论信号是否发生变化,帧头都被无条件应答的帧
- 帧ID = 0x30 应答部分的发布节点为从机节点1,收听节点为主机节点。典型应用如从机节点1 向主机节点报告自身某信号的状态。
- 帧ID = 0x31 应答部分的发布节点为主机节点,收听节点为从机节点1 和从机节点2。典型应用如主机节点向从机节点发布信息。
- 帧ID = 0x32 应答部分的发布节点为从机节点2,收听节点为从机节点1。典型应用如从机节点之间彼此通信。
(2)事件触发帧
事件触发帧是主机节点在一个时隙中查询各从机节点的信号是否发生变化时使用的帧,当存在多个发布节点时,通过冲突解决进度表来解决冲突
与事件触发帧关联的多个无条件帧需要满足以下5 个条件:
- 数据段包含的数据字节数等长;
- 使用相同的校验和类型;
- 数据段的第一个字节为该无条件帧的受保护ID,这样才能够知道应答是哪个关联的无条件帧发送出来的;
- 由不同的从机节点发布;
- 不能与事件触发帧处于同一个进度表
(3)偶发帧
偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁。
(4)诊断帧
诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用
- 主机请求帧,帧ID = 0x3C
- 从机应答帧,帧ID = 0x3D
- 数据段规定8各字节,一律采用标准型校验和
(5)保留帧
保留帧的帧ID为0x3E和0x3F,为将来拓展用
5、进度表
进度表是帧的调度表,规定总线上帧的传输次序以及各帧在总线上的传输时间。进度表位于主机节点,主机任务根据应用层需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表规定的入口处开始顺序执行,到进度表的最后一个帧时,如果没有新的进度表启动,则返回到当前的进度表第一个帧循环执行;也有可能在执行某个进度表当中发生中断,执行另一个进度表后再返回,如事件触发帧的冲突解决过程就是一个典型的例子。