Autosar CP —诊断服务详解
汽车诊断功能概述
汽车诊断是指通过电子控制单元(ECU)和诊断工具对车辆进行检查和分析,识别和定位故障或潜在问题的过程。汽车诊断系统帮助维修技师和车辆拥有者了解车辆的运行状况,确定潜在的故障源,并进行适当的维修或维护。现代车辆配备了多个电子控制单元(ECU),可以监控发动机、变速箱、制动系统、安全系统等各类关键系统。
汽车诊断的组成部分:
- 电子控制单元(ECU):
- 现代车辆中,多个ECU负责监控和控制不同系统,例如发动机控制单元、变速箱控制单元、ABS控制单元等。
- ECU会实时监控车辆的传感器和执行器数据,并记录故障码(DTC, Diagnostic Trouble Code)以检测异常行为。
- 诊断通信协议:
- **OBD-II(On-Board Diagnostics II)**是汽车诊断的国际标准,广泛应用于全球车辆。通过OBD-II接口,可以读取ECU的故障码和数据流。
- **UDS(Unified Diagnostic Services)**是AUTOSAR框架中广泛使用的高级诊断协议,它扩展了诊断功能,允许车辆开发者定义更细致的诊断功能,如ECU重新编程、执行自检等。
- 故障码(DTC, Diagnostic Trouble Code):
- 当ECU检测到系统中的异常或故障时,会生成相应的故障码(如P0420,催化转换器效率低下)。
- 通过读取这些故障码,技师可以迅速识别问题,并进一步排查具体原因。
- 诊断工具:
- 诊断工具可以通过OBD-II或UDS协议与ECU通信,读取故障码、数据流、以及进行各种主动测试(如传感器和执行器测试)。
- 诊断工具包括便携式扫描仪、诊断软件(例如厂家专用软件或通用诊断工具),可以显示故障码、实时数据、车辆参数等。
汽车诊断的主要功能:
- 故障检测: ECU监控车辆传感器和执行器的数据,一旦检测到异常(如传感器失效、信号超出正常范围),会生成故障码。
- 故障码读取和清除: 使用诊断工具可以读取车辆ECU存储的故障码,并在问题解决后清除故障码,复位系统。
- 数据流监控: 技师可以通过诊断工具查看车辆实时数据,如发动机转速、进气温度、车速、氧气传感器电压等,用以分析问题。
- 主动测试和功能检查: 诊断工具可以执行主动测试,比如强制打开某个执行器(如油泵、喷油器),或者检查传感器和通信系统的状态。
- ECU重新编程与软件更新: 通过高级诊断服务,车辆制造商或维修技师可以对ECU进行重新编程或更新软件,以修复BUG或提升系统性能。
常见诊断协议:
- OBD-II(On-Board Diagnostics II):
- 自1996年起,OBD-II成为大多数车辆的标准接口。它允许用户读取基本的故障码和部分车辆数据。
- 通过OBD-II接口,用户可以访问发动机、排放控制系统和传感器数据。
- UDS(Unified Diagnostic Services):
- UDS是现代汽车诊断系统中的高级通信协议。它提供了更丰富的诊断服务集,如ECU刷写、测试服务、自诊断等。
- AUTOSAR标准中,UDS协议广泛用于对车载系统进行诊断、校准、编程等高级操作。
- KWP2000(Keyword Protocol 2000):
- KWP2000是另一种诊断协议,通常应用于1990年代至2000年代初的车辆。它与OBD-II类似,支持诊断故障码读取、数据监控等基本功能。
汽车诊断的常见用途:
- 故障排查与维修: 通过读取和分析ECU中的故障码,维修技师可以迅速找到车辆中的故障点,并进行相应的维修。
- 车辆保养和维护: 通过定期诊断,可以提前发现潜在问题,避免重大故障发生,延长车辆的使用寿命。
- 排放监控: 现代车辆的OBD系统会持续监控排放控制系统,确保车辆的排放符合环保要求,并能在排放系统故障时提醒驾驶员。
- 性能调试: 诊断系统可以用于车辆性能优化和调试,通过实时监控和调整车辆的参数,提升车辆的燃油经济性、动力输出等。
AutoSar诊断服务总体框架
由上图可以看出,诊断服务属于AutoSar服务层,诊断服务流通过CAN驱动----CAN IF----CANTP-----PDUR-----DCM模块,DCM模块处理诊断数据,并执行对应的具体诊断服务。
在AUTOSAR中,**DCM(Diagnostic Communication Manager)**模块负责车辆诊断通信的管理,提供与外部诊断工具或设备进行交互的接口。DCM模块主要支持通过诊断协议(如UDS、OBD-II)进行故障码读取、执行自诊断和维护操作。它是汽车诊断的核心组件之一,确保车辆能按照统一的诊断标准进行通信和操作。
AUTOSAR中的DCM(Diagnostic Communication Manager)、**DEM(Diagnostic Event Manager)和FIM(Function Inhibition Manager)**模块是支持汽车诊断和故障管理的关键组件。以下是它们的简单功能介绍:
- DCM(Diagnostic Communication Manager)
DCM模块负责管理诊断服务的通信。它在ECU和外部诊断工具之间提供了一个统一的接口,用于处理诊断请求、响应和传输诊断数据。它支持**UDS(Unified Diagnostic Services)**协议,并管理所有诊断通信会话。
功能:
- 接收并解析来自外部诊断工具的诊断请求。
- 处理诊断服务(如读取故障码、清除故障码、控制ECU重编程等)。
- 根据请求调用相应的ECU服务或应用层功能,生成响应并发送回诊断工具。
- 管理诊断通信会话(如正常通信、编程会话、扩展会话等)。
典型应用: 通过OBD(On-Board Diagnostics)接口读取车辆故障码(DTC),重编程ECU。
- DEM(Diagnostic Event Manager)
DEM模块负责管理车辆运行时发生的诊断事件(如故障),并处理故障码(DTC)的存储、更新和清除。它与ECU中的各个模块交互,收集故障信息并记录到内存中。
功能:
- 监控ECU内的诊断事件并记录故障码(DTC)。
- 管理故障的状态(如当前是否故障、是否间歇性出现等)。
- 记录故障的环境数据(如故障发生时的车辆状态)。
- 提供DTC信息给上层模块(如DCM),供诊断工具读取。
- 支持故障码的存储、恢复和清除。
典型应用: 在车辆检测到传感器或执行器出现故障时,DEM模块会记录DTC,并允许通过诊断工具读取和清除这些故障信息。
- FIM(Function Inhibition Manager)
FIM模块用于对系统中的某些功能进行抑制或启用控制,尤其是在特定故障状态下。它根据来自DEM模块的故障信息,决定是否抑制某些功能,以保护系统或确保安全。
功能:
- 基于故障信息(由DEM提供)抑制或恢复ECU中的某些功能。
- 监控系统的故障状态,并根据预设的条件,动态启用或禁用某些功能。
- 确保在某些故障状态下,系统功能能够安全降级或被抑制,避免对车辆性能或安全造成影响。
典型应用: 如果某个传感器出现故障,FIM模块可以抑制依赖该传感器的某些功能,防止故障扩散或对安全系统产生影响。
模块间的关系:
- DCM负责诊断通信,与诊断工具进行交互并处理诊断请求。
- DEM管理诊断事件和故障码的存储、更新及报告,将故障信息传递给DCM用于诊断响应。
- FIM利用DEM提供的故障信息,决定是否抑制或启用某些系统功能,以保证系统的稳定性和安全性。
这三个模块相互配合,为车辆提供了强大的诊断和故障管理功能,确保能够及时发现、记录和处理系统中的问题。
诊断服务分类
按照功能区分,可以分为 诊断和通信管理功能 数据传输功能 存储功能等等
其中诊断服务中有支持子功能和不支持子功能之分。
支持子功能的诊断服务:
- 某些诊断服务具有多个子功能,这些子功能通过额外的参数进行区分,通常用于提供更细化的操作。例如,**诊断会话控制服务(0x10)**具有多个子功能,如:
- 默认会话(sub-function: 0x01)
- 扩展诊断会话(sub-function: 0x03)
- 编程会话(sub-function: 0x02)
这些子功能为用户提供了在不同诊断模式下执行不同操作的能力。在请求该服务时,诊断工具可以指定子功能来确定所需的具体操作。
不支持子功能的诊断服务:
- 有些诊断服务不具备子功能,或者即使有子功能,它们的操作相对简单,不需要进一步细化。例如,**清除诊断信息服务(0x14)**通常不涉及子功能,只有单一的操作目标(清除特定的DTC)。
这种情况下,诊断工具只需发送服务号而无需附加子功能参数,ECU将直接处理该服务。
诊断服务数据格式
在AUTOSAR中,诊断服务数据的格式遵循**UDS(Unified Diagnostic Services,统一诊断服务)**协议标准。每个诊断服务请求和响应消息都有严格的结构,由服务标识符(SID)、子功能、数据标识符(DID)、故障代码(DTC)等组成。这些数据的格式统一规定,确保不同的诊断工具和ECU可以相互兼容。
诊断服务数据的基本格式
- 请求消息格式
请求消息是从诊断工具(如OBD-II扫描仪或服务工具)发送给车辆ECU的消息。其基本结构如下:
[服务标识符(SID)] [子功能] [参数数据]
-
SID(Service Identifier): 服务标识符,用来标识请求的是哪种诊断服务。UDS中SID为1个字节长,范围是
0x00
到0xFF
。 -
子功能(Sub-function): 用于指定诊断服务的具体操作模式或请求类型。子功能在某些服务中是可选的。
-
参数数据(Optional Parameters): 诊断服务可能需要附带一些额外的数据或标识符,称为参数数据。参数可以包括数据标识符(DID)、故障码(DTC)、地址、长度等。
- 响应消息格式
响应消息是ECU对诊断请求的回应。响应消息的格式基本与请求消息类似,但通常包含附加的状态信息或错误代码。
[正响应服务标识符] [数据]
-
正响应服务标识符: 正响应的服务标识符是请求SID加上
0x40
的偏移。例如,SID = 0x10
,正响应SID为0x50
。 -
数据(Response Data): 正确响应时,响应消息包含所请求的数据,如DTC的值或特定诊断信息。如果发生错误,响应消息包含错误代码。
诊断服务数据格式示例
- 诊断会话控制服务(SID = 0x10)
此服务用于切换诊断会话模式。请求格式如下:
请求:
[10] [Sub-function]
-
例如,进入扩展会话:
[10 03]
0x10
: 会话控制服务标识符0x03
: 子功能,代表扩展诊断会话
响应:
[50] [Sub-function]
-
响应成功:
[50 03]
0x50
: 成功响应服务标识符0x03
: 子功能确认
- 读取故障码(Read DTC Information,SID = 0x19)
此服务用于从ECU读取诊断故障码(DTC)。根据具体的子功能,可以选择读取不同类型的DTC。
请求:
[19] [Sub-function] [DTC Group] [Status Mask]
-
例如,读取所有DTC的请求:
[19 02 FF FF]
0x19
: 读取DTC信息的服务标识符0x02
: 子功能,表示读取存储的DTC0xFFFF
: 请求所有故障码组
响应:
[59] [Sub-function] [DTC Data]
-
响应成功:
[59 02 00 01 FF 08]
0x59
: 成功响应标识符0x02
: 子功能确认0x00 01 FF 08
: DTC数据,表示故障码和相关状态
- 安全访问(SID = 0x27)
安全访问服务用于保护敏感的诊断操作。请求分为两个阶段:首先请求安全种子,然后发送密钥进行认证。
请求:
-
请求种子:
[27 01]
0x27
: 安全访问服务0x01
: 请求种子(Request Seed)
响应:
[67] [Seed Data]
-
例如:
[67 01 12 34 56]
0x67
: 成功响应标识符0x01
: 子功能确认0x12 34 56
: 种子数据
-
发送密钥:
[27 02 78 9A BC]
0x27
: 安全访问服务0x02
: 发送密钥(Send Key)0x78 9A BC
: 密钥数据
响应:
[67 02]
-
例如:
[67 02]
0x67
: 成功响应标识符0x02
: 子功能确认
错误响应格式
如果诊断请求中出现错误(如服务或子功能不支持、条件不满足等),ECU会返回一个错误响应消息。错误响应的格式为:
[7F] [请求服务标识符] [错误代码]
- 7F: 错误响应的固定标识符
- 请求服务标识符: 对应请求中的服务号
- 错误代码: 错误的具体原因,常见的错误代码有:
0x11
: 服务不支持0x12
: 子功能不支持0x31
: 请求条件不满足0x33
: 安全访问失败
示例:
请求扩展会话时不支持此子功能:
[10 03]
-
ECU响应:
[7F 10 12]
0x7F
: 错误响应0x10
: 请求的服务标识符0x12
: 子功能不支持
数据标识符(DID)格式
一些诊断服务(如读取/写入数据)使用**数据标识符(DID, Data Identifier)**来标识特定的车辆数据。DID是2字节长,表示要读取或写入的车辆参数(如车速、里程、VIN等)。
请求读取数据:
[22] [DID High Byte] [DID Low Byte]
-
例如,读取车辆识别码(VIN,DID = 0xF190):
[22 F1 90]
响应:
[62] [DID] [Data]
-
响应VIN:
[62 F1 90 1G1JC5444R7252367]
AUTOSAR诊断服务的数据格式遵循UDS标准,具有一致的结构化格式。请求消息和响应消息都以**服务标识符(SID)**为核心,并根据不同的服务可能包含子功能、数据标识符(DID)、故障码(DTC)等额外参数。通过这些格式化数据,诊断工具可以与车辆ECU进行有效通信,执行读取数据、故障码管理、安全访问等操作。
诊断服务寻址方式
在AUTOSAR中,诊断服务的寻址方式决定了诊断请求如何被传递到目标ECU(Electronic Control Unit,电子控制单元)。寻址方式定义了诊断工具与ECU之间的通信范围和目标,可以是针对特定的ECU,也可以是面向整个网络的广播。诊断服务通常基于**UDS(Unified Diagnostic Services)**协议,通过以下几种寻址方式进行通信:
1. 功能寻址(Functional Addressing)
功能寻址是指诊断请求不针对某个特定的ECU,而是发送给所有具备某一特定功能的ECU。所有接收到该请求的ECU都会检查自己是否具备所请求的功能,如果具备就会响应。
- 典型应用: 功能寻址常用于广播诊断请求,像是读取DTC信息、诊断会话控制等不特定指向某个ECU的服务。
- 优点: 简化了对多个ECU的请求,避免诊断工具逐一发送请求。
功能寻址的工作方式:
- 诊断工具通过CAN总线发送功能寻址的消息,消息中使用一个特殊的功能地址,通常是一个广播地址。
- 所有连接在总线上的ECU接收到该消息后,检查请求是否与其支持的功能匹配,匹配的ECU会处理并响应该请求。
例子:
诊断工具 -> 广播请求:读取所有故障码
ECU 1: 检查是否有故障码,如果有则响应
ECU 2: 检查是否有故障码,如果有则响应
特点:
- 仅发出一次请求,所有相关的ECU都可接收。
- 响应可能是多个ECU的汇总信息。
2. 物理寻址(Physical Addressing)
物理寻址是指诊断请求针对某个特定的ECU。诊断工具向特定的物理地址发送请求,只有目标ECU能够接收到并处理该请求。
- 典型应用: 物理寻址常用于特定ECU的配置、参数读取或写入,例如对某个ECU进行单独的编程或校准。
- 优点: 通信定向性强,只有目标ECU响应,避免了无关ECU参与处理请求的情况。
物理寻址的工作方式:
- 诊断工具发送的请求携带目标ECU的物理地址,消息通过总线传输到目标ECU。
- 只有匹配该物理地址的ECU会接收和处理该请求,并向诊断工具发回响应。
例子:
诊断工具 -> 请求ECU 3进入编程会话
ECU 3: 接收并处理请求,进入编程模式
特点:
- 通信仅在诊断工具和目标ECU之间进行,其他ECU不会响应该请求。
- 通常用于专门针对单个ECU的诊断操作。
3. 混合寻址(Mixed Addressing)
混合寻址是功能寻址和物理寻址的组合方式。在某些情况下,诊断请求使用功能寻址发送,但响应使用物理寻址。这种方法确保了请求能够广播到所有ECU,但响应是由目标ECU单独发回诊断工具。
- 典型应用: 常用于涉及多个ECU的诊断操作,在广播请求之后,期望只有一个ECU发回响应。
- 优点: 保证请求的灵活性和高效性,同时又能确保唯一、定向的响应。
混合寻址的工作方式:
- 诊断工具通过功能寻址发出请求,所有接收到该请求的ECU都会检查并决定是否需要响应。
- 只有一个符合条件的ECU(如带有特定故障码的ECU)会使用物理寻址方式发回响应。
例子:
诊断工具 -> 请求读取所有故障码(功能寻址)
ECU 2: 有故障码,发送物理地址响应
特点:
- 请求使用功能寻址的灵活性,响应是单一的物理地址,避免多个ECU同时响应。
4. 扩展寻址(Extended Addressing)
扩展寻址是在消息头中增加一个额外的地址字段,用于扩展物理寻址的地址空间。与标准寻址相比,扩展寻址允许更多的设备在同一网络中使用。
- 典型应用: 扩展寻址通常用于网络中需要支持较大数量的ECU或设备的场景,例如高端汽车系统中有大量ECU需要单独通信。
- 优点: 提供了更大的寻址空间,使得诊断系统可以支持更多ECU。
扩展寻址的工作方式:
- 诊断消息在发送时,除了标准的CAN ID,还会附加一个字节的扩展地址,确保在网络中正确区分不同ECU。
- 接收方根据消息头中的扩展地址确定是否该消息是发给自己的。
5. 广播寻址(Broadcast Addressing)
广播寻址是诊断工具向网络中的所有ECU发送一个消息,所有ECU都会接收到该请求,并根据请求的内容决定是否响应。这种寻址方式主要用于广播一些状态查询请求或者同步命令。
- 典型应用: 广播寻址常用于状态同步、网络管理或系统初始化场景。
- 优点: 提供一种高效的方式向所有ECU传递信息,不需要分别发送多次。
诊断服务寻址的总结
寻址方式 | 特点 | 应用场景 |
---|---|---|
功能寻址 | 广播请求给多个ECU,多个ECU检查并决定是否响应。 | 读取DTC信息、会话控制、网络管理等。 |
物理寻址 | 仅对特定ECU发送请求,单个ECU响应。 | 编程、配置、参数调整、校准等。 |
混合寻址 | 请求通过功能寻址,响应通过物理寻址。 | 读取故障信息,避免多ECU同时响应。 |
扩展寻址 | 使用扩展地址字段来支持更多设备的寻址。 | 大规模ECU网络。 |
广播寻址 | 向所有ECU发送信息,通常无响应。 | 系统同步、状态查询、系统重启等。 |
在AUTOSAR诊断服务中,寻址方式的选择取决于诊断操作的目标和范围。功能寻址适用于需要多ECU响应的场景,而物理寻址用于单个ECU的定向操作。混合寻址则结合了二者的优势,既能广播请求,又能保证单一响应。而扩展寻址则适用于大型ECU网络中。
常用的诊断服务
在**UDS(Unified Diagnostic Services)**中,常用的诊断服务包括以下:
- 0x10 - 诊断会话控制(Diagnostic Session Control)
- 0x11 - ECU重置(ECU Reset)
- 0x14 - 清除诊断信息(Clear Diagnostic Information)
- 0x19 - 读取故障码信息(Read DTC Information)
- 0x22 - 读取数据标识符(Read Data By Identifier)
- 0x23 - 读取内存数据(Read Memory By Address)
- 0x24 - 读取定期数据(Read Scaling Data By Identifier)
- 0x27 - 安全访问(Security Access)
- 0x28 - 通信控制(Communication Control)
- 0x2E - 写入数据标识符(Write Data By Identifier)
- 0x2F - IO控制(Input Output Control By Identifier)
- 0x31 - 例行控制(Routine Control)
- 0x34 - 请求下载(Request Download)
- 0x35 - 请求上传(Request Upload)
- 0x36 - 传输数据(Transfer Data)
- 0x37 - 结束传输(Request Transfer Exit)
- 0x3E - 测试仪保持连接(Tester Present)
- 0x85 - 控制DTC设置(Control DTC Setting)
一些典型的诊断服务说明
0x10 - 诊断会话控制
0x10 - 诊断会话控制(Diagnostic Session Control) 是**UDS(Unified Diagnostic Services)**协议中的一个常用服务,它用于切换ECU(电子控制单元)的诊断会话模式。不同的会话模式决定了ECU支持的诊断服务的范围,通常根据车辆状态和诊断需求切换会话。
根据需求,常用的会话类型包括以下几种:
-
0x01 - 默认会话(Default Session):
- 这是ECU的默认模式。
- 在该模式下,ECU只允许执行一些基本的诊断服务,比如读取数据(0x22)、读取故障码信息(0x19)。
- 不支持编程或扩展的功能。
-
0x02 - 编程会话(Programming Session):
- 用于对ECU进行编程、重新标定或固件更新。
- 在该模式下,ECU支持下载新软件、上传数据(0x34, 0x35),以及对其进行特定功能的配置。
- 通常在车辆进行维修或更新时使用。
-
0x03 - 扩展会话(Extended Diagnostic Session):
- 提供比默认会话更多的诊断功能。
- 允许访问更多的服务,例如例行控制(0x31)、安全访问(0x27)等。
- 适用于高级的诊断操作和故障排除。
-
0x04 - 安全会话(Safety System Session):
- 此会话通常用于安全相关的功能和诊断。
- 在某些车辆的安全系统中(如气囊系统),需要进入特定的安全会话才能执行某些功能。
会话模式转换图如下:
诊断工具通过发送以下请求切换ECU的会话模式:
-
请求格式:
[0x10] [会话类型]
例如,要切换到编程会话(0x02),请求消息为:
10 02
-
响应格式: 当ECU成功切换到请求的会话模式时,它会返回响应:
[0x50] [会话类型]
例如,ECU切换到编程会话的响应消息为:
50 02
特性:
- 切换到不同的会话模式后,ECU将开启相应的功能和诊断权限。
- 不同会话模式会对服务时间和超时参数(如P2、P2*时间)进行调整,这些参数决定了ECU在不同会话下的响应时间。
典型应用:
- 进入编程会话以更新ECU软件。
- 切换到扩展会话以执行高级诊断和控制操作。
- 在默认会话下执行日常的诊断读取任务。
0x19 - 读取故障码信息
0x19 - 读取故障码信息(Read DTC Information) 是 UDS(Unified Diagnostic Services) 中用于查询ECU中的故障码(DTC, Diagnostic Trouble Code)及相关信息的诊断服务。这个服务通常用于读取车辆的错误状态,帮助技师和诊断工具分析车辆故障。
该服务可以获取车辆运行过程中检测到的各种故障码,并提供关于故障的状态、计数、发生条件等详细信息。通过这些信息,技师可以识别系统中的问题并进行故障排除。
子功能:
0x19 服务通过不同的子功能来读取不同类型的DTC信息。常见的子功能如下:
-
0x01 - 读取所有已激活的DTC(Report active DTCs):
- 返回当前正在激活的所有故障码。
-
0x02 - 读取所有存储的DTC(Report stored DTCs):
- 返回ECU中已存储的所有历史故障码。
-
0x03 - 读取DTC状态(Report DTC Snapshot Records):
- 返回特定DTC的快照数据,包含发生故障时的环境信息。
-
0x04 - 读取扩展数据记录(Report DTC Extended Data Records):
- 获取DTC的扩展数据,通常包含故障次数、时间戳等详细信息。
-
0x05 - 读取DTC的数量(Report DTCs by Status Mask):
- 根据状态掩码筛选并读取符合条件的DTC。
-
0x06 - 读取指定范围的DTC(Report DTCs with Status Mask):
- 按照特定状态过滤的故障码进行报告。
-
0x07 - 读取DTC的支持状态(Report supported DTCs):
- 获取ECU所支持的DTC列表,展示可能检测到的故障码类型。
-
0x08 - 读取DTC故障码的记录状态(Report DTC Fault Detection Counter):
- 返回故障检测计数器的值,用于统计DTC的发生次数。
-
0x0A - 读取车辆制造商特定的DTC信息(Report DTCs with Permanent Status):
- 提供车辆制造商定义的永久性故障信息。
请求与响应格式
-
请求格式:
[0x19] [子功能] [附加参数...]
例如,要读取所有已激活的DTC,发送的请求如下:
19 01
-
响应格式:
[0x59] [子功能] [故障码信息...]
例如,ECU返回激活的DTC时的响应格式可能如下:
59 01 [DTC1] [DTC2] ...
DTC的编码格式
DTC 通常是用 3 字节编码表示的,格式如下:
- 第一个字节:系统类型(如动力系统、变速系统等)。
- 第二、三字节:具体的错误信息,标识具体的故障类型和子系统。
例如,DTC 0xP0300
表示发动机系统中随机/多缸点火失败。
典型应用:
- 读取存储的DTC以分析车辆的历史故障记录。
- 通过读取DTC的状态信息,查看故障是否持续存在。
- 查询故障的详细环境数据(快照)以了解故障发生时的具体车辆运行状态。
0x27 - 安全访问
0x27 - 安全访问(Security Access) 是 UDS(Unified Diagnostic Services) 协议中的一个重要诊断服务,用于保护车辆的敏感数据和操作功能不被未经授权的用户访问。通过安全访问机制,ECU需要验证诊断工具的权限,确保只有授权的工具能够执行某些安全相关的操作(如ECU编程、重新标定、配置修改等)。
功能:
-
安全访问 通过一个挑战-应答的过程实现授权。ECU发送一个随机生成的“种子”(Seed)给诊断工具,诊断工具根据特定的算法生成一个对应的“密钥”(Key)并返回给ECU。ECU验证密钥以决定是否授予访问权限。
-
安全级别:不同的安全操作可能有不同的安全级别,每个级别对应不同的种子-密钥对。
安全访问的工作流程
- 请求种子(Request Seed):诊断工具向ECU发送请求,要求进入某个安全级别。ECU返回对应的“种子”。
- 生成密钥(Generate Key):诊断工具根据特定的算法,用种子生成密钥。
- 发送密钥(Send Key):诊断工具将生成的密钥发送给ECU。ECU验证密钥的正确性。
- 访问授权:如果密钥验证通过,ECU允许进入该安全级别,授权执行后续操作。如果密钥验证失败,访问将被拒绝,并可能引发计数器限制重复尝试。
子功能
- 0x01 - 请求种子(Request Seed):诊断工具向ECU请求种子,用于生成密钥。
- 0x02 - 发送密钥(Send Key):诊断工具发送计算好的密钥给ECU,ECU根据密钥来验证授权。
请求/响应格式
-
请求种子:
-
请求格式:
[0x27] [安全级别 | 0x01]
例如,向安全级别1请求种子:
27 01
-
响应格式:
[0x67] [安全级别 | 0x01] [种子]
例如,ECU返回的响应:
67 01 [种子]
-
-
发送密钥:
-
请求格式:
[0x27] [安全级别 | 0x02] [密钥]
例如,发送安全级别1的密钥:
27 02 [密钥]
-
响应格式:
[0x67] [安全级别 | 0x02]
例如,ECU验证成功后返回:
67 02
-
典型应用
- ECU编程:在更新ECU的固件或软件时,通常需要通过安全访问验证,确保只有授权的人员能够进行此类操作。
- 功能启用或禁用:某些车辆的高级功能(如电子限速、牵引力控制等)可能需要通过安全访问进行启用或禁用。
- 防止恶意攻击:安全访问确保了车辆系统的安全性,避免了未经授权的工具或用户篡改系统参数或功能。
重试限制:
- 安全访问通常会有重试次数的限制。如果诊断工具多次尝试并发送错误的密钥,ECU可能会进入“锁定状态”,拒绝进一步的访问请求,或者会设置一段时间的冷却期,防止暴力破解。
0x28 - 通信控制
0x28 - 通信控制(Communication Control) 是 UDS(Unified Diagnostic Services) 中的一个诊断服务,主要用于控制ECU的通信行为。该服务允许诊断工具启用或禁用某些通信功能,以减少不必要的数据传输,尤其是在测试、诊断或编程操作期间。
- 通信控制 通过允许或禁止ECU的某些通信行为,帮助优化通信负载或保护网络不被不必要的信息占用。
- 例如,车辆在诊断过程中可能不需要某些定期发送的消息,通过这个服务,可以暂时关闭ECU的消息发送功能。
常见应用场景:
- 调试和编程:在ECU编程时,需要减少总线负载,确保可靠的通信。
- 省电模式:在特定操作下(如低功耗模式),需要关闭某些通信功能以节省电量。
- 网络管理:允许某些网络节点继续通信而其他节点处于非活动状态。
子功能:
通信控制服务包含几个子功能,用于控制不同通信类型的启用和禁用:
-
0x00 - 启用所有网络通信(Enable All Network Communication):
- 恢复所有通信功能,ECU可以继续正常发送和接收消息。
-
0x01 - 禁用所有网络通信(发送和接收)(Disable Rx and Tx):
- 禁用ECU的所有网络通信,即既不能发送也不能接收消息。
-
0x02 - 禁用接收消息(Disable Rx):
- 禁止ECU接收来自其他网络节点的消息,但可以发送消息。
-
0x03 - 禁用发送消息(Disable Tx):
- 禁止ECU发送消息到网络,但可以接收其他节点发送的消息。
请求/响应格式
-
请求格式:
[0x28] [子功能] [通信类型]
例如,发送请求以禁用所有网络通信(发送和接收):
28 01 [通信类型]
-
响应格式:
[0x68] [子功能] [通信类型]
例如,ECU响应禁用所有通信的请求:
68 01 [通信类型]
通信类型
通信类型字段指定了要控制的通信类型,可能的值包括:
- 0x01 - 默认通信:控制与网络基础通信相关的消息(如诊断消息)。
- 0x02 - 通信类型1:控制特定的应用层通信(如功能消息)。
- 0x03 - 通信类型2:控制与网络管理或其他特定协议相关的消息。
典型应用场景
- 减少总线负载:在进行诊断或调试时,禁用不必要的通信减少CAN总线的负载。
- 省电模式:进入省电模式时禁用所有通信,保持低功耗。
- 特定测试:需要在某些测试中关闭接收或发送功能以避免外部干扰。
0x14 - 清除诊断信息
0x14 - 清除诊断信息(Clear Diagnostic Information) 是 UDS(Unified Diagnostic Services) 中的一个常用诊断服务,用于从ECU中清除存储的故障码(DTC,Diagnostic Trouble Code)及其相关数据。这一服务通常在修复车辆问题后,由维修技师或诊断工具使用,以便重置故障记录。
- 清除诊断信息 服务可以清除ECU中某些或全部诊断故障码(DTC),包括相关的快照数据和扩展数据。
- 这个功能在车辆维修或维护完成后使用,以清除修复后的故障记录,使ECU可以重新监控新的故障发生。
请求/响应格式
-
请求格式:
[0x14] [DTC组别]
- DTC组别:指定要清除的故障码组,可以针对某一组特定的DTC,也可以使用全局的DTC组(通常是
0xFFFFFF
)来清除所有故障码。
例如,清除所有DTC:
14 FF FF FF
- DTC组别:指定要清除的故障码组,可以针对某一组特定的DTC,也可以使用全局的DTC组(通常是
-
响应格式:
[0x54]
例如,当清除成功时,ECU返回:
54
典型应用场景:
- 修复故障后清除故障码:在故障修复后,技师使用该服务清除存储的故障码,确保新的故障监控可以正常工作。
- 维护操作后:例如在车辆定期保养后清除所有相关的DTC记录。
- 车辆重新编程后:重新编程或标定ECU之后,清除过时的故障记录,确保新配置不受旧故障影响。
DTC组别标识符用于指定要清除的故障码范围。常用的DTC组别标识符包括:
- 0xFFFFFF:清除所有存储的DTC(全局清除)。
- 特定DTC组别:如果希望清除特定模块或子系统的DTC,可以指定特定的DTC组别。每个ECU或车辆制造商可能定义了特定的组别代码。
注意事项:
- 仅清除存储的DTC:使用
0x14
服务只会清除存储的故障码,不会影响当前激活的DTC(这些需要修复相关问题才能被清除)。 - 冷却期:在某些ECU中,可能存在一个冷却期,故障码不会立刻清除,必须在故障状态被确认解决后,清除请求才能成功执行。