《UDS协议从入门到精通》系列——图解0x38:请求上传

《UDS协议从入门到精通》系列——图解0x38:请求上传

  • 一、简介
  • 二、数据包格式
    • 2.1 服务请求格式
    • 2.2 服务响应格式
      • 2.2.1 肯定响应
      • 2.2.2 否定响应
  • 三、通信示例

Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)

学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

一、简介

  UDS协议中的0x38服务,即RequestFileTransfer服务,是一种用于文件数据传输的服务。这个服务允许Tester发起从Tester到目标ECU或从目标ECU到Tester的文件数据传输,即上传或下载文件。此外,这个服务还能够获取关于服务器文件系统的信息。

  这个服务的目的是作为一个替代方案,用于那些支持数据上传和下载功能,并且实现了文件系统进行数据存储的目标ECU。如果目标ECU具备文件系统,那么在进行文件的下载或上传时,应该使用RequestFileTransfer服务来替代传统的RequestDownload或RequestUpload服务。

  在实际的文件传输过程中,数据传输和数据传输的终止是通过使用TransferData和RequestTransferExit服务来实现的,这与使用RequestDownload或RequestUpload服务时的操作相同。此外,这个服务还支持在目标ECU的文件系统中删除文件或目录的功能,但在这种情况下,TransferData和RequestTransferExit服务是不适用的。

  当目标ECU接收到RequestFileTransfer请求消息后,它将采取所有必要的行动来准备接收或发送数据,然后才会发送一个正响应消息。这意味着目标ECU在开始实际的数据传输之前,会先准备好相应的文件系统操作,确保数据传输可以顺利进行。

Tip📌:总之,0x38服务是一个多功能的文件传输服务,它不仅支持文件的上传和下载,还能获取文件系统信息,并且在必要时可以删除目标ECU上的文件或目录。该服务特别适用于那些具备文件系统的目标ECU,为它们提供了一个更加灵活和强大的文件管理解决方案。

二、数据包格式

2.1 服务请求格式

在这里插入图片描述

  该服务不支持sub-function。部分参数的含义如下所示:

  modeOfOperation:指的是对文件或目录执行的操作类型。操作类型包括添加、删除、替换或读取文件,以及读取目录等。具体如下表所示。

取值描述
0x00ISO/SAE保留
0x01添加文件
用于添加(下载)filePathAndName参数中定义的文件。
0x02删除文件
用于删除filePathAndName参数中定义的文件。
0x03替换文件
用于替换(下载)filePathAndName参数中定义的文件。如果文件不在指定位置,则应添加该文件。
0x04读取文件
用于读取(上传)filePathAndName参数定义位置的文件。
0x05读取目录
用于读取filePathAndName参数中定义的目录。此值意味着请求不包含文件名。
0x06 - 0xFFISO/SAE保留

  filePathAndNameLength:定义了文件路径和名称参数(filePathAndName)的长度,以字节为单位。

  filePathAndName:定义了目标ECU文件系统中文件的位置,以及文件的名称。根据modeOfOperation参数的不同,这个文件可以是将要被添加、删除、替换或读取的文件。如果modeOfOperation等于0x05(ReadDir),则这个参数指示将要被读取的目录。这个参数的每个字节都应以ASCII格式编码。

  dataFormatIdentifier:高半字节(nibble)指定压缩方法,低半字节指定加密方法。值0x00表示既不使用压缩也不使用加密。其他值由车辆制造商定义。如果modeOfOperation等于0x02(DeleteFile)或0x05(ReadDir),则这个参数不应包含在请求消息中。

  fileSizeParameterLength:这个参数定义了未压缩文件大小(fileSizeUncompressed)和压缩文件大小(fileSizeCompressed)参数的长度,以字节为单位。如果modeOfOperation等于0x02(DeleteFile)、0x04(ReadFile)或0x05(ReadDir),则这个参数不应包含在请求消息中。

  fileSizeUncompressed:定义了未压缩文件的大小,以字节为单位。如果modeOfOperation等于0x02(DeleteFile)、0x04(ReadFile)或0x05(ReadDir),则这个参数不应包含在请求消息中。

  fileSizeCompressed:这个参数定义了压缩文件的大小,以字节为单位。如果传输的是未压缩文件,则这个参数的所有字节应设置为与fileSizeUncompressed参数相同的大小信息。如果modeOfOperation等于0x02(DeleteFile)、0x04(ReadFile)或0x05(ReadDir),则这个参数不应包含在请求消息中。

