【ISO14229_UDS_0x23服务详解】

2023-11-15

1、0x23服务(根据地址读取内存服务)

  Service description:
  0x23服务(ReadMemoryByAddress,根据地址读取内存服务)允许客户端从服务端通过起始地址和内存大小空间来读取指定内存的数据。
  0x23服务(ReadMemoryByAddress,根据地址读取内存服务)请求报文中包含了两个参数memoryAddress和memorySize,其定义了内存的相关信息,可以用于请求读取内存数据。用于表示内存地址(memoryAddress)和内存大小(memorySize)参数的字节数在地址长度格式标识符(addressAndLengthFormatIdentifier)来定义。
  一个固定地址长度格式标识符(addressAndLengthFormatIdentifier),在memoryAddress 或者 memorySize参数中高地址范围未使用到的字节用0x00去填充。
  如果内存区域有重叠,则使用附加内存地址字节作为内存标识符(如内部和外部闪存的使用)。
  服务端通过ReadMemoryByAddress的肯定应答报文来发送数据记录值。数据记录(dataRecord)参数的格式和定义由车辆制造厂商来定义。如果服务端支持,数据记录(dataRecord)参数会包含模拟输入输出信号量,数字输入输出信号量,内部数据和系统状态信息等参数。

2、请求报文格式

2.1 请求报文定义

  请求报文的定义:

字节序号 参数值 约定 字节值
#1 ReadMemoryByAddress Request SID M 0x23
#2 addressAndLengthFormatIdentifier M 0x00 - 0xFF

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

M
.
.
C1

0x00 – 0xFF
.
.
0x00 – 0xFF

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

M
.
.
C2

0x00 – 0xFF
.
.
0x00 – 0xFF

  C1:该参数的出现取决于地址和长度格式标识符(addressAndLengthFormatIdentifier)参数中地址长度信息;
  C2:该参数的出现取决于地址和长度格式标识符(addressAndLengthFormatIdentifier)参数中内存大小长度信息;

2.2 请求报文中子函数参数定义

  该服务未使用子函数参数。

2.3 请求报文中数据参数定义

  该服务在请求报文中的数据参数定义如下表所示:

定义
addressAndLengthFormatIdentifier
该参数是单独编码的字节值:
bit 7 - 4:内存大小(memorySize)参数的长度(字节数量)
bit 3 - 0:内存地址(memoryAddress)参数的长度(字节数量)
memoryAddress
内存地址(memoryAddress)参数是所获取数据内存的起始地址。用于表示地址的字节数量在地址和长度格式标识符(addressAndLengthFormatIdentifier)参数的bit 0 - 3定义。Byte#m是内存地址(memoryAddress)参数中最低有效字节(least significant byte,LSB)。地址的最高有效字节(most significant byte,LSB)可以用作于内存标识符。
使用内存标识符的一个示例是具有16位寻址和内存地址重叠的双处理器服务器(当给定的地址对任一处理器都有效,但产生不同的物理内存设备或使用内部和外部闪存时)。在这种情况下,可以将memoryAddress参数中未使用的字节指定为用于选择所需内存设备的内存标识符。此功能的使用应由车辆制造商/系统供应商定义。
memorySize
ReadMemoryByAddress请求报文中memorySize参数指定了需要读取的字节数,这些字节数从服务端内存中由内存地址(memoryAddress)指定的地址开始。用于表示内存大小的字节数量在地址和长度格式标识符(addressAndLengthFormatIdentifier)参数中的bit 7 - 4中定义。

3、肯定应答报文

3.1 肯定应答报文格式定义

字节序号 参数值 约定 字节值
#1 ReadMemoryByAddress Response SID M 0x63

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

M
.
.
U

0x00 – 0xFF
.
.
0x00 – 0xFF

3.2 肯定应答报文数据参数定义

Definition
dataRecord
该参数用于ReadMemoryByAddress服务肯定应答报文中,以提供给客户端请求的数据记录(dataRecord)值。数据记录(dataRecord)的内容没有在文档中定义,但应该反应请求的内容值。数据格式应该由车辆制造厂商/系统供应商来定义。

4、支持的否定应答码(NRC_)

  本服务应实施如下否定响应代码,下表记录了每个应答代码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应代码。

NRC 描述
0x13 incorrectMessageLengthOrInvalidFormat
请求报文长度不正确时,会发送该NRC
0x22 conditionsNotCorrect
服务端的运行条件不满足去执行请求的动作时,会发送该NRC
0x31 requestOutOfRange
如下情况发送该NRC:
— 在[0xMA, (0xMA + 0xMS -0x1)]区间内的任何内存地址都是无效的;
— 在[0xMA, (0xMA + 0xMS -0x1)]区间内的任何内存地址被限制了;
— 请求报文中内存大小(memorySize)参数服务端不支持时;
— 指定的地址和长度格式标识符(addressAndLengthFormatIdentifier)参数无效;
— 请求报文中内存大小(memorySize)参数值为0;
0x33 SecurityAccessDenied
在[0xMA, (0xMA + 0xMS - 0x1)]区间内的任何内存地址都是保密的并且服务端被锁住,会发送该NRC

  0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的否定应答码(NRC)具体处理过程如下图所示:
