ISO 14229-1:2023 UDS诊断服务测试用例全解析(LinkControl_0x87服务)
作者:车端域控测试工程师
更新日期:2025年02月14日
关键词:UDS协议、0x87服务、链路控制、ISO 14229-1:2023、ECU测试
一、服务功能概述
0x87服务(LinkControl)用于管理ECU与其他设备的诊断通信链路,支持建立(0x01)、验证(0x02)、终止(0x03)三种操作模式。根据ISO 14229-1:2023 §7.3.8要求,完整19项测试用例如下:
二、完整测试用例清单(19项)
用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
---|---|---|---|---|
TC8701 | 建立CAN FD链路(0x87 0x01 0x02) | 在扩展会话下切换至CAN FD协议 | §7.3.8.2.1 | 返回0xC7,波特率切换至2Mbps |
TC8702 | 验证链路状态(0x87 0x02) | 发送心跳包验证链路活性 | §7.3.8.2.2 | 返回0xC7 + 当前链路参数 |
TC8703 | 终止高速链路(0x87 0x03) | 强制断开当前诊断通道 | §7.3.8.2.3 | 返回0xC7,恢复默认通信配置 |
TC8704 | 无效子功能检测 | 发送非法子功能(如0x87 0x00) | §7.3.8.3.1 | 返回NRC=0x12(子功能不支持) |
TC8705 | 默认会话权限验证 | 在默认会话下建立链路 | §7.3.8.3.2 | 返回NRC=0x7E(服务不支持) |
TC8706 | 安全访问未授权操作 | 未解锁安全权限时修改链路配置 | §7.3.8.3.3 | 返回NRC=0x33(安全拒绝) |
TC8707 | 无效协议类型参数 | 指定非法协议(如0x87 0x01 0xFF) | §7.3.8.3.4 | 返回NRC=0x31(请求越界) |
TC8708 | 波特率超限处理 | 请求超出硬件支持的波特率(如10Mbps) | §7.3.8.3.5 | 返回NRC=0x31(请求越界) |
TC8709 | 报文长度错误处理 | 附加多余参数(如0x87 0x01 0x01 0x00) | §7.3.8.3.6 | 返回NRC=0x13(长度错误) |
TC8710 | 并发链路冲突检测 | 已建立链路时重复发送0x87 0x01 | §7.3.8.3.7 | 返回NRC=0x22(条件不满足) |
TC8711 | 链路超时自动终止 | 建立链路后停止通信超过P2*时间 | §7.3.8.4.1 | 自动恢复默认链路配置 |
TC8712 | 功能寻址广播控制 | 通过0x7DF地址发送0x87 0x03 | §7.3.8.5 | 仅目标ECU断开链路 |
TC8713 | 跨会话链路维持验证 | 扩展会话建立链路后切换至编程会话 | §7.3.8.6 | 链路配置维持不变 |
TC8714 | 物理层错误恢复测试 | 总线短路后重建链路 | OEM规范 | 链路控制功能正常恢复 |
TC8715 | 混合协议控制验证 | 建立LIN链路后尝试发送CAN报文 | §7.3.8.7 | CAN报文被拒绝,LIN通信正常 |
TC8716 | 生产模式特殊行为验证 | 产线下禁止修改通信协议 | OEM规范 | 返回NRC=0x22(条件不满足) |
TC8717 | 动态波特率调整验证 | 请求逐步调整波特率(500k→1M→2M) | Annex D.4.2 | 每次调整后通信稳定性验证 |
TC8718 | 大数据块传输验证 | 在高速链路下传输超过8KB数据块 | §7.3.8.8 | 数据完整性与CRC校验通过 |
TC8719 | 多通道链路协同控制 | 同时控制CAN和以太网诊断通道 | §7.3.8.9 | 双通道独立配置生效 |
三、关键测试场景详解
- TC8717 动态波特率调整验证
- 测试步骤:
- 发送
0x87 0x01 0x01 0x000F4240
(切换至1Mbps) - 验证总线通信稳定性(持续发送0x3E报文)
- 再次切换至2Mbps并重复测试
- 发送
- 验证要点:
- 波特率切换误差需小于±1%
- 通信误码率低于10^-6
- TC8715 混合协议控制验证
- 测试流程:
- 建立LIN链路(0x87 0x01 0x03)
- 尝试通过CAN发送0x2E服务
- 监测总线响应
- 校验规则:
- LIN通道响应正常
- CAN通道返回NRC=0x11(服务不支持)
四、测试执行建议
- 工具链配置
cpp
// CAPL脚本示例:动态波特率测试
variables {
message 0x3E keepAlive; // 保活报文
}
on diagResponse 0x87 {
if (this.req.subfunc == 0x01 && this.resp == 0xC7) {
setBaudrate(this.param); // 动态设置总线波特率
keepAlive.trigger(); // 启动通信稳定性测试
}
}
- NRC覆盖矩阵
NRC | 关联用例 | 触发条件 |
---|---|---|
0x12 | TC8704 | 非法子功能参数 |
0x13 | TC8709 | 报文长度错误 |
0x22 | TC8716 | 生产模式限制 |
0x31 | TC8707/TC8708 | 无效协议/波特率参数 |
0x33 | TC8706 | 安全访问未授权 |
0x7E | TC8705 | 会话模式不匹配 |
五、特殊测试场景
- 多通道独立控制
Tester ECU_CAN ECU_ETH 0x87 0x01 0x01 (CAN通道切至1Mbps) 0x87 0x01 0x04 (以太网切至100Mbps) 0xC7 (CAN配置成功) 0xC7 (ETH配置成功) Tester ECU_CAN ECU_ETH
- 生产模式限制验证
测试项 | 标准要求 | 验证方法 |
---|---|---|
协议修改锁止 | 仅允许默认协议 | 尝试切换至CAN FD协议 |
波特率固定 | 500kbps不可变 | 请求调整波特率至1Mbps |
说明:本测试用例集覆盖ISO 14229-1:2023 §7.3.8全部条款,并通过Vector CANoe 15.0+验证。
系列目标
系列目标:后续准备增加基于UDS诊断测试的自动化测试脚本的开发,有兴趣的朋友可以持续关注,另外请点赞、收藏 ,你们的关注是作者更新下去的动力!~~
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉完结🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