UDS服务-22、2E、23、2A服务
前情提要-基础术语
需要提前知道的术语(如SID、DID、寻址方式等)
链接如下:
https://blog.csdn.net/shnsxz/article/details/88818736?ops_request_misc=&request_id=&biz_id=102&utm_term=UDS%E4%B8%ADDID%E7%9A%84%E4%BD%9C%E7%94%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-88818736.142v51control,201v3control_2&spm=1018.2226.3001.4187
必须了解的术语-DID(Data Identifier)
是2个字节无符号整数的ID,用来标识ECU中贮存的某个诊断数据单元。它的好处是当要读取某个单元的诊断数据时,只要读对应的DID就可以,不必知道数据的具体地址。即使当ECU中的数据地址发生变化时,只要DID和某个地址单元的映射地址改变即可,对于使用者来说DID屏蔽了具体实现细节,而将重点放在了数据本身。
0x22
“ReadDataByIdentifier”,按标识符读取数据,通过此诊断服务一次读取的DID最多为1个
功能: 用户通过请求该服务,读取指定dataIdentifler(数据标识符DID)所记录的数据值。
03 22 DID
DID一般是两个byte,可以在规范附录B中查看
正响应码一般为 10 09 62 DID DATA
10 09 中1代表第一帧,009为这个多帧中的数据长度,62=22+40,后面跟对应的DID及数据
一些备注
*30 02 14
3代表该帧为流控帧,0代表继续发送(1等待;2溢出),02blocksize 代表一次允许连续发送CF(连续帧)的数量,14代表STmin即等待时间,在此帧中代表需要等待20ms
*2 1
2代表为连续帧,1代表序列号(从0x1 ~ 0xF→0x0 ~ 0xF),从0x1开始是因为把流控帧当成了第一帧即0x0
支持的否定响应码
13 IMLOIF 报文长度/格式错误
22 CNC 请求诊断会话控制的条件不满足
31 ROOR 请求超出范围
33 安全访问拒绝,请求的DID是受保护的,且没有处于解锁状态
0x2E
“WriteDataByIdentifier”,按标识符写数据
功能: 用户通过请求该服务,写指定dataIdentifler(数据标识符DID)所记录的数据值到NVM(非易失性存储,上下电不会被清除的空间,如:EEPROM,ROM,一般常用DataFlash仿EE,性价比高)中。
10 14 2E F1 90 DATA
30 00 00【blocksize为0代表后面都不需要再发送流控制帧】
21 DATA
22 DATA
03 6E F1 90 [正响应]
支持的否定响应码
13 IMLOIF 报文长度/格式错误
22 CNC 请求诊断会话控制的条件不满足
31 ROOR 请求超出范围
33 安全访问拒绝,请求的DID是受保护的,且没有处于解锁状态
72 一般编程错误
7F 当前会话模式服务不支持
0x23
**ReadMemoryByAddress **
功能: 读取ECU内部RAM或ROM的数据
23 24 4byte的address 2byte的size
63 请求得到的数据【肯定响应】
支持的否定响应码
13 IMLOIF 报文长度/格式错误
22 CNC 请求诊断会话控制的条件不满足
31 ROOR 请求超出范围
33 安全访问拒绝,请求的DID是受保护的,且没有处于解锁状态
0x2A
周期传输的诊断响应服务
2A 01 周期数据标识符(PerodicDataIndetifier) 低速率发送
2A 02 周期数据标识符(PerodicDataIndetifier) 中速率发送
2A 03 周期数据标识符(PerodicDataIndetifier) 高速率发送
2A 04 周期数据标识符(PerodicDataIndetifier) 终止发送
发送的报文格式
2A 02 E3 24
6A
E3 DATA
24 DATA
为了避免多帧传输,每个周期数据标志符代表参数的最大数据长度为7字节,保证肯定响应的报文不会超过一个CAN帧所能容纳的长度。
支持的否定响应码
13 IMLOIF 报文长度/格式错误
22 CNC 请求诊断会话控制的条件不满足
31 ROOR 请求超出范围
7F 当前会话模式服务不支持