在这里插入图片描述

5、0x23服务(ReadMemoryByAddress,根据地址读取内存服务)案例说明

  Assumptions:
  如下案例中,假定运行0x23服务(ReadMemoryByAddress)的条件都满足,该案例中的服务不会被服务端中任何约束条件限制。
  例1:ReadMemoryByAddress - 4-byte (32-bit) addressing
  客户端从服务端内存起始地址为0x2048 1392位置处读取了259个数据字节。
  案例1 0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 ReadMemoryByAddress Request SID 0x23
#2 addressAndLengthFormatIdentifier 0x24
#3 memoryAddress [ byte#1 ] (MSB) 0x20
#4 memoryAddress [ byte#2 ] 0x48
#5 memoryAddress [ byte#3 ] 0x13
#6 memoryAddress [ byte#4 ] 0x92
#7 memorySize [ byte#1 ] (MSB) 0x01
#8 memorySize [ byte#2 ] 0x03

  案例1 0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序 Description 字节值
#1 ReadMemoryByAddress Response SID 0x63
#2
.
.
#259+1
dataRecord [ data#1 ] (memory cell#1)
        .
        .
dataRecord [ data#259 ] (memory cell#259) ]

0x00
.
.
0x8C

例2:ReadMemoryByAddress - 2-byte (16-bit) addressing
  客户端从服务端内存起始地址为0x4813位置处读取了5个数据字节。
  案例2 0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 ReadMemoryByAddress Request SID 0x23
#2 addressAndLengthFormatIdentifier 0x12
#3 memoryAddress [ byte#1 ] (MSB) 0x48
#4 memoryAddress [ byte#2 ] 0x13
#5 memorySize [ byte#1 ] 0x05

  案例2 0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序 Description 字节值
#1 ReadMemoryByAddress Response SID 0x63
#2 dataRecord [ data#1 ] (memory cell#1) 0x43
#3 dataRecord [ data#1 ] (memory cell#2) 0x2A
#4 dataRecord [ data#1 ] (memory cell#3) 0x07
#5 dataRecord [ data#1 ] (memory cell#4) 0x2A
#6 dataRecord [ data#1 ] (memory cell#5) 0x55

例3:ReadMemoryByAddress, 3-byte (24-bit) addressing
  客户端从服务端外部RAM单元地址从0x204813位置处,读取了3个数据字节。
  案例3 0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 ReadMemoryByAddress Request SID 0x23
#2 addressAndLengthFormatIdentifier 0x23
#3 memoryAddress [ byte#1 ] (MSB) 0x20
#4 memoryAddress [ byte#2 ] 0x48
#5 memoryAddress [ byte#2 ] (LSB) 0x13
#6 memorySize [ byte#1(MSB) ] 0x00
#7 memorySize [ byte#2(LSB) ] 0x03

  案例3 0x23服务(ReadMemoryByAddress,根据地址读取内存服务)的肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序 Description 字节值
#1 ReadMemoryByAddress Response SID 0x63
#2 dataRecord [ data#1 ] (memory cell#1) 0x00
#3 dataRecord [ data#1 ] (memory cell#2) 0x01
#4 dataRecord [ data#1 ] (memory cell#3) 0x8C

返回UDS诊断服务功能单元介绍目录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ISO14229_UDS_0x23服务详解】 的相关文章

  • 聊聊FFT(二)----幅值、模值与分辨率

    以常见的家用交流220V 以下称AC220V 工频电信号为例 大家都知道家里的插座内有220V的电 可以给电饭锅 热水壶 空调冰箱等等电器供电 至于220V具体指的是什么可能非理工科背景的同学没有深究过 有效值又称 均方根值 一种用以计量交
  • ITX-RK3588J在Ubuntu22.04上进行SDK编译与烧写

    一 SDK下载 在Window上下载好最新的SDK 并把他放拉到虚拟机里的Ubuntu22 04上 二 搭建编译环境 Firefly维基教程上 需要安装编译环境 直接使用 sudo apt get install 软件名 安装全部软件 su
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口RC522模块库调用及示例进行复现及分析 了解RDIF及非接触式IC卡的原理及操作方法 实现功能 利用已知的A
  • CAN矩阵(入门篇)(史上最全)

    CAN矩阵 ADAS CAN矩阵 JM相机CAN矩阵 CAN消息及信号的含义 CAN消息解析 实际值 十进制 Factor Offset 实车上如何利用该CAN消息 JM相机CAN消息利用分为以下几个部分 车道线点适配 车道线识别状态适配
  • Event Driven Class OSAL 基于事件驱动的模拟操作系统

    EventDrivenClassOSAL详解 Event Driven Class OSAL 基于事件驱动的模拟操作系统 前言 什么是OSAL OSAL为 Operating System Abstraction Layer 即 操作系统抽
  • keil5安装到中文路径,导致软件、文件打不开,或打开文件为灰色,无法编译运行

    keil5安装到中文路径 导致软件 文件打不开 1 查看keil软件安装位置 1 1 win键 搜索keil 点击打开文件位置 1 2 鼠标右键 I 打开文件所在的位置 2 修改安装文件夹为英文名称 2 1找到中文名称文件夹 修改为英文名称
  • 从0写bootloader — 最简单的bootloader和App

    地址空间划分 对于空间划分是人为定义的 bootloader编写 启动文件start s PRESERVE8 instruct is aligned by 8 bytes 指令集8字节对齐 THUMB use Thumb instructi
  • BES 平台 SDK之提示音的添加

    本文章是基于BES2700 芯片 其他BESxxx 芯片可做参考 如有不当之处 欢迎评论区留言指出 仅供参考学习用 BES 平台 SDK之按键的配置 谢文浩的博客 CSDN博客 关于系统按键简介可参考上一篇文章 链接如上所示 一 提示音的制
  • 零基础开发NBIOT

    前言 shineblink core 开发板 简称Core 的库函数支持NBIOT通信功能 所以只用几行代码即可实现基于M5311 NB模块的联网通信 TCP UDP MQTT 功能 这里我们主要介绍通过TCP实现联网通信的功能 更多关于T
  • Micropython史上最友好的编辑器,小巧精悍

    Python 因为非常好学 易上手故而广受大众的喜欢 micropython 也因此在物联网单片机领域拥有一席之位 并且 python 有着良好的生态环境 功能亦更加丰富 from machine import Pin p0 Pin 0 P
  • LVGL-tileview控件

    控件特点 以page为基础扩展的控件 增加了释放后会有动画定格效果 lv tileview set tile act tileview ext gt act id x x move ext gt act id y y move true 切
  • 【STM32实战】机械臂快递分拣系统(二)——机械臂控制程序(上位机)编写

    STM32实战 机械臂快递分拣系统 二 机械臂控制程序 上位机 编写 前言 题目分析 蓝牙模块的使用 上位机程序的编写 连接阿里云 测试 前言 近期回校上最后一门课 刚好是做机械臂有关的题目 所以写文记录一下 主要实现的是可以自动识别获取快
  • Esp8266 Node Mcu 一直乱码的问题详解

    最近一直在做项目 遇到的这个问题花了我很长时间 因此在这里写出自己的经历供大家参考 喜欢的可以点个赞 比较简单的方案 在Arduino上设置Node Mcu 1 打开文件 gt 首选项 复制这样一个网址 http arduino esp82
  • 基于STM32的IAP技术分享

    基于STM32的IAP技术分享 1 烧录过程说明 2 厂家bootloader 3 bootloader区和APP区空间划分 4 bootloader区和APP程序内容说明 5 实验 5 1实验所用到的上位机软件 5 2 bootloade
  • HardFault_Handler问题查找方法

    一 程序进入HardFault Handler 可能原因 1 内存溢出 常见的于数组访问越界 2 堆栈溢出 堆栈设置过小等 二 排查方法 方法1 出现该情况后 可首先查看LR寄存器中的值 确定当前使用堆栈为MSP或PSP 1 打开寄存器窗口
  • ESP8266 教程3 — 通过TCP组建局域网并通信

    目录 1 ESP8266 的 AP 模式 1 1 查询 ESP8266 的wifi应用模式 1 2 设置 ESP8266 模块的wifi信息 1 3 查询已经接入的设备 2 ESP8266 的Station 模式 2 1 设置ESP8266
  • HT1621B液晶驱动(附电路图)

    最近做了一个项目用到了HT1621 电路图 datasheet code HT1621B datasheet include ht1621 h void ht1621 send high order data UCHAR data UCHA
  • 【项目实战】复旦微MCU+RT-thread+Moudbus(1)

    前言 手头存货FM33LC046芯片 复旦微提供的是freertos和rthread nano的例子 一直想使用RTThread完整版 MCU由于ROM有限 项目因此不可能太复杂 怕后期资源不够 第一步 git源码https gitee c
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • C语言环形缓冲区

    2024第一天 继续给自己加点料 导言 C语言环形缓冲区是一种常用的数据结构 它提供了一种高效的方式来存储和处理数据 本文将深入解析C语言环形缓冲区的定义 原理和应用 并提供一些实际的代码示例 一 什么是环形缓冲区 环形缓冲区 也称为循环缓

随机推荐