UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务

news2025/1/19 19:41:02

UDS 诊断服务系列文章目录

诊断和通信管理功能单元
UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务
UDS 诊断 - ECUReset(ECU重置)(0x11)服务
UDS 诊断 - SecurityAccess(安全访问)(0x27)服务
UDS 诊断 - CommunicationControl(通信控制)(0x28)服务
UDS 诊断 - TesterPresent(测试仪保活)(0x3E)服务
UDS 诊断 - AccessTimingParameter(访问计时参数)(0x83)服务
UDS 诊断 - SecuredDataTransmission(受保护的数据传输)(0x84)服务
UDS 诊断 - ControlDTCSetting(控制DTC设置)(0x85)服务
UDS 诊断 - ResponseOnEvent(基于事件响应)(0x86)服务
UDS 诊断 - LinkControl(链路控制)(0x87)服务
数据传输功能单元
UDS 诊断 - ReadDataByIdentifier(按标识符读取数据)(0x22)服务
UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务

文章目录

  • UDS 诊断服务系列文章目录
  • 一、服务说明
  • 二、请求消息
    • 1.请求消息定义
    • 2. 请求消息数据参数定义
      • 2.1 addressAndLengthFormatIdentifier(地址和长度格式标识符)示例值
  • 三、肯定响应消息
    • 1. 肯定响应消息定义
    • 2. 肯定响应消息数据参数定义
  • 四、支持的NRC
  • 五、示例
    • 1. 假设
    • 2. 示例 1:4 字节(32 位)寻址
    • 3. 示例 2:2 字节(16 位)寻址
    • 4. 示例 3:3 字节(24 位)寻址


一、服务说明

0x23 服务允许客户端通过待读取内存的给定起始地址和大小请求服务器中的内存数据。

ReadMemoryByAddress(按地址读取内存)的请求消息用于向服务器请求通过参数 memoryAddress(内存地址)和 memorySize(内存大小)所识别的内存数据。memoryAddress(内存地址)和memorySize(内存大小)参数所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)(高效半字节和低效半字节)确定。

也可使用固定的 addressAndLengthFormatIdentifier(地址和长度格式标识符),并且,memoryAddress(内存地址)和 memorySize(内存大小)参数中未使用的字节在更高范围的地址位置填充有数值 0x00。

在重叠内存区内,可使用附加 memoryAddress(内存地址)字节作为内存标识符(例如,内部和外部闪存的使用)。

服务器通过 ReadMemoryByAddress(按地址读取内存)的肯定响应消息读取数据记录值。dataRecord(数据记录)参数的格式和定义应由车辆制造商规定。dataRecord(数据记录)可包含模拟输入和输出信号、数字输入和输出信号、内部数据,以及系统状态信息(若服务器支持)。

二、请求消息

1.请求消息定义

字节参数名称字节值Cvt
#1ReadMemoryByAddress(按地址读取内存)请求SID0x23M
#2addressAndLengthFormatIdentifier(地址和长度格式标识符)0x00 - 0xFFM

