8.15 例程控制 RoutineControl (31h)
此服务用于启动程序 、停止程序和请求程 序执行结果。例程由 两字节的例程标识符 (RoutineIdentifier)来确定。
8.15.1 报文格式
表 71 例程控制服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | RequestServiceIdentifier | M | 31 |
#2 | Sub-Function=[ RoutineControlType] | M | 00-7F |
#3 #4 | RoutineIdentifier[]=[ byte#1(MSB) byte#2] | M M | 00-FF 00-FF |
#5 … #n | RoutineControlOptionRecord[]=[ routineControlOption#1 … routineControlOption#m] | C/U … C/U | 00-FF … 00-FF |
C:此参数是子功能参数startRoutine和stopRoutine的用户选择项。 |
表 72 例程控制服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
#1 | PositiveResponseServiceID | M | 71 |
#2 | RoutineControlType | M | 00-7F |
#3 #4 | RoutineIdentifier[]=[byte#1(MSB) byte#2] | M M | 00-FF 00-FF |
#5 … #n | RoutineStatusRecord[]=[routineStatus#1 … routineStatus#m] | U … U | 00-FF … 00-FF |
8.15.2 支持的否定响应码
表 73 例程控制服务的否定响应码
Hex | Cvt | ErrorText |
12 | M | 子功能不支持 如果子功能参数不支持,发送此否定响应码。 |
13 | M | 报文长度错误 如果报文长度错误,发送此否定响应码。 |
22 | M | 条件不满足 如果请求例程控制的条件不满足,发送此否定响应码。 |
24 | C | 请求序列错误 如果被请求例程标识在接收“启动例程”子功能之前接收到“停止例程”或“请求例 程结果”子功能,发送此否定响应码。 |
31 | M | 请求超出范围 如下情况时,发送此否定响应码: 1.ECU不支持被请求的例程标识; 2.对于被请求例程标识符,用户选择的例程控制选项记录包含无效数据。 |
33 | M | 安全访问拒绝 如果诊断工具发送一个带有安全例程标识符的请求且ECU的安全特性为激 活,发送此否定响应码。 |
72 | M | 一般编程错误 当ECU执行一个访问ECU内存储器的例程时监测到错误, 发送此否定响应码。例 如, 当例程对位于永久性存储器(如Flash内存) 上的某些存储单元进行擦除或编 程,以及访问存储单元时出错。 |
8.15.3 参数定义
表 74 例程控制参数的定义
Hex | Description | Cvt |
01 | startRoutine | U |
02 | stopRoutine | U |
03 | requestRoutineResults | U |
8.15.4 执行规定
如果当前存在任何对于操作者、驾驶员及乘客安全的隐患,系统必须保证在例程执行前满足必须的 前提条件。不同的例程执行条件由ECU/系统供应商定义。
8.16 请求下载 RequestDownload (34h)
此服务初始化ECU的数据传输(下载)功能。
接收到此服务的请求报文时, ECU应在发送肯定响应报文前, 需采取所有必要动作用于数据接收。
8.16.1 报文格式
表 75 请求下载服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | RequestServiceIdentifier | M | 34 |
#2 | DataFormatIdentifier | M | 00-FF |
#3 | addressAndLengthFormatIdentifier | M | 44 |
#4 #5 #6 #7 | MemoryAddress[]=[ byte#1(MSB) byte#2 byte#3 byte#4(LSB)] | M | 00-FF |
#8 #9 #10 #11 | MemorySize[]=[ byte#1(MSB) byte#2 byte#3 byte#4(LSB)] | M | 00-FF |
表 76 请求下载服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
PositiveResponseServiceIdentifier | M | 74 | |
#2 | LengthFormatIdentifier | M | 00-F0 |
#3 … #n | MaxNumberOfBlockLength[ byte#1(MSB) … byte#m] | M | 00-FF |
8.16.2 支持的否定响应
表 77 请求下载服务的否定响应码
Hex | Cvt | ErrorText |
13 | M | 报文长度错误 如果报文长度错误,发送此否定响应码。 |
22 | U | 条件不满足 如果ECU在接收软件或标定模块的下载过程中收到请求,发送此否定响应 码。这可能发生在模块下载时ECU和诊断工具的数据大小不匹配。 |
31 | M | 请求超出范围 如下情况时,发送此否定响应码: 1.指定数据格式标识(dataFormatIdentifier)无效; 2.指定地址和长度格式标识(addressAndLengthFormatIdentifier)无效; 3.指定内存地址/内存大小(memoryAddress/memorySize)无效。 |
33 | M | 安全访问拒绝 如果接收此服务的请求时ECU处于保护状态(ECU支持安全访问服务),发 送此否定响应码。 |
70 | M | 上传/下载操作拒绝 ECU由于某种故障而拒绝诊断工具的下载操作时,发送此否定响应码。 |
8.16.3 参数定义
a) 参数“内存地址”的长度应为4字节。
b) 此地址可以表示ECU内的物理地址, 也可以是映射地址(例如,用高位实现存储器地址选择)。
然而, 如果不是物理地址,映射关系应在ECU诊断文档中明确说明。
c) 数据格式标识(DataFormatIdentifier) 包含两个半元组, 左半元组表示压缩方法, 右元组表示加 密算法。如果没有应用压缩或加密,相应位置为0。数据格式标识(DataFormatIdentifier) 应至少支持00。
图 10DataFormatIdentifier 数据结构
d)地址/长度格式标识符(addressAndLengthFormatIdentifier)为一个字节, 分为两部分:
1) bit7~4 :MemorySize参数的长度(字节数);
2) bit3~0 :MemoryAddress参数的长度(字节数)
e) MemoryAddress参数是数据写入ECU内存的起始地址。
f) MemorySize参数应被ECU用于比较未压缩内存大小和TransferData服务中传输数据的大小。
memorySize参数所占的字节数由addressFormatIdentifier的高半元组(bit7~4)定义。
g) MaxNumberOfBlockLength参数用于肯定响应中ECU指示诊断工具每个数据传输(TransferData) 请求服务中所包含数据的长度(字节数)。
8.16.4 执行规定
此服务没有特殊的执行规定。