文章目录
协议规范(Message Frame)
(1)字节间隔位于每个字节之间;
(2)响应间隔位于报头与响应之间;
(3)留给MCU足够的处理时间;
(4)帧长度可能增长;
一个完整的LIN 总线报文帧“Message Frame”包含 报头“Header”和响应“Response”,主机任务负责发送帧头;从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。
一、字节场
1)基于SCI的通信格式;
2)每一个字节场的长度由10个定时位定时(BIT TIME);
①起始位(START BIT)是一个“显性”位,标志字节的开始;
②8为数据位,先发送最低位;
③停止位(STOP BIST)是一个“隐性”位,标志着字节场的结束。
二、报文头(Header Field)
同步间隔段(synchronisation break)
同步间隔段由同步间隔(Break)和同步间隔段间隔符(Break Delimiter)构成。
作用:标识报文的开始,由主节点发送;使得所有的从机任务和总线时钟信号同步。
间隔信号至少由13个显性位组成,之后紧随至少1个隐形位的隔界定符;
间隔界定符的作用:用来检测接下来的同步域(Synch Field)的起始位。
同步段(SyncByte FIELD)
1)确保所有从节点使用与节点相同的波特率发送和接收数据;
2)一个字节,结构固定:0X55;
受保护ID段(Protected Identifier Field)
受保护 ID 段的前 6 位叫作帧 ID(Frame ID),加上两个奇偶校验位后称作受保护 ID。
1)ID的范围从0到63(0x3f);
2)奇偶校验符(Parity)P0,P1;
①ID4和ID5定义了数据场的数据长度
如果需要(例如与LIN规范1.1兼容),标识符位ID4和ID5可以定义消息中NDATA数据字段的数量(如下表)。这将64个标识符集合分成4个包含16个标识符的子集,这些子集分别具有2个、4个和8个数据字段。
ID5 | ID4 | 数据场的数量 |
---|---|---|
0 | 0 | 2 |
0 | 1 | 2 |
1 | 0 | 4 |
1 | 1 | 8 |
【LIN2.0相对于LIN1.3最主要的差别】
1、支持最多8个字节的数据序列;
2、取消了受保护标识符中的数据长度字段,即传输长度不再受限于ID,并将最后一个字节视为校验和;
3、校验和的验算包括了受保护标识符。
4、支持自动波特率检测功能;
5、对偶发帧进行了定义;
6、网络管理的定时用秒来定义,而不是用比特数来定义;
②奇偶校验位P0 P1(⊕异或运算)
三、数据段(Data Field)
1)数据场长度1到8个字节;
2)低字节先发,低位先发;
3)如果某信号长度超过1个字节采用低位在前的方式发送(小端);
四、校验和场(Checksum Field)
用于校验接收的数据是否正确
1)经典校验(Classic Checksum)仅校验数据场(LIN1.3)
2)增强校验(Enhance Checksum)校验标识符场与数据场内容(LIN2.0、LIN2.1)
LIN2.0以前 | LIN2.0以及之后 | |
---|---|---|
通讯帧 | 经典型 | 增强型 |
诊断帧 | 经典型 | 经典型 |
标识符为0x3C和0x3D的帧只能使用经典校验
算法(Classical):累加所有字节。对每次加和进行判断,如果和大于0xFF,那么就把高八位的1,与低八位相加,其实就是低八位加1(翻转八位和)。得到最后的结果后,取其反码,我们就得到了最后的校验和。
例如:采用标准型校验和,Data1 = 0x4A,Data2 = 0x55,Data3 = 0x93,Data4 = 0xE5
讲解一下上面的图,0x4A+0x55 = 0x9F这个没有疑问,再加0x93 = 0x132,很明显,超过了0xFF,分解为0x1和0x32,突出的高8位删除,加到低8位中,0x1+0x32=0x33。再加0xE5 = 0x118,又超了,0x1+0x18=0x19。取反(Not),0xE6。