#3
.
.
#(m-1)+3
memoryAddress[] = [
byte #1(MSB)
.
.
byte #m]

0x00 - 0xFF
.
.
0x00 - 0xFF

M
.
.
C1

#n-(k-1)
.
.
#n
memorySize[] = [
byte #1(MSB)
.
.
byte #k]

0x00 - 0xFF
.
.
0x00 - 0xFF

M
.
.
C2

C1:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的地址长度信息参数。
C2:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的内存大小长度信息。

2. 请求消息数据参数定义

定义
addressAndLengthFormatIdentifier(地址和长度格式标识符)
此参数为单字节值,每个半字节采用单独的编码:第 7 位至第 4 位:memorySize(内存大小)参数的长度(字节数),第 3 - 0 位:memoryAddress(内存地址)参数的长度(字节数)。
memoryAddress(内存地址)
此参数是服务器内存的起始地址,从该地址检索数据。该地址所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的低效半字节(第 3 位至第 0 位)确定。memoryAddress(内存地址)参数的第 m 个字节始终为服务器中当前所引用的地址的最低有效字节。地址的最高有效字节可以用作内存标识符。
内存标识符的使用示例可为一个带 16 位寻址和内存地址重叠的双处理器服务器(给定地址适用于处理器但得出不同的物理内存设备或使用内部和外部闪存的情况下)。在该情况下,可以将 memoryAddress(内存地址)参数中另外未使用的字节指定为用于选择期望内存设备的内存标识符。此功能的使用应由车辆制造商 / 系统供应商确定。
**memorySize(内存大小)** <br>此参数指定了从服务器内存中 memoryAddress 所指定的地址开始的待读取字节数。该内存大小所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的高效半字节(第 7 位至第 4 位)确定。|

2.1 addressAndLengthFormatIdentifier(地址和长度格式标识符)示例值

下表中包含 addressAndLengthFormatIdentifier(地址和长度格式标识符)值组合的示例。需要考虑以下情况:

  • 不得使用或必须由服务器通过否定消息拒绝将 “manageable memorySize(可管理的内存大小)” 或 “memoryAddress range(内存地址范围)” 标记为 “not applicable(不适用)” 的值。
  • 对于带有适用 “manageable memorySize(可管理的内存大小)” 或 “memoryAddress range(内存地址范围)” 的值,允许该参数使用。
字节值说明
memorySize(内存大小)字节的 7 - 4 位(高效半字节)编号memoryAddress(内存地址)字节的 3 - 0 位(低效半字节)编号
memorySize(内存大小)参数所用的字节可管理的大小memoryAddress(内存地址)参数所用的字节可寻址内存
0x00 不适用不适用不适用不适用
0x01 不适用不适用1256 个字节 - 1
0x02 不适用不适用264KB - 1
0x03 不适用不适用316MB - 1
0x04 不适用不适用44GB - 1
0x05 不适用不适用51024GB - 1
0x06 - 0x0F ........
0x10 1256个字节不适用不适用
0x11 1256个字节2256 个字节 - 1
0x12 1256个字节364KB - 1
0x13 1256个字节416MB - 1
0x14 1256个字节54GB - 1
0x15 1256个字节11024GB - 1
0x16 - 0x1F ........
0x20 264KB不适用不适用
0x21 264KB1256 个字节 - 1
0x22 264KB264KB - 1
0x23 264KB316MB - 1
0x24 264KB44GB - 1
0x25 264KB51024GB - 1
0x26 - 0x2F ........
0x30 316MB不适用不适用
0x31 316MB1256 个字节 - 1
0x32 316MB264KB - 1
0x33 316MB316MB - 1
0x34 316MB44GB - 1
0x35 316MB51024GB - 1
0x36 - 0x3F ........
0x40 44GB不适用不适用
0x41 44GB1256 个字节 - 1
0x42 44GB264KB - 1
0x43 414GB316MB - 1
0x44 44GB44GB - 1
0x45 44GB51024GB - 1
0x46 - 0xFF ........

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称字节值
#1ReadMemoryByAddress(按地址读取内存)响应SID0x63

#2
.
.
#n
dataRecord[] = [
data #1
.
.
data #m]

0x00 - 0xFF
.
.
0x00 - 0xFF

2. 肯定响应消息数据参数定义

定义
dataRecord(数据记录)
此参数用在 0x23 服务的肯定响应消息中,用以向客户端提供所请求的数据记录值。

四、支持的NRC

NRC说明
0x13消息长度不正确或格式无效
0x22条件不正确
若不满足服务器的运行条件而无法执行所需的操作,则应发送此 NRC。
0x31请求超过限值
以下情况下,应发送此 NRC:
- 间隔 [0xMA, (0xMA + 0xMS -0x1)] 内的内存地址无效;
- 间隔 [0xMA, (0xMA + 0xMS -0x1)] 内的内存地址受限;
服务器不支持请求消息中的 memorySize(内存大小)参数值;
指定的 addressAndLengthFormatIdentifier(地址和长度格式标识符)无效;
请求消息中的 memorySize 参数值为 0;
0x33安全访问被拒绝
若间隔 [0xMA, (0xMA + 0xMS -0x1)] 内的内存地址已受保护并且服务器已锁止,则应发送此 NRC。

下图为 0x23 服务的否定响应码的处理。
0x23 服务的否定响应码的处理

图例
1. 至少 4 个(SI + addressAndLengthFormatIdentifier(地址和长度格式标识符)+ 最小 memoryAddress + 最小 memorySize)
2. 单字节 SI + 单字节 addressAndLengthFormatIdentifier(地址和长度格式标识符)+ n 个字节 memoryAddress 参数长度 + n 个字节 memorySize 参数长度

五、示例

1. 假设

本条规定了为执行 0x23 服务示例需满足的条件。本示例中的服务不受服务器任何限制条件的限制。

2. 示例 1:4 字节(32 位)寻址

客户端从内存地址 0x2048 1392 开始读取服务器内存中的 259 数据字节

req   23 24 20 48 13 92 01 03
resp  63 00 ... 8C
req #2:addressAndLengthFormatIdentifier(地址和长度格式标识符),其中 memoryAddress 字节长度 = 4;memorySize 字节长度 = 2;
req #3-#6:memoryAddress:0x20481392
req #7-#8:memoryAddress:0x0103

resp #2-#259+1:dataRecord[ 第 1 个数据 ] (第 1 个存储单元)- dataRecord[ 第 259 个数据 ](第 259 个存储单元)

3. 示例 2:2 字节(16 位)寻址

客户端从内存地址 0x4813 开始读取服务器内存中的 5 个数据字节

req   23 12 48 13 05
resp  63 43 2A 07 2A 55
req #2:addressAndLengthFormatIdentifier(地址和长度格式标识符),其中 memoryAddress 字节长度 = 2;memorySize 字节长度 = 1;
req #3-#4:memoryAddress:0x4813
req #5:memoryAddress:0x05

resp #2-#6:dataRecord[ 第 1 个数据 ] (第 1 个存储单元)- dataRecord[ 第 5 个数据 ](第 5 个存储单元)

4. 示例 3:3 字节(24 位)寻址

客户端从内存地址 0x204813 开始读取服务器外部 RAM 单元中的 3 个数据字节

req   23 23 20 48 13 00 03
resp  63 00 01 8C
req #2:addressAndLengthFormatIdentifier(地址和长度格式标识符),其中 memoryAddress 字节长度 = 3;memorySize 字节长度 = 3;
req #3-#4:memoryAddress:0x204813
req #5:memoryAddress:0x0003

resp #2-#4:dataRecord[ 第 1 个数据 ] (第 1 个存储单元)- dataRecord[ 第 3 个数据 ](第 3 个存储单元)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑神话孙悟空,自媒体小白如何蹭这波流量!

当下&#xff0c;黑神话孙悟空的热度如熊熊烈火&#xff0c;席卷了整个游戏世界。 只要与这个话题沾边&#xff0c;似乎就能轻松吸引大量关注。 那么&#xff0c;对于不怎么懂自媒体运营的小伙伴来说&#xff0c;该如何抓住这个机遇呢&#xff1f; 别担心&#xff0c;我们可以…

LearnOpenGL——延迟渲染学习笔记

延迟渲染学习笔记 一、基本概念二、G-BufferMRT 三、Lighting Pass四、结合延迟渲染和前向渲染五、更多光源 我们之前使用的一直是 前向渲染&#xff08;正向渲染 Forward Rendering&#xff09;&#xff0c;指的是在场景中根据所有光源照亮一个物体&#xff0c;之后再渲染下一…

MBR30100CT-ASEMI低压降肖特基MBR30100CT

编辑&#xff1a;ll MBR30100CT-ASEMI低压降肖特基MBR30100CT 型号&#xff1a;MBR30100CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;30A 最大循环峰值反…

Django | 从中间件的角度来认识Django发送邮件功能

文章目录 概要中间件中间件 ---> 钩子实现中间件demo 邮件发送过程Django如何做邮件服务配置流程 中间件结合邮件服务实现告警 概要 摘要 业务告警 邮件验证 密码找回 邮件告警 中间件 中间件 —> ‘钩子’ 例如 访问路由 的次数【请求】 中间件类须实现下列五个方法…

商业模式画布全面解读:产品经理的实用手册

在产品经理的日常工作中&#xff0c;最基本的一项任务就是进行竞品分析和商业模式分析。一方面&#xff0c;通过竞品分析环节&#xff0c;了解当前产品的竞争力和不可替代性&#xff1b;另一方面&#xff0c;定期评估产品的商业模式是否存在风险&#xff0c;是否具有可持续性。…

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万

天神风云&#xff0c;波澜再兴&#xff0c;GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00&#xff08;GMT8&#xff09;&#xff0c;现已正式开启&#xff01; 这是一个由人、游灵和神灵共存的世界&#xff0c;历经蛮荒时期的纷争与信…

Docker的安装与镜像配置

小编目前大一&#xff0c;刚开始着手学习SSM&#xff0c;小编会把每个框架都整理成知识点发布出来。如果你也同时在学习SSM的话&#xff0c;不妨看看我做的这个笔记。我认为同为初学者&#xff0c;我把我对知识点的理解以这种代码加观点的方式分享出来不仅加深了我的理解&#…

游泳耳机哪个牌子好?角逐必选榜的4大王者游泳耳机测评解析!

在选择游泳耳机时&#xff0c;许多消费者往往会被市场上五花八门的产品所困扰。特别是那些标榜能够防水防潮的产品&#xff0c;但实际上它们往往缺乏核心技术支持&#xff0c;存在很高的损伤风险。据调查&#xff0c;超过90%的用户反映&#xff0c;市面上的游泳耳机常常无法达到…

centos7.9离线安装kubernetes(k8s)1.28版本

文章目录 一、环境准备二、所有节点执行1、解压安装包2、创建/etc/modules-load.d/containerd.conf配置文件3、执行以下命令使配置生效4、创建/etc/sysctl.d/99-kubernetes-cri.conf配置文件5、加载ipvs内核模块–4.19以上版本内核6、授权生效7、关闭swap&#xff0c;并永久关闭…

WPF——动态排名图表实现

开发环境 VS2022 .NET 8.0 MVVM Toolkit 8.2.2 需求 开发中需要实现按照成绩动态指名&#xff0c;以展示当前的竞赛成绩的一个实时情况及变化。 即如下效果&#xff1a; 需求分析 按照接收到的信息&#xff0c;就是要将获取到的集合排序&#xff0c;并且要将排序前后的变…

什么是UDP?

UDP是工作在OSI&#xff08;开放系统互连&#xff0c;Open Systems Interconnection&#xff09;模型中传输层的协议。它使用IP作为底层协议&#xff0c;是为应用程序提供一种以最少的协议机制向其他程序发送消息的协议。其主要特点是无连接&#xff0c;不保证可靠传输和面向报…

汽车线束智能制造:MES系统与工艺深度融合的革新之路

万界星空科技汽车线束工厂MES系统解决方案是针对线束制造行业特定需求而设计的一套集成化管理系统&#xff0c;旨在提高生产效率、优化资源配置、确保产品质量并增强企业竞争力。 一、汽车线束制造工艺 汽车线束&#xff0c;作为连接汽车各个电子部件的桥梁&#xff0c;承载着…

论文:NeRF on the go:Exploiting Uncertainty for Distractor-free NeRFs in the Wild

随时随地使用NeRF。本文的目标是利用在野外随意捕捉的图像序列或视频作为输入&#xff0c;训练一个用于静态场景的NeRF&#xff0c;并有效地移除场景中的所有动态元素&#xff08;如汽车、电车、行人等&#xff09;&#xff0c;即干扰物。与现有的方法如NeRF-W [27]和RobustNeR…

python依赖包安装失败的解决办法(适用于conda安装)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;python依赖包安装失败的解决办法&#xff08;适用于conda安装&#xff09;-CSDN博客 前言&#xff1a;这个问题之前一直困扰着我&#xff0c;因为最近要升级Anaconda-Navigator&#x…

代码随想录算法训练营第十八天(二叉树 六)

力扣题部分: 530.二叉搜索树的最小绝对差 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路: 写关于二…

第T11周:优化器对比实验

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** 本次主要是探究不同优化器、以及不同参数配置对模型的影响 &#x1f680;我的环境&#xff1a; 语言环境&#xff1a;Python3.11.…

CSS 布局

CSS 页面布局技术允许我们拾取网页中的元素&#xff0c;并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。布局有一下几种 正常布局流display属性弹性盒子网格浮动定位CSS 表格布局多列布局 每种布局都有它们的用途&#xff0c;各有优缺点&#xff0c;相…

CSS伪类选择器和伪元素

伪类&#xff08;Pseudo-classes&#xff09; 伪类用于定义元素的特殊状态。它们被添加到选择器中以指定元素在其生命周期的特定状态下的样式。伪类不创建新的文档内容&#xff0c;也不创建新的文档树中的元素。相反&#xff0c;它们提供了一种方法来根据元素的状态来应用样式…

统信UOS系统连接打印机操作步骤

系统版本 操作步骤 首先点击开始菜单 搜索框输入打印&#xff0c;点击打印管理器 点击图下所示的号 按照图下所示&#xff0c;手动查找->输入打印机的ip地址->点击查找 等到如图下所示&#xff0c;出现打印机的时候&#xff0c;选择打印机&#xff0c;然后选择驱动&…

嵌入式AI快速入门课程-K510篇 (第三篇 环境搭建及开发板操作)

第三篇 环境搭建及开发板操作 文章目录 第三篇 环境搭建及开发板操作1.配置VMware使用桥接网卡1.1 vmware设置1.2 虚拟网络编辑器设置 2.安装软件2.2 安装 Windows 软件2.3 使用MobaXterm远程登录Ubuntu2.4 使用FileZilla在Windows和Ubuntu之间传文件2.5编程示例&#xff1a;Ub…