一、服务功能概述
UDS(Unified Diagnostic Services)协议中的10服务(DiagnosticSessionControl) 是诊断通信的核心服务之一,用于控制ECU(电子控制单元)在不同诊断会话(Session)之间切换,从而实现对不同权限诊断功能的访问控制。每个会话模式下,ECU可执行的诊断服务权限不同,例如:
默认会话(Default Session):ECU上电后自动进入,仅支持基础诊断功能(如读取DTC)。
扩展会话(Extended Session):允许执行写入数据(0x2E)、通信控制(0x28)等高级操作。
编程会话(Programming Session):用于ECU内存编程(如固件刷写),需满足特定安全条件(如车速<3km/h)。
二、会话类型与权限控制
会话类型(Sub-Function) | 子服务值 | 功能权限 |
---|---|---|
默认会话 | 0x01 | 基础诊断(如0x19读故障码) |
编程会话 | 0x02 | 内存编程(如0x31例程控制) |
扩展会话 | 0x03 | 高级操作(如0x2E写入数据) |
安全系统会话 | 0x04 | 安全相关诊断(如安全校验) |
厂商自定义会话 | 0x40-0x5F | OEM私有功能(如产线测试) |
权限控制规则:
- 非默认会话的权限是默认会话的超集。
- 编程会话需通过扩展会话间接进入(默认会话→扩展会话→编程会话)。
三、请求与响应报文解析
1. 请求报文格式
- 标准请求:
10 [Sub-Function]
- 示例:进入编程会话的请求为
10 02
。
- 示例:进入编程会话的请求为
- 抑制正响应标志:Sub-Function最高位(Bit7)置1时,ECU不返回肯定响应。
2. 肯定响应格式
- 报文结构:
50 [Sub-Function] [SessionParameterRecord]
- SessionParameterRecord:包含时间参数(如P2Server_max和P2*Server_max),例如:
50 02 00 32 01 F4
表示编程会话下,P2Server_max=50ms,P2*Server_max=500ms。
- SessionParameterRecord:包含时间参数(如P2Server_max和P2*Server_max),例如:
3. 否定响应(NRC)
- 常见错误码:
- NRC 22(条件不满足):车速超限或引擎未熄火时切换编程会话。
- NRC 78(请求处理中):ECU正执行其他服务,无法立即响应。
- 示例:
7F 10 22
表示进入编程会话失败。
四、典型应用场景与实例
1. ECU固件刷写流程
- 请求进入扩展会话:
- 请求:
10 03
- 响应:
50 03 00 64 03 E8
(P2Server=100ms,P2*Server=1000ms)。
- 请求:
- 安全解锁(27服务):
- 请求:
27 01
→ 响应:67 01 [Seed]
- 发送密钥:
27 02 [Key]
→ 响应:67 02
。
- 请求:
- 切换至编程会话:
- 请求:
10 02
→ 响应:50 02 00 32 01 F4
。
- 请求:
五、关键时间参数
- P2Server_max:ECU收到请求后到发出响应的最大时间(单位:ms)。
- P2*Server_max:发送NRC 0x78后到下次响应的等待时间(单位:10ms)。
六、实际开发注意事项
- 会话超时机制:非默认会话需通过3E服务(TesterPresent)周期性维持。
- 安全条件检查:切换编程会话前需验证车速、点火状态等。
- 错误处理:需预埋NRC 22和NRC 24等错误码,用于提示诊断条件不满足。
总结
UDS 10服务通过会话控制实现了诊断功能的分级管理,是汽车诊断通信的基石。开发者需结合具体需求设计会话切换逻辑,并严格遵循ISO 14229-1标准中的时序和权限规则。