《UDS协议从入门到精通》系列——图解0x2E:通过ID写数据


Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)

学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

一、简介

  该服务与0x22服务是成对的,推荐先阅读0x22-通过DID读数据。客户端根据提供的DID将信息写入目标ECU,常用场景如下:

  • 将配置信息(例如VIN码)编程到ECU中;
  • 清除非易失性存储器;
  • 重置已写入flash中的值;
  • 设置一些可配置字段的值。

  Tip📌:目标ECU可能限制或禁止对某些DID的写入访问(由系统供应商/车辆制造商定义为只读标识符等

二、数据包格式

2.1 服务请求格式

  该服务请求报文不能一次性请求写入多个DID,此外,本服务不支持sub-function
在这里插入图片描述

2.2 服务响应格式

2.2.1 肯定响应

在这里插入图片描述

2.2.2 否定响应

在这里插入图片描述

  可能出现的NRC及其含义如下:

NRC含义
0x13消息长度错误
0x22当前条件不满足
0x31请求参数不受支持,参数错误
0x33安全访问错误,比如访问的DID数据是安全数据,但当前等级未解锁
0x72通用编程错误,一般写入内存出错就报这个NRC

  NRC的处理流程如下所示(即推荐的错误情况检查顺序):
在这里插入图片描述

三、通信示例

  通过DID 0xF190向ECU写入车辆VIN码。

诊断仪 目标ECU 2E F1 90 57 30 4C 30 30 30 30 34 33 4D 42 35 34 31 33 32 36 (VIN:W0L0000433MB541326) 1 诊断仪发送请求: 第一个字节为SID, 第二三字节分别是DID的高低字节, 第二行的17个字节是: VIN码17个字符对应的ASCII码取值 6E F1 90 2 目标ECU给出正响应: 第一个字节为SID, 第二三字节分别是DID的高低字节 诊断仪 目标ECU

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于给定的诊断请求ID (0x740) 和响应ID (0x748),以下是一个简单的示例 CAPL 代码,用于实现 UDS 自动化测试用例: ```c // UDS自动化测试用例代码示例 variables { msTimer timer; // 定时器用于发送请求和等待响应 dword testerPresentReqID = 0x740; // 请求ID dword testerPresentRespID = 0x748; // 响应ID } on start { setTimer(timer, 1000); // 设置初始定时器间隔为1秒 } on timer timer { // 发送测试请求 writeTesterPresentReq(); // 等待响应 setTimer(timer, 100); // 设置等待时间为100毫秒 } on message testerPresentRespMsg // 接收到响应消息时触发的事件 { if (this.ID == testerPresentRespID) { // 响应消息的处理逻辑 // 在这里可以添加你的测试逻辑 // 例如,检查响应数据是否符合预期 clearTimer(timer); // 清除定时器,停止等待响应 } } // 发送测试请求函数 void writeTesterPresentReq() { message testerPresentReqMsg; testerPresentReqMsg.ID = testerPresentReqID; testerPresentReqMsg.length = 8; // 请求消息长度为8个字节 // 设置请求消息的数据字节 testerPresentReqMsg.byte(0) = 0x02; // 服务ID testerPresentReqMsg.byte(1) = 0x3E; // 子功能ID // 发送请求消息 output(testerPresentReqMsg); } ``` 上述代码中,我们使用了一个定时器 `timer` 来发送请求并等待响应。`testerPresentReqID` 和 `testerPresentRespID` 分别代表请求和响应的 ID。在 `on timer timer` 事件中,我们首先调用 `writeTesterPresentReq()` 函数发送测试请求,然后设置定时器等待响应。当接收到响应消息时,`on message testerPresentRespMsg` 事件将被触发,你可以在该事件中添加你的测试逻辑。 请注意,上述代码只是一个示例,你可能需要根据你的实际需求进行修改和补充。希望这可以帮助你开始编 UDS 自动化测试用例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载系统攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值