SID$0x10就是诊断会话控制服务DiagnosticSessionControl的意思。它包含3个子功能。ECU上电时,进入的是默认会话模式(Default),如果没有收到诊断会话请求,ECU需自动进入第一个默认会话模式(01h),在同一个时刻,只能有一个诊断会话模式被激活,所以这里的会话模式更像是一个容器,其他所有的服务都将在这个“容器”当中执行。诊断工具通过此服务使ECU进入不同的诊断会话模式。
在诊断会话控制服务中包含默认会话,编程会话和Extended扩展会话3个子功能。
为什么设计三个会话模式呢?因为权限问题。默认会话权限最小,可操作的服务少;扩展模式通常用于解锁高权限诊断服务,例如写入数据/参数、读写诊断码;编程模式用于解锁bootloader相关的诊断服务,即程序烧录。
子功能 | 会话模式 |
---|---|
01 | 默认会话模式 |
02 | 编程会话模式 |
03 | 扩展会话模式 |
子服务代码是01。顾名思义,就是ECU在刚启动时保持的状态,当ECU复位的时候也是会返回默认会话,不需要超时处理。
子服务代码是02。刷写程序时用的,超时或者刷写失败时会跳转回默认会话,即ECU从底层软件跳转到应用软件。
编程会话从字面上就很好理解,如果需要对ECU进行程序刷写操作,就需要进入编程会话才能执行相关操作。
子服务代码是03。通常诊断用的大部分功能以及特殊功能都在这个会话模式下进行。
扩展会话模式主要是用来写入一些信息如VIN和序列号等,以及控制ECU执行一些特殊请求如控制应用通信和故障信息的更新等
默认会话模式 可以直接切换到扩展会话模式,但是不能直接切 换到编程会话模式,如果想进入编程会话模式, 则必须先进入扩展会话模式。同样,编程会话模式不能直接进入扩展会话模式,只能进入默认会话模式。
ECU复位以及 S3 定时器超 时将导致 ECU 进入默认会话模式。
参数“DiagnosticSessionType”定义了要求启动哪种会话。01-03分别对应着三种会话模式。
定时器 P2server 的数值以 1ms 计算。
定时器 P2server 的数值以 10ms 计算
时间参数有两个,P2server_max和P2server_max,每个参数占用两个字节,所以一共占用四个字节。虽然每个参数都是两个字节,但是其单位(精度)是不一样的,P2参数的单位是10ms,也就是说P2的结果需要把后面两个字节的数值乘以10才是实际的时间。
P2server_max=50ms=0x0032
P2server_max=5000ms=50010ms=0x01F4*10ms