赞
踩
简称: “WriteDataByIdentifier”,按标识符写数据
功能: 用户通过请求该服务,写指定dataIdentifler(数据标识符DID)所记录的数据值到NVM(非易失性存储,上下电不会被清除的空间,如:EEPROM,ROM,一般常用DataFlash仿EE,性价比高)中。
客户端请求消息的dataIdentifler(数据标识符DID)大小为2字节,例如:VIN码(0xF190,通常该数值用于表示车辆唯一标识的数据标识符)。一般常用标识符如下(具体根据整车厂的诊断需求文档来定):
1,版本信息相关
软件版本号(数据内容包含如:软件版本,时间,修订次数等信息)
硬件版本号(PCB板上版本信息,一般是在软件中通过0x2E服务写入NVM中的。)
FBL版本号(即Flash Bootloader的版本,FBL是更新软件的一种方式。它是存储在芯片中指定一段位置,是一段程序,通过诊断来引导更新程序)
2,内部数据相关
车辆总里程,ECU供电电压,车辆VIN码(每辆车都有它唯一标识符,即VIN码)等。
3,诊断相关
当前诊断会话(和诊断相关的,通过读取该DID信息,ECU返回当前诊断处于哪个会话模式)
DTC快照数据(见0x19章节)
IO Control标识符(是0x2F服务,举例:通过该服务控制远光灯打开,也需要DID用来标识下该功能。服务详情见后续。)
Routine Control标识符(是0x31例行控制服务,例如在通过诊断FBL更新程序之前,需要检查下更新环境是否满足,如:车速是否低于3km/h,电源电压是否满足刷写要求等。)
第一个字节就是SID,后边的两个字节 用于标识将要读取的DID。下图红色框内即是请求写入DID为0xF190的数据。
绿色框是指请求的是20字节的多帧数据(大于8字节的数据统称多帧),0x14:17字节的数据0xAA + 3字节(2E F1 90)。
黑色框是指写入之后,又请求0x22读取DID的数据操作。
1)正响应
这个相对比较简单,参见上图红框下方。
Response ID: 6E
DataIdentifier:F1 90
2)否定响应
支持的否定响应如下,一般工作上根据整车厂给的诊断输入文档来选择要支持的NRC码。
博主平日项目中,常需要支持的是NRC 0x13,0x22,0x33,0x31。
0x13: 请求的报文信息长度不正确,比如DID F190的数据长度是17字节,而你却写入数据长度不匹配,则ECU回复NRC13,如下图
**0x22:**请求该服务时,前提条件不满足。(通常整车厂会告诉你NRC22的使能条件是什么。例如:车速 >3km/h,电源过欠压时候,你通过诊断请求写入服务,则回复该NRC…)。
0x31: 请求超出范围(0x2E服务中,并没有支持0xF123的DID写入功能。所以你请求时,ECU找不到该DID的写入服务)
整车厂根本没有指定DID F18B。
0x33: 安全访问被拒绝(一般,0x2E服务,需要在0x27服务安全解锁之后,才可以对ECU执行写入数据服务。)
看下图一中,在请求0x2E服务之前,没有请求0x27服务进行安全访问解锁。
下图是解锁之后,请求的0x2E服务。
0x2E服务相比之下,较简单。就是写入指定数据标识符DID所记录的数据值到NVM中。下一章0x27安全访问服务见!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。