【研发日记】白话解读UDS协议(一)——19 04读取快照服务

本文介绍了UDS协议中的19 04服务,用于读取故障码快照。详细阐述了19服务的含义,04子服务的功能,以及快照存储和发送的设计。通过示例代码展示了如何实现快照的存储和发送,并讨论了UDS在嵌入式软件中的应用和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

前言

19服务

04子服务

19 04协议

快照存储设计

快照发送设计

功能验证

分析和应用

总结


前言

        近期在一个嵌入式软件开发项目中,要按照UDS标准开发相关功能,期间在翻阅UDS标准时,周围同事都说很多地方晦涩难懂。所以利用晚上和周末时间,把这些内容标注了一下,用大白话把他们解释出来。后面会用若干篇文章把它总结分享出来,一方面备着将来翻看,另一方面也希望能够帮到这一领域的粉丝朋友们。

19服务

        在UDS中,诊断仪被认为是客户端,ECU被认为是服务端,所以ECU中的一项UDS功能就被叫做一项服务,19服务是UDS中读取DTC故障相关信息的一类子服务的总称。官方文档中的描述示例如下:

        19服务中包含了很多子服务,最常用的其实就只有两个,19 02子服务是读取故障码的,19 04子服务是读取故障码的快照的。本文主要解析19 04这个子服务。

04子服务

        快照(Snapshot),从字面上理解意思就是,快门触发的瞬间,记录下来这一时刻的各种信息。放在UDS中来讲就是,发生某一故障(DTC)时,记录并存储这一时刻的ECU信息,比如铅酸供电电压、工作温度、车辆档位、车速、里程、日历时间等等。19 04服务的作用就是支持诊断仪把这一快照信息,按照协议从ECU中读取出来。官方文档中的描述示例如下:

        对于我们开发19 04服务而言,就是在ECU中开发这一功能,实现存快照和发送快照的功能。

19 04协议

### UDS 1904服务介绍 UDS (诊断服务)1904服务主要用于控制和管理车辆电子控制系统中的特定功能。此服务允许诊断设备向ECU发送指令来启动、停止或查询某个例行程序的状态[^1]。 对于`sub-function`字段,在诊断请求中固定为1个字节,用于指示诊断仪希望ECU执行的具体子功能操作;而在响应消息里,则用来确认所收到的命令是否被正确理解并处理[^3]。 当涉及到具体的例行程序类型(`RoutineType`)时,比如值为`0x01`的情况,这表明要调用的是与诊断请求中指定类型的例行程序相匹配的操作,并且状态记录部分可以根据实际需求灵活定制返回给客户端的内容。 ### 配置方法 为了实现对UDS 1904的支持,通常需要通过AUTOSAR RTE(运行时环境)来进行配置。在相应的项目设置中可以找到代表不同诊断通信管理(DCM)组件的服务列表。例如,在某次更新后的工程文件夹结构下可以看到新增加了个名为`DataServices_DspData_IO_CTRL_F199`的服务端口项,它可能是专门为此类诊断交互而设计的数据接口之[^4]。 ### 常见问题解答 如果在个扩展会话模式结束后未能及时维持有效的连接状态,系统可能会自动切换回默认会话级别(通常是01)。这种情况下,某些高级别的诊断服务如编号为`0x85`的功能可能不再可用,进而影响到依赖于此服务的相关特性表现,甚至可能导致故障码(DTC)信息无法正常刷新或清除[^5]。 ```python def uds_1904_service_example(): """ 这是个简单的Python函数示例, 展示如何模拟发起UDS 1904服务请求。 实际应用中应遵循具体协议规范。 """ request = [ 0x10, # Service ID for Diagnostic Session Control 0xF1, # Sub-function code indicating ExtendedDiagnosticSession 0x01 # Routine Type or other parameters as needed ] response = send_diagnostic_request(request) if is_positive_response(response): print("成功进入了扩展会话模式") else: print("进入扩展会话失败") ```
评论 93
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Cssust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值