点击蓝字 关注我们
LIN总线作为整车CAN总线的一个补充,给很多低成本的子节点提供了连入整车网络的机会,在整车OTA的大环境下,LIN总线也越来越重要,最近学习了LIN总线最基本的知识,与大家分享一下。
本文中关于LIN报文帧结构的5个部分,图片及部分文字参考公众号“汽车ECU设计”的相关内容,只是对其部分描述进行了简化和补充。
LIN的全称为LocalInterconnect Network。LIN主要功能是为CAN总线网络提供辅助功能,在传统车上应用最多的场合就是自动车窗、车灯、后视镜这些节点。LIN的一大优点是成本低,而且走线也更简单,只是一根线就好了,而不用像CAN总线一样需要双绞线。但其最大传输速率为20Kbps。
在说LIN总线之前,先把物理层的东西搬出来,下图就是目前应用最为广泛的LIN总线的应用电路,图片是从TJA1021的规格书中截图出来的。
作为主节点的LIN收发器电路是有一个1K上拉到Vbat的电阻,而如何改变LIN总线上的电位,也就是通过LIN收发器内部的MOSFET的拉低来实现的。因此,LIN总线实际上是一个12V电平的方波信号,之前我用示波器录过一段LIN总线上的波形,可惜找不到了,只能抄网络上别人的图来写了。
●
LIN总线的特点
●
LIN报文的帧结构
LIN总线也与CAN总线一样,是具有显性和隐性两种逻辑电平的,稍微有点特殊的是:显性电平是逻辑0,电压也是0V,隐性电平是逻辑1,电压是12V。
LIN 的字节场格式就是通常的“SCI”或“UART”串行数据格式(N81编码)。即每个字节场的长度是10个位定时(BIT TIME):1bit起始位+8bits数据位+1bit停止位。起始位(START BIT)是一个“显性”位,它标志着字节场的开始。接着是8个数据位,首先发送最低位。停止位(STOP BIT)是一个“隐性”位,它标志着字节场的结束。LIN报文帧中的同步场、标识符场、数据场、校验和场的格式都符合上述字节场的格式。
基于以上信息,我们再来看看各个场的具体内容是什么样子的,以及如何确定每个场的开头与结尾。
1
●
间隔场
同步间隔段至少是由13位的显性电平组成,由于帧中的所有间隙或者总线空闲时总线均保持隐性电平状态。所以同步间隔段可以标志一个帧的开始。
主节点发出的间隔信号至少有13个显性位,间隔界定符至少有1个隐性位。同时,从节点需要连续检测到11个显性位才认为是间隔信号。
2
●
同步场
LIN同步以下降沿为判断标志,同步场占用一个字节,其固定格式采用字节0x55(01010101)进行同步。在从机节点上可以不采用高精度的时钟,由此带来的偏差,需要通过同步段来进行调整。
3
●
标识符场
PID场定义了报文的内容和长度。如图,PID场分为6个标识符位和2个ID奇偶校验位。6个标识符位我们称之为ID。如果加上2个奇偶校验位就变成受保护的ID了,其中P0与P1校验如下(⊕为异或,¬为取非),就是Protected ID。6个标识符位中,标识符后两位为数据长度控制位。总的来看,ID的范围是0-0x3F一共64个。帧ID标识了帧的类别和目的地。从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。
LIN总线根据帧ID号的不同,把报文分为信号携带帧、诊断帧、保留帧。
4
●
数据场
数据段可以包含1~8个字节,这个长度就是由标识符段的D4和D5来决定的。其中包含有两种数据类型,信号(singal)和诊断消息(diagnostic messages)。信号由信号携带帧传递,诊断消息由诊断帧传递。
协议中并没有规定哪一部分显示数据长度码的信息(这点与CAN总线不同),数据的内容与长度均是由系统设计者根据帧ID事先约定好的。(这个应该都是通过LDF文件来定义的吧,后面再学习一下LDF文件怎么用)
总线上的数据是以广播形式发出,任何节点均可以收到,但并非对每个节点有用(与CAN相同)。具体到发布与接听是由哪个节点进行完成这个取决于应用层的软件配置,一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能出现0,1,多个发布节点。
5
●
校验和场
效验和段是为了对帧传输内容进行效验。校验和场是数据场所有字节的和的反码。所有数据字节的和的补码,与校验和字节相加所得的和必须是0xFF。
算法(Classical):累加所有字节。对每次加和进行判断,如果和大于0xFF,那么就把高八位的1,与低八位相加,其实就是低八位加1(翻转八位和)。得到最后的结果后,取其反码,我们就得到了最后的校验和。
上面讲的就是LIN数据帧的一些基本情况,所以我就继续在网上找了一个LIN的数据,看看尝试一下能不能解读一下,下面这个图片是百度出来的,也不知道原始出处是哪里。
按照前面的说法,直接看看第二行(第一行没看明白,只能从第二行开始了),00应该是间隔场(这个也没看明白),55是同步场,92就是标识符场,也就是1001 0010,对应的ID就ID5~ID0是01 0010,16进制下ID就是0x12,前面分类就是信号携带帧。然后后面的00 FF 03 03 FF FF FF FF这8个字节就是数据场,具体什么内容,我也不知道,应该是通过LDF文件来定义的。最后的67就是校验和场。
下面这个不知道是用什么工具采集的LIN数据,就写的很清楚了,看第2行,这一帧是主节点发起的,所有才会有同步段和PID段,前面的13就是间隔场,ID为0x04,对应的PID就是0xC4,后面的数据长度为7个字节,最后的4E就是校验和场的数据了。
从第3行开始,从节点开始响应,从机节点开始响应,所以是没有报头的,只有数据场,一直到第9行,主节点第二次发报文,ID为0x20,PID为0x20,数据场的长度为7个字节。
自己慢慢看到这里,似乎是有点明白了。如果还不是很明白上面这个图的内容的话,结合波形以及本人最开头的那个电路图就明白了。
主节点在执行主机任务的时候,通过发送报文头来开始进行传输数据,从机在这个时候,其收发器端口一直处于高电平,因此总线上的波形就完全是由主节点来控制的。而报文头也只能通过主机节点发出。
而报文响应则是可以通过主机节点的从机任务发出,也可以通过从机节点发出(从机节点只能发出从机任务)。
最后这个LIN总线的实际波形图是从知乎“心机之花”的专栏中看到的,大家可以尝试按照前面的规则自己解析一下。
●
总结
往期推荐
UDS的基本概念-从入门开始
UDS的那些服务—DID、DTC都是怎么来的?
UDS的那些服务-$10诊断会话
BMS系列(2)——SHUNT、HALL、磁通门
觉得有用点击右下角在看↓