【ISO14229_UDS刷写】UDS 35 36 37服务 RequestUpload

本文详细描述了UDS(统一诊断服务)中35,36,和37服务的数据请求和应答格式,以及它们在报文流程中的应用,特别提到了与Dcm模块UploadSize配置相关的传输限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDS 35 36 37服务

35服务

35服务请求数据格式如下

例如35 00 44 10 08 80 00 00 00 00 08

请求地址为10 08 80 00 请求数据长度00 00 00 08 表示8byte

35服务应答数据格式如下

75 10 0C

10表示1byte长度数据

0C表示36传输时,单次传输最大byte数,跟Dcm模块UploadSize配置有关

36服务

请求

36 01 其中01表示Counter

35传输不需要transferRequestParameterRecord

应答

76 01 ….(0C位数据长度)

37服务

在36传输数据完成后 发送37服务结束数据传输

报文流程示例

<think>好的,我现在需要详细讲解UDS(统一诊断服务)中的0x31服务,也就是RoutineControl服务。首先,我得回忆一下UDS的基本知识,确保自己理解正确。UDS是用于汽车电子控制单元(ECU)的诊断通信协议,ISO 14229标准定义了各种服务,0x31是其中之一。 用户可能希望了解0x31服务的用途、工作原理、请求和响应格式,以及实际应用场景。首先,我需要明确0x31服务的主要功能:它用于启动、停止或查询ECU内部的特定例程(Routine)。这些例程可能包括内存检查、自检程序、复位操作等,具体由ECU制造商定义。 接下来,我应该分解0x31服务的子功能。根据标准,子功能分为三种:01(启动例程)、02(停止例程)、03(查询例程状态)。需要详细说明每个子功能的作用和用法。例如,启动例程可能需要传递参数,停止例程则可能不需要,但具体取决于例程的设计。 然后是请求和响应格式。请求报文通常包括服务ID(0x31)、子功能(1字节)、例程标识符(2字节),可能还有参数。响应报文则包含肯定的响应码(0x71)、子功能、例程标识符以及可能的输出数据。需要举例子说明,比如启动某个例程的请求结构,以及成功和可能的错误响应。 还要考虑可能的否定响应码,例如子功能不支持(0x12)、参数错误(0x31)、条件不满足(0x22)等,解释常见错误情况。此外,例程标识符是16位的,需要说明其由制造商定义,不同ECU可能不同。 实际应用场景方面,比如在刷写过程中,可能用0x31服务执行擦除内存的例程,或者在自检时启动诊断测试。需要强调安全访问的重要性,通常在执行这类操作前需要解锁安全等级,但0x31服务本身是否需要安全访问取决于具体实现。 需要注意的细节包括例程执行可能是异步的,因此查询状态的功能很重要。可能还要提到时间参数,比如某些例程需要指定执行时间,或者返回剩余时间等。 需要验证自己的理解是否正确,比如子功能是否确实是01、02、03,有没有遗漏。同时,确认请求和响应格式的字节顺序,例程标识符是2字节,大端还是小端?通常可能是大端(高位在前),但可能因厂商而异,可能需要说明这一点。 另外,参数部分如果存在,需要按制造商规定传递,可能包括长度和具体参数值。例如,擦除内存可能需要起始地址和长度作为参数。因此,在请求报文中,子功能和例程标识符之后可能会有参数列表。 最后,总结0x31服务UDS中的重要性,特别是在ECU编程、维护和诊断中的应用,强调其灵活性和由制造商自定义的特点,提醒用户在实际操作中参考具体的ECU文档。</think>好的,下面详细讲解UDS(统一诊断服务)中的**0x31服务(RoutineControl)**,该服务用于控制ECU内部预定义的特定例程(如内存擦除、自检程序等),是ECU刷写和诊断中的关键服务。 --- ### **一、0x31服务功能概述** - **作用**:启动、停止或查询ECU内部预定义的例程(Routine)。 - **典型应用场景**: - 刷写流程中擦除Flash内存。 - 执行ECU自检程序。 - 复位特定模块或计数器。 - 触发数据采集或校准。 --- ### **二、子功能(Sub-function)** | 子功能值 | 名称 | 描述 | |----------|--------------------|----------------------------------------------------------------------| | 0x01 | Start Routine | 启动例程(可能需要输入参数) | | 0x02 | Stop Routine | 停止正在运行的例程 | | 0x03 | Request Results | 查询例程执行结果或状态 | --- ### **三、请求报文格式** ```plaintext [0x31][Sub-function][RoutineIdentifier(2字节)][参数(可选)] ``` - **RoutineIdentifier**:2字节的例程ID(由ECU制造商定义,如0x0205表示擦除内存)。 - **参数**:可选字段,某些例程需要输入参数(如擦除地址范围)。 #### **示例**:启动擦除Flash的例程(假设例程ID=0x0205) ```plaintext 31 01 02 05 FF 00 // Sub-function=0x01,RoutineIdentifier=0x0205,参数=FF00 ``` --- ### **四、响应报文格式** #### **1. 肯定响应(Positive Response)** ```plaintext [0x71][Sub-function][RoutineIdentifier(2字节)][输出数据(可选)] ``` - **输出数据**:例程执行结果(如校验和、状态码等)。 #### **示例**:成功启动例程 ```plaintext 71 01 02 05 // Sub-function=0x01,RoutineIdentifier=0x0205 ``` #### **2. 否定响应(Negative Response)** 常见错误码: - **0x12**:子功能不支持(如ECU未实现0x03子功能)。 - **0x22**:条件不满足(如安全访问未解锁)。 - **0x31**:参数超出范围(如无效的擦除地址)。 --- ### **五、关键注意事项** 1. **安全访问**: - 执行敏感操作(如内存擦除)前,需通过0x27服务解锁安全等级。 2. **异步执行**: - 某些例程需要较长时间(如擦除Flash),需通过0x03子功能轮询状态。 3. **例程ID标准化**: - 例程ID由ECU制造商定义,需查阅具体文档(如0xF189可能表示自检例程)。 4. **参数格式**: - 参数可能包含地址、长度、校验和等,需严格遵循ECU规范。 --- ### **六、实际应用案例** **场景**:ECU程序刷写流程中的内存擦除 1. **步骤1**:通过0x27服务解锁安全等级。 2. **步骤2**:发送0x31服务启动擦除例程: ```plaintext 请求:31 01 02 05 00 8000 // 擦除地址0x0000~0x8000 响应:71 01 02 05 // 成功接收请求 ``` 3. **步骤3**:轮询例程状态(子功能0x03)直至完成: ```plaintext 请求:31 03 02 05 响应:71 03 02 05 00 // 0x00表示擦除成功 ``` --- ### **七、总结** 0x31服务UDS协议中**控制ECU底层操作的核心服务**,其灵活性与ECU具体实现强相关。实际使用时需严格遵循以下原则: - 查阅目标ECU的《诊断需求规范》获取例程ID和参数定义。 - 在关键操作前确保安全访问已解锁。 - 处理异步操作时需设计合理的状态轮询机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值