2.2 服务响应格式

2.2.1 肯定响应

在这里插入图片描述

  modeOfOperation:回显请求消息中的值,反映了Tester请求的操作类型。

  lengthFormatIdentifier:定义了maxNumberOfBlockLength参数的长度(以字节为单位)。如果modeOfOperation参数等于0x02(DeleteFile),则这个参数不应包含在响应消息中。

  maxNumberOfBlockLength:用于在请求FileTransfer的正响应消息中通知Tester,在每个TransferData请求消息中应包含多少数据字节(maxNumberOfBlockLength),或者在数据上传时,目标ECU将在每个TransferData正响应中包含多少数据字节。这个长度反映了包括服务标识符(SID)和TransferData请求消息或正响应消息中的数据参数在内的完整消息长度。

  该参数允许Tester在开始向目标ECU传输数据之前适应目标ECU的接收缓冲区大小,或者指示在数据上传时将在每个TransferData正响应中包含多少数据字节。目标ECU必须接受长度等于其报告的maxNumberOfBlockLength的TransferData请求。目标ECU特定于接受小于maxNumberOfBlockLength的TransferData请求长度(如果有)。

Tip📌:在给定块内的最后一个TransferData请求可能需要小于maxNumberOfBlockLength。不允许目标ECU写入未包含在TransferData消息中的额外数据字节(即填充字节),因为这会影响后续TransferData请求数据将被写入的内存地址。

  此外,如果modeOfOperation参数等于0x02(DeleteFile),则这个参数不应包含在响应消息中。

  dataFormatIdentifier:回显请求消息中的值。如果modeOfOperation参数等于0x02(DeleteFile),则这个参数不应包含在响应消息中。如果modeOfOperation参数等于0x05(ReadDir),则这个参数的值应等于0x00。

  fileSizeOrDirInfoParameterLength:这个参数定义了fileSizeUncompressedOrDirInfoLength和fileSizeCompressed参数的长度,以字节为单位。如果modeOfOperation参数等于0x01(AddFile)、0x02(DeleteFile)或0x03(ReplaceFile),则这个参数不应包含在响应消息中。

  fileSizeUncompressedOrDirInfoLength:定义了将要上传的未压缩文件的大小,或者将要读取的目录信息的长度,以字节为单位。如果modeOfOperation参数等于0x01(AddFile)、0x02(DeleteFile)或0x03(ReplaceFile),则这个参数不应包含在响应消息中。

  fileSizeCompressed:定义了压缩文件的大小,以字节为单位。如果modeOfOperation参数等于0x01(AddFile)、0x02(DeleteFile)、0x03(ReplaceFile)或0x05(ReadDir),则这个参数不应包含在响应消息中。

2.2.2 否定响应

在这里插入图片描述

  可能出现的NRC及其含义如下:

NRC含义
0x13消息长度错误
0x22当前条件不满足
0x31请求参数不受支持,参数错误
0x33未通过安全访问
0x70由于某些故障导致无法上传目标ECU的数据到Tester中

  NRC的处理流程如下所示(即推荐的错误情况检查顺序):

在这里插入图片描述

三、通信示例

  这个示例仅限于描述 RequestFileTransfer 请求和其正响应。即不包括 TransferDataRequestTransferExit 服务的具体使用。在 RequestFileTransfer 的上下文中,TransferDataRequestTransferExit 服务的使用方式与在 RequestDownloadRequestUpload 服务中的使用方式相同。

  提前假定如下信息:
