车载诊断技术 发表于 2022-8-7 16:37:24

漫谈UDS协议之Service 23

今天是2022年8月初,说要来的台风没有来,温度倒是降低了不少,没有先前那个酷热难耐。昨天加了一天班,今天才能得空静下心坐在电脑前,敲击些文字,梳理下思绪!
老规矩,分享一段自己喜欢的文字,避免成为高知识低文化的工科男:

别把自己过得像个落难者,忙着告诉所有人你有多不幸,成长本是孤立无援得过程,自己够努力,全世界都会对你和颜悦色。杜绝无用的矫情,不沉醉于自我感动式的付出。不去追逐他人的接纳,也不去拒绝他人的排斥。

Return to today‘s topic!

公众号以前写过UDS协议中一些常用到的诊断服务:
详细见公众号:车载诊断技术
接下来将以往一些不常用的诊断服务做一系列汇总,本文主要分享Service 23主要应用场景和作用。
Service 23(ReadMemoryByAddress)服务允许客户端(Tester)通过提供的起始地址和要读取的内存大小,向Server端请求内存数据。如上是UDS协议关于该服务的准确介绍。
对比Service 22,Service 23是直接从ECU芯片内存直接硬读取存储的数据内容,有点“简单、粗暴”的意思。在请求格式中会定义起始地址和要读取数据的大小长度。在请求格式中定义的内容直接将读取。
而Service 22,是在ECU诊断需求规范中,定义其DID,一个DID对应一个需要读取的参数值。在AUTOSAR软件框架中,DID对应的R-Port在DCM端,而对应的DID参数信息提供端P-Port由提供。R-Port和P-Port的Link链路,通过RTE实现。在这个功能实现中,会定义具体DID的Runnable和Event,其中Event是该DID API接口参数触发事件。
该服务对应地址存储的信息,原则上是在诊断需求规范中定义,比如ECU系统状态值、ECU运行数据、软件Counter值等,特别是一些内部记录数据值,可以帮助软件开发人员快速确定发生故障的模块,作为一个维测得数据存在。
关于Service 23(ReadMemoryByAddress)请求消息用于请求由参数MemoryAddress和MemorySize标识的Server端(ECU)的内存数据。用于MemoryAddress和MemorySize参数的字节数由AddressAndLengthFormatIdentifier(低位和高位半子节)定义。具体可参看如下图所示。
也可以使用固定的AddressAndLengthFormatIdentifier,并且memoryAddress或MemorySize参数内未使用字节在较高范围填充为0x00.
注:在存储区重叠的情况下,可以使用额外的存储器地址字节作为存储器标识符

服务器通过ReadMemoryByAddress肯定响应消息发送数据记录值。DataRecord参数的格式和定义应该车辆主机厂制定,如果服务器支持,DataRecord参数可以包含输入和输出信号、数字输入和输出,内部数据和系统状态信息。
该服务请求和响应格式如下:




其中UDS协议中给了关于Service 23否定响应NRC处理策略,如下:



AddressAndLengthFormatIdentifier:

该参数是一个单字节值,每个半字节分别进行编码:
bit 4-7:MemorySize参数的长度(字节数);
bit 0-3:MemoryAddress参数的长度。

MemoryAddress:
参数MemoryAddress是从中检索数据的Server端内存的起始地址,用于该地址的字节数由AddressAndLengthFormatIdentifier的低半字节表示,MemoryAddress参数中的字节始终是Server端引用地址的最低有效字节,地址的最高有效字节可以作为存储器标识符。
MemorySize
ReadMemoryByAddress请求消息中的参数MemorySize指定要从Server端内存中有MemoryAddress指定的地址开始读取字节数。

鉴于该服务的功能较为直接粗暴,一般有如下限制条件:

执行该服务需要一定的权限,比如需要进入OEM特定的会话模式,或者需要进行ECU解锁(Service 27)才可以执行;

在流程上也可以有限制,比如在OEM整车级研发以及量产线、下线等场景才使用该功能,对售后等不开放权限。


如上是关于Service 23功能介绍,下篇介绍对应的基于内存写数据的Service 3D.


页: [1]
查看完整版本: 漫谈UDS协议之Service 23