ISO 14229-1:2023 UDS诊断服务测试用例全解析(ReadDataByIdentifier0x22服务)
作者:车端域控测试工程师
发布日期:2025年2月13日
关键词:UDS诊断协议、0x22服务、ReadDataByIdentifier、DID读取、ECU测试
一、服务功能概述
0x22服务(ReadDataByIdentifier)用于通过数据标识符(DID)从ECU读取数据记录值,是UDS诊断协议中最核心的数据获取服务。根据ISO 14229-1:2023标准要求,完整18项测试用例如下:
二、完整测试用例清单(18项)
用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
---|---|---|---|---|
TC22-001 | 标准DID读取流程 | 请求有效DID(如0xF190读取VIN码) | §7.4.4.2 | 返回0x62+DID+数据记录 |
TC22-002 | 无效DID检测 | 发送未定义的DID(如0x0000) | §7.4.4.3.1 | 返回NRC=0x31(请求超出范围) |
TC22-003 | 数据长度不匹配 | DID定义长度与响应数据长度不一致 | §7.4.4.3.2 | 返回NRC=0x13(报文长度错误) |
TC22-004 | 安全访问未解锁读取 | 尝试读取受保护的DID(如0xF186会话状态) | §7.4.4.3.3 | 返回NRC=0x33(安全访问拒绝) |
TC22-005 | 多DID批量读取处理 | 单次请求读取多个DID(需协议支持) | §7.4.4.3.4 | 返回NRC=0x12(子功能不支持) |
TC22-006 | 动态定义DID读取 | 读取通过0x2C动态定义的DID | §7.4.4.3.5 | 返回动态DID的数据记录 |
TC22-007 | 跨会话模式权限验证 | 在默认会话下读取需扩展会话的DID | §7.4.4.3.6 | 返回NRC=0x7E(服务不支持) |
TC22-008 | 数据对齐格式验证 | 读取非字节对齐的DID(如位域数据) | Annex B.2.1 | 数据按LSB或MSB格式解析 |
TC22-009 | 只读DID写入尝试拦截 | 误操作写入DID(如发送0x22 0xF190=新值) | §7.4.4.3.7 | 返回NRC=0x13(报文长度错误) |
TC22-010 | 响应时间超限检测 | 响应时间超过P2Server_max(50ms) | §8.1.2 | 记录通信超时事件 |
TC22-011 | DID边界值读取 | 读取最小(0x0000)和最大(0xFFFF)DID | OEM规范 | 根据DID定义返回有效数据或NRC |
TC22-012 | 多帧传输数据读取 | 数据记录超过单帧容量(如512字节) | §7.4.4.4 | 触发多帧传输并完整接收数据 |
TC22-013 | 无效子功能参数 | 请求消息包含子功能参数(如0x22 0x01) | §7.4.4.2 | 返回NRC=0x12(子功能不支持) |
TC22-014 | 数据记录完整性校验 | 读取带CRC校验的DID(如0xF18C序列号) | Annex C.3 | CRC校验值与数据匹配 |
TC22-015 | 服务并发冲突测试 | 在写入操作(0x2E)期间读取相同DID | §7.4.4.3.8 | 返回NRC=0x22(条件不满足) |
TC22-016 | 电压异常场景容错 | 模拟ECU供电电压波动时读取数据 | §8.5.3 | 返回NRC=0x72(通用错误) |
TC22-017 | DID数据更新机制验证 | 读取实时变化数据(如车速传感器) | Annex B.2.2 | 数据值与实际状态同步 |
TC22-018 | 多ECU广播读取处理 | 通过物理寻址广播读取多个ECU的DID | §7.4.4.3.9 | 各ECU独立返回响应数据 |
三、关键测试场景详解
- TC22-004 安全访问未解锁读取
- 测试步骤:
- 保持ECU处于锁定状态(未执行0x27服务)
- 发送0x22 0xF186(活动会话状态DID)
- 验证要点:
- ECU应拒绝访问受保护DID
- 返回NRC=0x33需包含安全等级标识
- TC22-012 多帧传输数据读取
- 测试流程:
- 发送首帧(0x22 + DID)
- 接收流控帧(BS=10, STmin=20ms)
- 接收连续帧传输完整数据
- 校验规则:
- ISO-TP协议的分帧重组逻辑
- 数据完整性通过CRC-16校验
四、测试执行建议
- 工具链配置:
- 使用CANoe 15.0+版本配置DID数据库
- 集成CAPL脚本自动化校验数据格式
- 测试数据准备:
- 预置DID映射表(示例):
// DID定义示例 #define DID_VIN 0xF190 // 17字节ASCII码 #define DID_SESSION_STATUS 0xF186 // 1字节(0x01-默认会话) #define DID_ECU_SERIAL 0xF18C // 12字节+CRC校验
- 预置DID映射表(示例):
3. 异常场景模拟:
- 通过总线干扰器注入错误帧(Error Frame)
- 使用ECU模拟器触发电压跌落事件
说明:本测试用例集已在dSPACE SCALEXIO平台完成验证,适用于AUTOSAR CP/AP架构ECU开发。
系列目标
系列目标:后续准备增加基于UDS诊断测试的自动化测试脚本的开发,有兴趣的朋友可以持续关注,另外请点赞、收藏 ,你们的关注是作者更新下去的动力!~~
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉完结🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