本文主要是介绍《UDS协议从入门到精通》系列——图解0x11:ECU复位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《UDS协议从入门到精通》系列——图解0x11:ECU复位
- 一、简介
- 1.1 预先了解:KL15和KL30是什么?
- 1.2 什么是ECU复位服务?使用它需要注意什么?
- 1.3 ECU复位服务的应用场景
- 二、数据包格式
- 2.1 服务请求格式
- 2.2 服务响应格式
- 2.2.1 肯定响应
- 2.2.2 否定响应
- 三、通信示例
Tips📌: ① 本文描述中部分关键词带有双下划虚线,鼠标移动到上面即可快速了解他们。
② 本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)
学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<
一、简介
1.1 预先了解:KL15和KL30是什么?
在详细介绍该服务之前,首先了解一些基础知识:汽车上的ECU都需要供电,通常有两类供应电源,一类是长期处于电池包供电状态的常电电源,另一类可以称为唤醒电或者钥匙电,顾名思义就是用于钥匙开关启动车辆后才会被正常供电的ECU;在汽车行业中,常听到的KL15和KL30就跟他们有关,实际上KL15和KL30是指电线规格或线束的命名,这两条电线在汽车的电路系统中起着不同的作用,KL15线提供点火开关激活时的电源,而KL30线提供持久的电源供应。
KL15线 通常用于汽车电路中的"常电"或"ACC电源",指的是在汽车点火开关处提供电源的线路。当点火开关处于ON或ACC档位时,KL15线会激活电路,使得车辆的电子设备(如收音机、电脑等)可以正常工作。KL15线的电压通常为12V。
KL30线 则是指汽车电路中的"主电"或"电池正极",它是直接连接到车辆电池正极的电线。KL30线提供持久的电源供应,使得车辆的主要电子设备(如发动机控制单元、空调系统、灯光等)可以正常工作。KL30线的电压通常也为12V。
1.2 什么是ECU复位服务?使用它需要注意什么?
该服务请求ECU根据请求消息中的ResetType参数的值执行不同类型的ECU重置。重置成功后(ECU正响应该服务请求),进入Default Session(默认会话模式)。
2020版的ISO14229-1标准中指出,当Client向Server发送0x11服务请求时,Server可在复位行为完成之后或者开始复位行为之前给到Client诊断响应,但14229-1强烈推荐的一种做法是:“当Server接收到来自Client的0x11服务请求时,Server应当先给出诊断响应然后开始重启行为“。
(原因举例:一方面,几乎所有ECU软件设计中一旦走复位重启流程,已经不记得之前发生过什么,不知道收到什么请求,又要给谁发响应;另一方面,如果请求11诊断服务时未抑制正响应,在复位完成之前,一般都会先回复NRC 0x78让Client进行等待,那么Client需要根据不同的ECU节点的回复做超时监控,这无疑增加了Client的负担,对于Client而言,最为简单的方法就是发送完请求,各ECU节点回复正响应,然后各自完成复位操作即可。)
此外,建议在复位操作执行期间,ECU不要接受任何请求消息以及不要发送任何响应消息,避免发生意料之外的问题。
1.3 ECU复位服务的应用场景
一般而言,对于11诊断服务,主要应用场合如下:
- ECU被刷写新的软件后,此时需要通过11服务重启该ECU使其恢复到初始状态;
- 在产线下线标定的过程中,对于KL30供电的ECU存在一些仅在下电时存储的数据,此时需要通过11诊断服务使ECU走下电流程进而完成相应数据的保存;
- 为满足特定功能的需要,输入相关标定参数给到ECU后,只有通过发送服务11才能使得标定参数生效的场景;
- 对于KL30供电的ECU节点,可以使用诊断服务11使ECU快速进入休眠的场景。
二、数据包格式
2.1 服务请求格式
对于请求消息中Reset Type的取值及其含义如下表所示:
复位类型 | 取值 | 含义/复位特点 |
---|---|---|
---- | 0x00 | 保留 |
HardReset (硬复位) | 0x01 | 模拟KL30电源的重上电,该复位基本可以等同于Server直接掉电然后重启, 主要用于需要彻底复位的场景,比如刷写之后的复位 |
KeyOffOnReset (点火开关复位) | 0x02 | 模拟KL15点火钥匙的重启,此类复位用于模拟点火开关从off–>on的过程, 一般而言NVM数据会保持不变,VM将重新初始化 |
SoftReset (软复位) | 0x03 | 效果同上,只是复位没有那么彻底,在无需初始化任何数据的前提下 重置PC指针重新运行应用程序,即RAM中的内容不会重置 |
enableRapidPowerShutDown (使能快速休眠流程) | 0x04 | 即开启ECU的休眠功能,该子功能适用于非点火上电而仅采用电池供电(KL30供电)的ECU。 对于这类ECU通常情况下,当关闭钥匙电后,过段时间ECU会进入PowerOff状态(即整体下电), 当通过0x11服务请求使用该子功能后,关闭钥匙电不会使ECU进入下电状态,而是进入休眠状态, 这种状态下,ECU可以被快速唤醒。相对于整体下电状态,休眠状态的进入和退出都更加迅速, 但同时这种状态也会多一些功耗。 |
disableRapidPowerShutDown (抑制快速休眠流程) | 0x05 | 适用于非点火上电而仅采用电池供电(KL30供电)的ECU,抑制其进入下电休眠流程 |
vehicleManufacturerSpecific (供整车制造商使用的自定义复位类型) | 0x40 - 0x5F | 整车厂自定义 |
systemSupplierSpecific (供系统供应商使用的自定义复位类型) | 0x60 - 0x7E | 零部件供应商自定义 |
---- | 7F | 保留 |
2.2 服务响应格式
2.2.1 肯定响应
ResetType:取值及对应含义与上表相同;
powerDownTime:该参数仅在subfunction(即ResetType)=0x04时才会有,指的是ECU断电过程中保持待机状态的最小时间,即指示这个ECU至少要多久才能进入休眠状态。其他情况下,Server只回复前两个字节,该参数取值范围为0x00-0xFE(254s),0xFF为无效值。
2.2.2 否定响应
NRC | 含义 |
---|---|
0x12 | 子功能参数不受支持 |
0x13 | 消息长度错误 |
0x22 | 不满足请求标准/条件 |
0x33 | 由于复位操作影响ECU正常功能或者状态,有一定的危险性,所以标准中对于这个服务提供了该NRC, 主机厂在实现该协议时可以(而不是必须)将复位请求定义在安全解锁状态下才能执行, 如果ECU未被解锁,请求重置将受到保护(Server在响应复位请求时处于security lock状态),就回复这个NRC。 |
三、通信示例
假设现在目标ECU处于钥匙电上电状态,但不应处于运行模式(毕竟不能在开车过程中复位,即如果是燃油车,动力源为发动机,发动机应关闭;如果是混动车,发动机和ISG电机都要关闭。)诊断仪发送复位请求,发送请求时设置spr位为0(即不抑制正响应),通信数据包如下所示:
>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<
这篇关于《UDS协议从入门到精通》系列——图解0x11:ECU复位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!