《UDS协议从入门到精通》系列——图解0x11:ECU复位

2023-11-21 03:30

本文主要是介绍《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(即不抑制正响应),通信数据包如下所示:

诊断仪 目标ECU 11 01 1 诊断仪发送请求: 请求ECU进行硬复位操作 51 01 2 目标ECU给出响应: byte1是SID+0x40 = 51, byte2是sub-funtion:ResetType 目标ECU执行复位操作: (先回复的正响应,再进行复位操作) 诊断仪 目标ECU

>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

这篇关于《UDS协议从入门到精通》系列——图解0x11:ECU复位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399507

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1: