在上一篇文章 什么是 UDS?为什么要用?帧格式? (qq.com) 我们已经看到了 UDS 协议的简介。本章,我们将看到 UDS 协议中的功能单元。特别是我们将看到诊断和通信管理及其支持服务。包括:
该诊断和通信管理功能单元用于控制ECU中的诊断和通信相关操作。
诊断会话的服务 ID 为 0x10,响应 SID 为 0x50。诊断会话控制是 UDS 使用的最重要的服务之一。诊断会话控制用于控制ECU的诊断会话。此服务用于将当前诊断会话更改为其他会话。这些会话用于启用或禁用ECU中的一组特定诊断功能和特性。UDS 中有许多可用服务,某些服务只有在 ECU 处于默认会话中时才能访问,而其他一些服务可以在其他会话中访问 ECU。我们可以说这个诊断会话控制是访问ECU的网关。在执行任何诊断操作之前,此诊断服务应授予运行相应服务的访问权限。这是由汽车制造商决定的。例如,假设在默认会话中,我们无法升级 ECU 的软件,因为默认会话无权对 ECU 进行重新编程。只有在编程会话中,我们才能由授权的线路工程师对ECU进行重新编程。此诊断会话的主要目的是为 ECU 提供安全性。它将防止 ECU 进行不必要的访问。只有授权人员才能访问它。如果每个诊断服务都可以访问ECU,则它可能会因软件的错误闪烁而损坏。因此,在发出任何诊断请求之前,客户端必须确保此服务在ECU当前会话中是可访问的或不可访问的。如果没有,则在执行所需的请求后首先发送会话更改请求。如果服务器 (ECU) 处于非默认会话中,或者诊断处于非活动状态5秒钟,则ECU将进入默认会话。 | |
| 此会话处于空闲状态。每当 ECU 通电时,它只会处于此默认会话中。ECU 将保持默认会话状态,直到从客户端请求另一个诊断会话。此会话中提供了写入数据字节标识符 (0x2E) 、读取数据字节标识符 (0x22) 、ECU 复位 (0x11) 、测试人员存在 (0x3E) 和读取 DTC (0x19) 等服务。安全访问 (0x27) 不可用。与所有其他诊断会话控制子功能相比,此服务的安全性较低。示例:在车库中,有人正在尝试读取诊断故障代码 (DTC) 。 |
| 此会话用于对ECU进行编程或将数据从客户端传输到服务器。 |
| 此会话中允许安全访问 (0x27) ,这意味着在此会话中已解锁安全级别示例:此会话是下线工程师进行动态车辆测试以检查安全级别 |
| 示例:此会话正在检查安全气囊和胎压监测器的安全性。 |
| |
| 此会话取决于每个 OEM,如果他们想根据自己的要求实现任何会话,他们可以使用它。 |
| 此会话也类似于车辆制造特定,但而不是车辆制造商,如果系统供应商想要根据其特定要求实施任何会话,则可以使用它。 |
| |
有两种类型的响应帧。这是一个积极的回应和一个消极的回应。如果我们想从一个非默认会话切换到另一个非默认会话,首先我们需要切换到默认会话,然后我们可以切换到另一个非默认会话。
ECU 重置的服务 ID 为 0x11,响应 SID 为 0x51。
ECU复位服务用于重新启动车辆中的特定ECU或所有ECU。这项服务的动机是将ECU从故障或挂起状态或非工作状态中恢复。
在ECU复位期间,它不会接受来自客户端的任何请求,也不会向客户端发送任何响应。此服务在扩展会话中受支持。
| |
| 硬复位意味着从ECU中取出电池 (电源) ,然后将ECU与电池重新连接。在这种类型的复位中,ECU会重新初始化系统的核心硬件组件,并且还会重新初始化非易失性和易失性存储器。此重置可能会丢失一些数据,因为在ECU运行期间电池突然被取出。 |
| 钥匙关开复位只是车辆的点火关断过程。这是微控制器的正常睡眠-唤醒模式。当我们进行 Key Off On 复位 ECU 时,不会立即断电。它将进入启动模式,然后将所有数据存储在非易失性存储器中,并在不丢失任何数据的情况下取消初始化硬件变量。在这种重置方法中,没有丢失数据的机会。这是重置的正确方法,大多数 OEM 都在使用这种类型的 ECU 重置。 |
| 软重置只不过是重新启动应用程序的主要软件。当我们进行这种类型的重置时,微控制器的堆栈指针指向 main () 函数的地址。然后它将首先开始执行。例如,将进行看门狗重置。每当挂起或发生任何故障时,该看门狗定时器将重置微控制器,并从 main () 函数启动。 |
| 在这种类型的复位中,不会发生点火关闭。ECU将进入睡眠模式,ECU随时准备唤醒。 |
| |
安全访问的服务 ID 为 0x27,响应 SID 为 0x67。
此安全访问诊断服务用于提供对 UDS 协议服务的安全访问,以避免安全漏洞。出于安全考虑,某些诊断数据和服务可能会受到限制。
此服务将授予对特定服务的读取和写入访问权限。在处理任何服务 ID (SID) 操作之前,必须检查安全访问,以了解客户端是否有权对此 SID 进行读取或写入。
例如,要上传和下载软件,无法由所有人访问常规控制和VIN (车辆识别号) DID,一些授权测试人员只能访问这些SID。
- 测试人员使用 SID 0x27和子功能 ID 0x01发送解锁 ECU 的请求。0x01意味着请求种子。
- UDS 服务器接收请求,假设条件正确,并根据加密算法生成随机种子和密钥,服务器将种子发送到客户端并得到肯定的响应。
- 使用接收到的种子,测试工具生成密钥并将此密钥发送到服务器,以使用 SID 0x27和子功能 ID 0x02解锁 ECU。0x02 表示关键。
- 如果测试工具 (客户端) 发送的解锁密钥与服务器期望密钥匹配,则发送肯定响应并解锁ECU,否则将发送带有特定否定响应代码的否定响应。
通信控件的服务 ID 为 0x28,响应 SID 为 0x68。
此通信控制服务用于控制ECU服务器的通信。这意味着此服务通过诊断线启用或禁用来自服务器 (ECU) 的消息的传输或接收。
此服务用于控制ECU的发射器和接收器。测试人员可以同时使用多种类型的通信。在希望为所有或一组ECU停止通信的上下文中,此服务非常有用。例如,可以在软件下载期间使用它,以最大限度地提高可用带宽。
| |
| |
| |
| 在此类型中,消息的传输处于启用状态,消息的接收处于禁用状态。 |
| |
此身份验证服务是在 ye 之后添加的ar 2020,这用于为比安全会计允许的更现代的身份验证方法提供标准化方法ess (0x27) 服务,包括使用基于 PKI 的证书交换进行双向身份验证。
身份验证的服务 ID 为 0x29,响应 SID 为 0x69。
测试设备的服务 ID 为 0x3E,响应 SID 为 0x7E。
它是UDS协议中的重要服务之一,我们将看到这个服务ID的用途。
此服务用于向服务器指示客户端仍连接到服务器。此服务用于使服务器在当前会话中保持活动状态,默认会话除外。为了使客户端保持在当前会话 (非默认会话) 中,使用测试器在场 (0x3E) ,客户端将定期发送此服务 (0x3E) 。
如果客户端与服务器交换任何数据的时间不超过大约 5 秒的 S3 计时器值 (此计时值在下面的 S3 计时器中进行了说明) ,则出于安全考虑,服务器 (ECU) 将断开连接并自动回退到默认会话。
|
0x00 – 不支持 SuppressPosResMsgIndication (SPRMI) |
0x80 – SuppressPosResMsgIndication (SPRMI) 支持 (第 7 位已设置 – (SPRMIB) ) |
S3 服务器参数是在每个 ECU 中实现的服务器 (ECU) 端时序参数。S3 服务器参数的主要功能是在超时后从非默认会话 (编程、扩展、安全系统会话) 自动返回到默认会话。超时值仅基于 S3 参数。当测试人员请求更改为非默认会话时,S3 计时器将启动,并且 S3 计时器值可能因 OEM 而异,但大多数 OEM 将 S3 值保留为 5 秒。
如果客户端在该期间的非默认会话中没有执行任何操作,则为了安全起见,ECU将自动进入默认会话。假设服务器在超时后不进入默认会话并保持在相同的非默认会话中。不知道如果我们启动车辆,ECU将无法工作。因此,可能会发生事故或其他故障。
抑制正响应消息指示位 (SPRMIB) 仅在具有子功能字节的子功能服务中受支持。该位用于定义 ECU 的正响应是否要向客户端公开。suppressPosResMsgIndicationBit仅通过 CAN 接口受支持,而 K 线和 ITS 接口不受支持。
如果服务支持 suppressPosResMsgIndicationBit,则位 7 将解释为 suppressPosResMsgIndicationBit。
- 当位 7 为“1” (SPRMIB=1) 时,ECU 不会向客户端发送正响应,这意味着它将抑制正响应。
- 当位 7 为“0” (SPRMIB=0) 时,ECU 将向客户端发送正响应,这意味着不抑制正响应。
- 如果服务不支持 SPRMIB,则它将发送否定响应 (不支持子函数) ,并显示 suppressPosResMsgIndicationBit (SPRMIB) =1。
注意:使用 SPRMIB 我们只能抑制积极的反应。否定反应不能被抑制。以下是一些具有支持 SPRMIB 的子功能的服务。
如果服务不支持 SPRMIB,则它将发送否定响应 (不支持子函数) suppressPosResMsgIndicationBit (SPRMIB) = 1。我们知道现在的测试器只有两个子功能,即0x00和0x80。因此,不支持0x01 0x7F。如果发送不支持的子函数,则它将发送否定响应。
控件 DTC 设置的服务 ID 为 0x85,响应 SID 为 0xC5。
通常,诊断故障代码 (DTC) 用于指示由ECU引起的故障。在某些情况下,测试人员可能会认为不检测ECU中发生的某些错误。
届时,我们可以使用这项服务。当客户端/测试人员在发生故障时需要停止或恢复服务器/ECU更新DTC时,使用控制DTC设置服务。
当客户知道车辆中的问题但试图通过做一些额外的实验来找到根本原因时,这将非常有帮助。
控制DTC设置服务用于打开或关闭故障错误代码的检测。
当客户端请求服务器关闭时,服务器会收到请求并暂时关闭此功能,并且服务器将保留当前值并挂起新值。
稍后,当客户端请求服务器打开时,服务器将使用新值进行更新。
如果在控制 DTC 设置处于 OFF 状态时,用户请求清除诊断信息服务 (0x14) ,则服务器仍可能清除 DTC 信息。
如果客户端在服务器的 DTC 设置已处于 OFF 模式时请求关闭服务,则服务器将以肯定响应进行响应,并将忽略该请求。