从F1 90到62 F1 90:用Wireshark和CANoe‘解剖’一次完整的UDS 0x22数据读取会话
从F190到62F190用Wireshark和CANoe解剖UDS 0x22数据读取会话当你第一次在Wireshark中看到22服务请求和62响应报文时那些十六进制字节可能就像天书一样难以理解。但正是这些看似杂乱的数据流承载着现代汽车电子系统最核心的诊断信息交换。本文将带你走进UDS 0x22服务的实战分析世界通过Wireshark和CANoe这对黄金组合亲手解剖一次完整的诊断数据读取会话。1. 实验环境搭建与工具配置在开始捕获和分析UDS 0x22服务报文前我们需要准备一个合适的实验环境。这个环境可以是真实的车辆ECU测试台架也可以是CANoe搭建的虚拟仿真系统。对于大多数工程师来说仿真环境更加灵活可控特别适合协议学习和分析方法验证。硬件准备清单CAN/CAN FD接口卡如Vector XL Driver或PCAN-USB待测ECU或CANoe仿真节点终端电阻120Ω用于总线阻抗匹配软件工具关键配置Wireshark需要安装CAN协议解析插件并设置正确的接口参数# Linux下设置CAN接口 sudo ip link set can0 type can bitrate 500000 sudo ip link set up can0CANoe工程需要配置正确的诊断描述文件CDD或ODX这是解析UDS服务的关键; 示例CANoe配置片段 [Diagnostic] DescriptionFileECU_Diagnostic.cdd ProtocolUDS常见问题排查如果Wireshark无法看到任何CAN报文检查物理层连接和终端电阻CANoe诊断控制台无响应时确认诊断描述文件是否正确加载确保Wireshark和CANoe使用的时间同步便于交叉分析提示在实验室环境中使用CANoe的IG模块可以方便地模拟ECU节点无需真实硬件即可进行22服务测试。2. UDS 0x22服务报文捕获与分析现在让我们进入实战环节捕获并分析一个完整的0x22服务交互过程。假设我们要读取ECU的软件版本信息对应的DID是0xF190。典型会话流程诊断仪发送22 F1 90请求ECU回复62 F1 90 56 31 2E 30示例数据如果DID无效ECU可能回复7F 22 31在Wireshark中我们可以使用以下显示过滤器精准定位相关报文uds.service 0x22 || uds.service 0x62报文深度解析表字节位置请求报文示例响应报文示例含义解析00x220x62服务ID1-20xF1900xF190DID标识符3-0x56...响应数据否定响应分析 当收到7F响应时关键是要理解NRC否定响应码的含义0x31请求超出范围0x33安全访问被拒绝0x13长度不匹配# 简单的NRC解析函数示例 def parse_nrc(response): if response[0] 0x7F: nrc response[2] nrc_codes { 0x11: 服务不支持, 0x31: 参数无效, 0x33: 安全访问被拒 } return nrc_codes.get(nrc, 未知错误) return 肯定响应3. DID分类与逆向工程技巧理解DID数据标识符的分类体系是掌握0x22服务的关键。DID空间大致可以分为三个区域标准DID0x0000-0xEFFF由ISO/SAE统一分配例如0xF186当前诊断会话0xF18CECU序列号OEM自定义DID0xF000-0xFFFF各主机厂自行定义需要通过工程文档或逆向工程获取含义供应商私有DIDECU供应商内部使用通常需要特殊权限访问逆向工程实用技巧使用CANoe的自动化脚本批量扫描DID范围 CANoe CAPL脚本片段 for (word did 0xF000; did 0xFFFF; did) { diagRequest Request22.ReadDataByIdentifier(did); Request22.Send(); wait 50; // 适当延时防止总线过载 }分析响应数据模式固定长度数据可能是参数值ASCII字符串可能是版本信息变化数据可能是实时状态DID数据结构示例表DID长度数据类型典型内容0xF1906ASCII软件版本(如V1.0)0x010A2HEX冷却液温度(0x00-0xFF)0x02008复合数据多参数打包4. 高级分析与故障注入测试掌握了基础分析后我们可以进行更深入的协议测试和故障注入验证ECU的鲁棒性。异常测试用例设计无效DID测试发送不存在的DID如0xFFFF验证ECU是否返回正确的NRC安全访问测试// 示例安全访问序列 Send(0x27 01); // 请求种子 Receive(0x67 01 XX XX); // 获取种子 Send(0x27 02 YY YY); // 发送密钥 Receive(0x67 02); // 确认解锁 Send(0x22 F1 90); // 现在可以访问受保护DID报文长度异常测试发送过短的22请求仅22发送过长的22请求带额外字节性能测试指标典型响应时间50msClass 3诊断会话总线负载影响持续22服务不应超过30%总线利用率错误恢复能力异常报文后正常服务应能恢复Wireshark高级过滤技巧# 组合过滤条件示例 (uds.service 0x22 uds.did 0xF190) || (uds.service 0x62 frame.time_delta 0.1)注意在生产环境中进行故障注入测试前务必确认不会影响ECU的安全关键功能。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2465702.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!