十、UDS诊断命令备忘录
1. $10服务诊断会话控制
通俗一点讲就是授权控制。汽车ECU里面可以对某些操作设定有特定权限,你如果需要操作这些功能,诊断仪需要请求到对应权限才能允许操作。诊断会话控制服务在ECU中用于切换至不同的诊断会话,对应的SID为0x10。
通常包含3个子功能: 01 Default(默认会话),02 Programming(编程会话),03 Extended(扩展会话),ECU上电时,进 入的是01默认会话。 默认会话权限最小,可操作的服务少;扩展模式通常用于解锁高权限诊断服务,例如写入数据/参数、 读写诊断码;编程模式用于解锁bootloader相关的诊断服务,即程序烧录。
这三个子功能可以相互跳转,当然也可根据实际需求设定这些功能的跳转关系。如果进入了一个非 默认会话的状态,一个定时器会运转,如果一段时间内没有请求,那么到时间后,诊断退回到默认会 话01(最低权限)。当然,我们有一个$3E的服务,可以使诊断保持在非默认的状态。
这三个会话模式好比普通项目成员(默认会话)、项目组长(扩展会话)和会计(编程会话)的关系,小职员权限最小,小职员有的权限项目组长全有,项目组长还多了些其他的高端权限(如写数据、例程控制)。会计则不同,它有些自己独有的权限(刷写程序),但项目组的很多权限它没有(读/擦故障码),因为它只干会计相关的事,本身不参与项目。
这里来一张权限表格。带颜色的区域代表需要解锁操作。
例:会话控制指令实例
对象 | 指令 | 指令解析 |
Tester | 02 10 01 00 00 00 00 00 | 0x02中的0代表这是一个网络层单帧SF,2表示数据长度为2byte,0x10是当前服务的代号,0x01是子功能,进入默认会话。 |
ECU | 06 50 01 00 32 00 C8 AA | 肯定响应,0x06中的0代表这是一个网络层单帧SF,6表示数据长度为6byte,0x40=0x10+0x40,表示对SID的肯定回复,01是子功能。 |
Tester | 02 10 02 00 00 00 00 00 | 同第一行,申请进入02子状态 |
ECU | 03 7F 10 7E AA AA AA AA | 否定响应,0x03同上,0x7F表示否定响应,0x10是回复的SID,0x7E是对应的NRC码。 |