在这里插入图片描述
==========> Tester发送请求:

在这里插入图片描述

==========> 目标ECU发送正响应:

在这里插入图片描述

>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

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

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

相关文章

新学期必备,录取情况统计如何制作?

暑假即将开始&#xff0c;新学期离我们又近了一步&#xff0c;老师们是不是在为如何高效统计录取情况而头疼呢&#xff1f;别担心&#xff0c;分享一个超实用的小技巧——使用易查分小程序的新建填表功能&#xff0c;让你的录取统计工作变得简单又高效&#xff01; 打开易查分小…

G882磁力仪拖鱼位置是如何计算的?

根据参考文献&#xff0c;磁力仪拖鱼位置计算有两种方法&#xff1a; 1、直线法 直线计算法是假设不考虑海流、船摆等动态因素的影响&#xff0c;拖鱼与拖点始终和航向相同&#xff0c;即整个拖拽系统与船舶是刚性连接。 2、曲线法 实际海洋磁力测量中&#xff0c;在海风、海…

Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例

安装ThinkPHP8.0 登录宝塔面板&#xff0c;创建一个站点。 输入composer代码&#xff0c;执行完成后自动创建TP目录 composer create-project topthink/think tp 网站目录设置为tp&#xff0c;运行目录设置为public 设置PHP版本为8.0以上&#xff0c;不然会出现下面的报错代…

软考 有向图 数据库之关系模式范式

假设有一个关系 R(A, B, C, D)&#xff0c;并且已知以下函数依赖&#xff1a; A → B B → C BC → D 求候选键? 求候选码? 候选键/候选码 是同一个概念. 数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。 https://cloud.tencent.com/developer/article/2055118 2NF在1NF的基础…

visual studio 2022配置和使用protobuf

上图证明&#xff0c;我真的测了好多遍&#xff0c;测了好多版本的protobuf&#xff0c;花了很多时间。不过好在最后在vs2022上测通了。 下载protobuf 这里是protobuf下载的地址。 Releases protocolbuffers/protobuf GitHub 个人使用的3.21.9这个版本才跑通的。 1、首先…

第6章_libmodbus使用

文章目录 第6章 libmodbus使用6.1 libmodbus开发库6.1.1 功能概要6.1.2 源码获取6.1.3 源码阅读1. 新建工程2. 同步文件3.打开工程4. 操作示例5. 快捷键 6.1.4 libmodbus与应用程序的关系 6.2 libmodbus源代码解析6.2.1 核心函数6.2.2 框架分析与数据结构6.2.3 情景分析1. 初始…

OOXML入门学习

进入-飞入 <par> <!-- 这是一个并行动画序列的开始。"par"代表并行&#xff0c;意味着在这个标签内的所有动画将同时开始。 --><cTn id"5" presetID"2" presetClass"entr" presetSubtype"4" fill"hold&…

C语言指针速成下篇

c语言的指针下篇终于迎来了收尾&#xff0c;那么废话不多说&#xff0c;我们直接进入正题 指针访问数组 # include <stdio.h> int main () { int arr[ 10 ] { 0 }; // 输⼊ int i 0 ; int sz sizeof (arr)/ sizeof (arr[ 0 ]); // 输⼊ int * p arr //这…

在Tomcat中部署war包

1、准备war包 确保已经有一个有效的war包&#xff0c;该war包包含了web应用程序的所有内容&#xff1b; 2、停止tomcat服务器 在部署之前&#xff0c;确保tomcat服务器已经停止&#xff0c;进入tomcat的配置目录执行命令&#xff1a;[路径]/tomcat/conf&#xff1b; 在Linux…

Socket——向FTP服务器发送消息并获得响应

