前言
ISO-14229中按各服务的功能将uds协议划分为六大类:
- Diagnostic and Communication Management (诊断和通信管理)
- Data Transmission (数据传输)
- Stored Data Transmission (存储数据传输,用于操作DTC)
- InputOutput Control (IO控制)
- Routine Control (远程控制)
- Upload Download (上传下载)
其中,10(DiagnosticSessionControl)服务属于第一类,主要作用就是客户端向服务器请求控制诊断会话。
简介
10服务用于控制ECU在不同的诊断会话(session)间进行切换。诊断会话(session)可以看作是软件所处的一种状态,在不同会话下可以支持不同的诊断服务或功能。
正常情况下,ECU始终只有一个诊断会话处于活动状态,在ECU上电启动时,应自动进入默认诊断会话,如果运行期间没有启用其他诊断会话的话,就会一直处于默认会话。
服务格式
请求格式

DiagnosticSessionControl这个服务的SID是0x10,request固定为2个byte,第一个byte是SID,第二个byte的低7bit是sub-function,用于指示ECU将进入的session。
其中sub-function 值含义如下:
| sub-function | 含义 |
|---|---|
| 0x00 | ISOSAEReserved(保留) |
| 0x01 | defaultSession |
| 0x02 | ProgrammingSession |
| 0x03 | extendedDiagnosticSession |
| 0x04 | safetySystemDiagnosticSession |
| 0x05 – 0x3F | ISOSAEReserved(保留) |
| 0x40 – 0x5F | vehicleManufacturerSpecific(由整车厂自定义使用) |
ECU上电之后,默认处在defaultSession中,在这个session中很多诊断服务不可以执行,很多诊断相关的数据不能读取或写入。ProgrammingSession 编程会话通常只有bootloader去使用。
一般的诊断仪启动之后,会给ECU发送10 03,即让ECU进入 extendedDiagnosticSession(扩展会话)中,在这个session中有很多可执行的诊断服务。而如果要让ECU保持在non-defaultSession中,则需要诊断仪每隔固定的时间发送0x3E服务,ECU才会知道诊断仪有和自己通信的需求,从而保持在non-defaultSession中。
响应格式
肯定响应

第一个BYTE:对请求的echo,为SID+0x40
第二个BYTE:对请求的echo,为sub-function
后面几个BYTE为诊断会话参数,长度一般是四个字节,其具体含义如下:

前两个字节代表P2Server_max,即ECU在应用层上对诊断命令的默认响应时间,后两个字节代表P2*Server_max,即ECU在暂时无法处理当前诊断命令(具体表现为发送了NRC 0X78),在应用层上对诊断命令响应的最长时间。
否定响应
| 0x7F | 0x50 | NRC |
|---|
第一个BYTE:固定为0x7F
第二个BYTE:对请求的echo,为SID+0x40
第二个BYTE:NRC。















