CAN总线与LIN总线是典型的车载网络总线。其两者的区别在于诊断时,CAN总线诊断遵循UDS协议,而LIN总线诊断在遵循UDS协议的基础上,还遵循LIN 2.2协议。
LIN 2.x vs LIN 1.3 协议区别
LIN2.x 与LIN1.3节点模型的差别在于LIN1.3没有Transport layer(传输层),所以也就没有流控、传输时间控制的功能,LIN1.3协议中没有对诊断及节点配置进行规范,所以在LIN1.3中完成相应的功能都放在自定义诊断中完成。为了支持UDS这样的高级诊断服务,需要一个传输层来处理多帧数据传输的问题,而这正是LIN 1.3所缺少的特性之一。后续的LIN版本如2.0、2.1以及2.2等增加了对传输层的支持,并标准化了诊断功能,这使得它们能够更好地支持UDS诊断服务。
在 LIN 中用于发送和接收大于 8 字节的部分数据。 LIN 传输协议与 CAN 中使用的“ISO 15765-2”基本相同,它是通过在数据字节的一部分中存储特殊信息来传输的。
LIN2.x 使用此传输协议进行诊断、节点配置和识别。
LIN 2.0、LIN 2.1、LIN2.2--- LIN协议变更
LIN 2.0规范: LIN 2.0是在LIN 1.3的基础上发展起来的,LIN 2.0和LIN 1.3从节点可以在网络中并存,但是需要避免一些新特性(例如改进的检验和自动波特率检测)。以下是一些关键的改进:
-
响应错误状态监控:添加节点自我状态监测和故障报告(规定每个从机节点需在其发布的某个无条件帧中包含一个长度为一位的标量信号
response_error
以向主机节点报告自身状态),有助于快速定位问题并提高系统的可靠性,当从节点发送或接收的帧(事件触发的帧响应除外)在帧响应中包含错误时,应设置 response error 信号,当包含 response_error 信号的无条件帧成功传输时,response error 信号将被清除。 -
规格中新增自动比特率检测:增加了自动比特率检测的功能,使得节点能够自动识别网络的比特率。
-
支持字节数组信号 :信号组被删除,取而代之的是使用字节数组,LIN 2.0 引入了对字节数组信号的支持,LIN一帧数据最大可以传8bytes,LIN1.3 规定可以传输的LIN字节数可选是2,4,8 LIN 2.0 可以为1-8内任意一个数字。一般而言,最常用比如每帧都传8个字节。
-
睡眠模式和唤醒功能 (Sleep and Wakeup):网络管理时间以秒为单位,而不是位时间。支持节点进入低功耗睡眠模式,以减少能源消耗,同时具备外部事件触发的唤醒LIN网络机制,提高了能效。
-
增加诊断和故障处理 (Diagnostic Specification):增强了诊断功能,添加了强制性节点配置命令(可以通过诊断指令重新配置从属节点 ), 以及一些可选命令。添加了对应的诊断API。
-
LIN总线节点能力语言(Node Capability Language, NCF): 是一种专门用于描述LIN从节点能力的文件格式。作为LIN 2.0的新特征,提供了一个标准化的语法结构,用于远程从机节点技术规格的描述。这可以简化标准节点的获取,并使机群的生成自动化。NCF文件详细定义了LIN网络中各个节点的属性和行为,包括但不限于节点名称、物理特性、帧和信号的定义等信息。这些信息对于配置和生成LIN子网至关重要。
-
每个从节点的LIN 产品标识是标准化的:取消了受保护标识符(PID)中的数据长度字段,即传输长度不再受限于ID,并将最后一个字节视为校验和
PS: 增强的校验和(包括受保护的标识符PID)作为对 LIN 1.3 经典校验和的改进;对零星帧进行了定义。
LIN V1.3 ID Range:
( 帧长取决于标识符)
LIN 2.1规范: LIN 2.1是对LIN 2.0的进一步优化和完善,
-
主要改进包括:
-
分配框架ID配置服务修改:分配框架ID配置服务(SID:0xB1)被移除,同时增加了分配框架ID范围配置服务(SID:0xB7)以及保存配置服务(Save Configuration (SID:0xB6)) 。
-
节点能力语言规范(NCF):对节点能力语言规范进行扩展,增加了新的参数,添加节点属性、节点组成、事件触发帧和配置。
-
诊断类别和服务实现:实施了诊断类别1至3及相应的诊断服务,进一步增强了系统的诊断能力。添加了“功能寻址”规范,该规范可在单个主请求帧中向所有从节点发出诊断请求。 当使用功能寻址发送时,节点地址包含 “ 功能节点地址 (0x7E)”
-
NAD 0x7E(功能性NAD)保留为功能性地址用于诊断:LIN2.0将NAD 7E作为已配置的从节点NAD
-
Read by Identifier 服务的ID 2 到31 被保留;
-
PS:
LIN 2.2规范: LIN2.2针对LIN2.1的错误进行了修正。
不同LIN 协议版本的节点混合时的行为
在 LIN 网络中,主节点控制通信,因此主节点的协议版本决定了从节点可以使用哪些协议版本。
1. 当主节点的协议版本为 LIN1.3 时
不能使用 LIN 2.x 的从节点。
2. 当主节点的协议版本为 LIN2.x 时
可以使用 LIN1.3 和 LIN2.x 的从节点。 但是,如果从节点是 LIN1.3,则主节点不能使用 LIN2.x 规范,例如扩展校验和和诊断。 同样,在 LIN 2.0/2.1 混合的情况下,协议版本之间的不同规范(例如功能寻址和节点配置和识别服务)不可用。
LDF是实现LIN诊断的充分条件
CAN总线诊断只需要有控制器(ECU)、诊断数据库(cdd&pdx等等)与诊断仪(Tester),通过请求ID与响应ID进行诊断。而LIN总线在此基础上,还必须通过LDF(LIN描述文件)进行调度,以经典ID(0x3c与0x3D)进行LIN诊断。
NAD 用于区分现有的LIN网络拓扑的节点
LIN网络拓扑是“一主多从”的结构,通过NAD区分从节点。CAN一般以Request/Response ID区分从节点。而LIN则是以NAD进行区分,利用一个ID(0x3C) 即实现多个从节点诊断服务;此方式节约了ID的使用,但是浪费了一个Byte,造成数据有效载荷降低。诊断帧的第一个字节是NAD(诊断用节点地址),这是一个字节长的诊断用节点地址。值范围从1到127(0x01~ 0x7F) ,0被保留
NAD(Node Address), 用于区分不同从机地址,下表是NAD的取值范围
范围 | 描述 |
---|---|
0x00 | 用于休眠指令 |
0x01~0x7D | 从机节点地址,即NAD |
0x7E | 功能节点地址(功能NAD) |
0x7F | 广播节点地址(广播NAD) |
1. 7E是通配功能寻址ID,在诊断报文中用于广播诊断请求,不能用在节点配置中(功能寻址:一般是一对多,一个主机对应多个从机(0X7E通配功能寻址ID))(物理寻址:一般是点对点通讯,一个主机,一个特定的从机)
2. 7F是作为NAD通配符,正常情况下不在诊断中使用,因为从节点收到7F和它自身的NAD是一样的,所以会导致冲突。7F在从节点配置中使用,以及物理寻址(自动寻址)中使用。
3. 用户定义的诊断可用来满足特定设备的要求,但是这同时表示它不能用作通用目的。这种方法使用128到255范围(0x80~0xFF)的NAD。
LIN诊断服务与报文
Service Identifier (SID):
A mandatory 1-byte field (0x00 to 0x3E) identifying the requested service.
在协议中给出了下表中 LIN从节点 诊断服务列表 0~0xAF 和 0xB8~0xFE 用于诊断(Reserved保留 ),而0xB0到0xB7用于节点配置服务(由于节点能力文件是为一个 Slave 节点定义的,因此它可能会与其他 Slave 节点的节点地址和帧 ID 重叠。为了解决 slave 节点之间重复设置的问题,节点配置和识别服务是一个额外的规范。节点配置和识别是一种高效重用 slave 节点的服务。 节点配置和识别使用单帧传输协议,从节点逐个配置。 节点配置和标识中定义的服务 (SID) 从 “0xB0” 到 “0xB7”)
节点配置SID | 服务名称 |
---|---|
0~0xAF | Reserved |
0xB0 | Assign NAD (重新配置节点地址NAD) |
0xB1(必需服务) | Assign frame identifier (使用节点定义文件中设置的消息 ID 重置每帧 1 个 PID。 这将解决重复的帧 ID。 仅限 LIN 2.0,在 LIN 2.1 中,使用“分配帧 ID 范围 (SID:0xB7)”用于重置帧 ID) |
0xB2(必需服务) | Read by Identifier(读取从属节点的产品标识号等信息) |
0xB3 | Conditional Change NAD (检测 LIN 网络中的恶意从节点(例如,如果连接了错误的节点)并更改 NAD) |
0xB4 | Data Dump(使用它来执行开发所需的任何诊断) |
0xB5 | Assign NAD via SNPD(Slave Node Position Detection)自动寻址指令 |
0xB6 | Save Configuration (仅限 LIN 2.1) 设置的 NAD 和 PID 将存储在非易失性 RAM 中 |
0xB7 | Assign frame identifier range (仅限 LIN 2.1) 每帧最多可重新配置 4 个 PID。 这将解决重复的帧 ID。 由于可以在一帧中重置多个帧 ID,因此与 LIN 2.0 的“分配帧 ID (SID:0xB1)”服务相比,可以缩短设置时间) |
0xB8~0xFF | Reserved |
SID ( Service Identifier )表示了从机节点应完成的服务请求。节点配置服务的 SID 区间为 0xB0~0xB7, 诊断服务的 SID 区间为 0x00~0xAF,0xB8~0xFE 。RSID ( Response Service Identifier )表示从机节点应答的内容,它的值是 SID+0x40 。
LIN诊断类型
LIN从节点所支持的不同诊断分类被定义在ISO17987中,ISO14229-7-UDSonLIN协议参考了ISO14229-1和ISO14229-2,并明确了以下内容:
(1)LIN的诊断服务;
(2)通过外部测试设备进行LIN车载服务器内存编程。
(3)ISO17987协议配置LIN从节点
ISO14229-7参考ISO14229-1,ISO14229-2,ISO17987全部
逻辑节点功能越复杂,支持的服务越多,对逻辑节点的计算能力要求就越高。 依据诊断服务的数量,LIN规范划分出三种不同的诊断类型——I类、II类和III类,适用于不同条件的逻 辑节点。I类最低,III类最高,较高类型完全包含较低类型的功能。
-
I 类是所有诊断类型的公共部分,诊断服务仅限于节点配置 ,故障都由主节点读取分析处理保存,只支持unsegmented诊断 ,提供信号处理、识别、配置功能,诊断功能采用单帧传输,这也是每个逻辑节点必备的服务。
-
II类节点增加了UDS定义的识别服务,故障同样由主节点来获取,分析处理和保存,区别在于支持unsegmented诊断和segmented诊断,必须支持支持ISO 14229-1定义的22服务和2E服务,必须支持节点配置服务, 诊断方式一般采用的完整帧传输协议。
-
III类节点相比II类节点,又增加了UDS定义的部分其它服务,具有较强应用功能的节点,除了基本的节点配置服务以外,还支持ISO14229-1的其他服务(该部分服务可视主机厂的需求而定),具有内部故障存储设备,有些还支持在线刷写,需要完整的BOOT-loder工具和相应的诊断服务去实现,支持unsegmented诊断和segmented诊断,ECU程序可以支持LIN总线在线升级 的功能。
参考资料
知乎 @Jenny ISO14229-7-UDSonLIN - 知乎