1、简介 Socket&#xff08;套接字&#xff09;是网络编程中用于描述IP地址和端口的一个抽象概念&#xff0c;通过它可以实现不同主机间的通信。套接字可以分为几种不同的类型&#xff0c;每种类型对应不同的协议和传输模式。 1.1、基本概念 IP地址&#xff1a;用于标识网络…

【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报 【格式】PDF版本 【关键词】罗兰贝格、供应链管理、运营提升 【核心观点】 - 甲方采取销售…

CBSD创建和管理bhyve容器Ubuntu@FreeBSD

bhyve介绍&#xff1a;bhyve&#xff1a;FreeBSD下的原生虚拟机管理器_freebsd 虚拟化平台bhyve-CSDN博客 两个bhyve的管理软件&#xff1a;使用bvm管理bhyve虚拟机管理系统FreeBSD-CSDN博客 vm-bhyve&#xff1a;bhyve虚拟机的管理系统FreeBSD-CSDN博客 现在&#xff0c;我…

从零开始做题:LSB

1 题目 2 解题 2.1 使用stegsolve工具 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc] └─$ java -jar Stegsolve.jar 2.1.1 发现R、G、B的plane0有隐藏信息 2.1.2 提取隐藏信息 2.1.3 save bin后得到二维码 2.1.4 QR Research得到flag 3 flag cumtctf{1sb_i4_s0_Ea4y}

9种慢慢被淘汰的编程语言...【送源码】

技术不断进步&#xff0c;我们使用的编程语言也不例外。 随着人工智能的兴起以及对编程语言使用的影响&#xff0c;我们更加关注哪些语言将在未来继续流行&#xff0c;哪些会被淘汰。 Python、Java 和 JavaScript 等多功能编程语言正在主导市场&#xff0c;而其他一些语言则逐…

kubernetes给指定用户分配调用k8s的api权限

文章目录 概要利用RBAC添加角色权限使用shell命令创建角色权限使用配置文件创建角色权限 调用k8s的api获取k8s账户的token 小结 概要 使用kubernetes部署项目时&#xff0c;有些特殊场景&#xff0c;我们需要在自己创建的pod里面调用k8s的api来管理k8s&#xff0c;但是需要使用…

某山词霸翻译js逆向分析

一、基础知识 1、post的几种发包的方式 2、query string和form data的区别 Query String Parameters&#xff1a; GET请求时&#xff0c;参数会以url string 的形式进行传递&#xff0c;即?后的字符串则为其请求参数&#xff0c;并以&作为分隔符。&#xff08;有时候pos…

修改 app id - 鸿蒙 HarmonyOS Next

修改项目 app id 后通过真机 build run 的时候抛出了如下异常; 项目中更改后的配置与真机的不匹配; {app: {bundleName: "com.xxxxxx.xxx_harmony",vendor: "xxxxxx",versionCode: 1,versionName: "3.5.00",icon: "$media:app_icon",…

有什么简单易上手的CRM系统推荐?五款CRM软件评测

在数字化时代&#xff0c;企业急需一个能全面展示客户、销售和分析数据的CRM系统。当然&#xff0c;简单易用的CRM系统成了企业首选。选择系统时&#xff0c;同时要关注它的实际功能是否满足需求&#xff0c;是否容易上手&#xff0c;能否根据企业需求灵活定制&#xff0c;能否…

一种自定义SPI通信协议

本文介绍一种自定义SPI通信协议。 项目开发过程中&#xff0c;有时候会涉及到主处理器或FPGA和MCU之间的SPI通信&#xff0c;涉及到通信就需要考虑通信协议&#xff0c;本文给出一种简单的通信协议。 1.协议格式 协议格式如下图。 其中&#xff0c;将40 bit划分为2大部分&am…

springboot加载注入bean的方式

在SpringBoot的大环境下&#xff0c;基本上很少使用之前的xml配置Bean&#xff0c;主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式&#xff0c;分为本地服务工程注解声明的bean和外部依赖包中的bean。 一、 springboot装配本地服务工程…