引入 LIN(局域互联网络)似乎无处不在,空调、门锁、加热座椅、后视镜、充电系统等等...现代车辆诊断维修,LIN是绕不开的课题。这篇文章,来自英国Pico的工程师Ben,将带你详细了解LIN总线的结构、译码方法、休眠与唤醒过程。 LIN总线 LIN是单线、双向数据总线,以相对较低的速度传输,最大速度为20kbits/s,常用的速度为9.6kbits/s和19.2kbits/s。LIN可以支持多达16个ECU,其中 1 个为主节点,15 个为从节点。由于其单线特性,它的成本比CAN低得多,主要用于不需要高速通信的场所。LIN 采用主从结构,例如中央电子控制单元(ECU)与所有车门锁通信。该信号的电压通常是从电池电压切换到接地的开关电压,因此常被误认为是 PWM 信号。 和CAN一样,LIN是完全可定制的,汽车厂可以为任何 ECU 或控制单元赋予 ID 值。如果你想将其译码到更高层次,你将需要一个DBC文件来解释译码数据。对于LIN,你需要一个LDF(LIN描述文件),它包含译码数据的关键。 图1 LIN与CAN总线 撰写本文时所参考的 LIN 规范文件可私聊助教获取。 LIN总线串行译码与帧结构 帧结构由许多元素组成,但其基本形式由两个部分组成:帧头、响应,每个部分再进行细分。 使用PS7中的串行译码功能,就可以解析LIN信号。点击通道选项下的【串行译码】,选择【LIN】,选择需要译码的通道,点击【下一步】。随后按需求进行设置【配置】与【显示】,最后点击【完成】轻松实现译码。 图2 LIN总线译码操作 译码后的LIN总线帧结构如图3所示。帧头由间隔场(break)、同步场(sync byte)和ID字段组成。间隔场作为总线上所有节点的通知,提示即将广播消息。它通常较长,至少占用11位,现代车辆中常见为13位或更多。由于该部分长度较长,不会被误认为是其他消息。 紧接在间隔场之后的是同步场。这个8位同步场用于确保从节点与主节点波特率匹配,通常以十六进制表示为0x55。 标识符部分是消息中较为重要的部分之一,因为它向从节点传达主节点需要接收的数据信息。ID由6位和2个奇偶校验位组成,构成完整的受保护标识符。从节点通过查看奇偶校验位来确保消息的有效性,然后要么忽略后续数据,要么监听其他从节点,或者在响应字段中对ID做出响应。虹科Pico的LIN总线译码功能,会从译码表中将受保护标识符的ID单独提取出来展现。 图3 LIN总线的帧结构 在认识响应字段之前,我们必须讨论不同的帧类型。在 LIN 协议中,主节点请求从节点数据的方式有6种,具体包括: 1、无条件帧: 这是最常见的,主节点报头中发送ID,从特定从节点请求数据 l 过程:主节点点名——特定从节点回答 l 比喻:老师点名"张三!" → 张三回答"到!" 2、事件触发帧: 当主节点认为数据已被更新时,会向多个从节点请求数据。 l 过程:主节点问多个从节点 → 有更新的才回答 l 比喻:老师问"谁有新消息要报告?" → 有事的同学举手 3、零散/零星帧: 在这种模式下,主节点通过响应自己的报头来充当从节点。这允许从节点"看到"主节点发送的数据并可以使用它。这是LIN控制交流发电机使用的格式,我们将更详细地研究。 l 过程:主节点自问自答,让从节点"偷听" l 比喻:老师自己说话,学生们在旁边听着学习 4、诊断帧: ID 0x3C和0x3D用于从主设备和从设备收集诊断信息。ID 0x3C用于来自主设备的信息,ID 0x3D用于来自从设备的信息。 l 过程:专门用于故障检测和诊断 l ID:固定使用0x3C和0x3D l 比喻:就像上交体检报告 5、用户自定义帧 l ID 0x3E由用户定义,内容可以包含任何信息。 6、保留帧 ID 0x3F不能在LIN 2.0网络中使用,因此如果在译码表中看到它,说明出现了问题!目的是为将来扩展预留的 在大多数使用场景下,使用的是第一种无条件帧,通常会以这种格式出现在译码表中,除非你在查看一些使用零散帧类型的场景,例如 LIN 控制交流发电机。但在深入讨论交流发电机之前,让我们先了解LIN总线的响应部分。 数据字段:包含了由主节点在ID帧中请求的数据。它可以由 2、4、6 或 8 个字节组成。数据的长度可以由ID帧定义,但通常由供应商(厂商)指定。 校验和:是整个帧结构的结尾。可以是标准校验和或者增强校验和。标准校验和仅使用数据字节进行计算。增强校验和则使用数据字节和受保护的标识符(PID)。使用诊断帧(0x3C和0x3D的ID帧)时,必须使用标准校验和。 如果有一个统一的标准可以让我们译码头部中的标识符,以更好地理解数据响应,那就太好了。但很遗憾,并没有。这些信息都被锁定在 LDF 中,普通用户无法获取。我们可以注意的几个简单点是唤醒信号和进入睡眠的消息。 唤醒 LIN总线可以被"唤醒"来激活特定功能,比如智能进入系统中的车门锁。在排查电池漏电问题时,这可能造成更大的困扰,因为车辆会间歇性地短暂唤醒。由于LIN通信遵循固定的模式,使用虹科Pico汽车示波器可以轻松捕捉到这种现象。 网络中的任何节点都可以通过发送脉冲来请求唤醒网络,具体方法是将电压拉低到显性状态并保持超过150微秒。显性电压的判断标准是信号接近0V,但主节点和从节点的阈值水平有所不同,这允许信号电平有较大的变化范围,能使网络更加稳健。举例来说: • 主节点必须将总线电压控制在电池电压的20%以内,隐性位则在80%以内 • 从节点如果检测到电压在电池电压的40%以内,则确认为显性位;如果在60%以内,则为隐性位 只要节点发送唤醒请求并将总线恢复到隐性状态,该请求即为有效,节点将重新监听总线以接收命令。如果在100毫秒到250毫秒之间未收到其他节点的响应,则可以再次发送唤醒请求。它可以连续进行三次,然后必须等待至少 1.5 秒后才能再次尝试唤醒请求,并且此模式可以无限次重复。 图4 交流发电机LIN总线唤醒过程 例如图4所示,LIN 总线来自交流发电机,红色标签1所示位置点火开关被打开,随后在标签2的位置发出唤醒消息以使交流发电机上线,然后通信开始。 休眠 当主节点决定总线不再进行通信时,它将发出以下消息——00 FF FF FF FF,以指示总线现在应保持静默。如图5,可以在最后一个数据包中,清楚地看到进入睡眠状态的命令。 图5 LIN总线休眠指令 最后一个数据帧中,还有一个有趣的点是,ID为0x3C,我们知道这是保留用于诊断的。似乎这个ID也被所有从节点用来关闭系统。这样做的目的是确保如果从节点看到这个ID,就不会与其他内容混淆,尤其是在不确定的情况下。 我们知道,只要ID 0x3C后面的第一个字节等于0,总线就会被强制进入休眠状态。同样值得注意的是,如果总线在大约4秒的时间内处于非活动状态,从节点会自动进入休眠省电。 关于LIN总线的结构、唤醒与休眠,今天我们就分享到这里。下一期我们将探讨一些小有难度的话题,如何从LIN总线的译码结果中,提取电压设定值变化曲线?怎样获得更多故障标志提示?如何更好地利用译码结果,为LIN控制交流发电机的故障诊断提供支持? 如需本文中参考的LIN总线规范文件,可私聊助教获取。
|