UDS 诊断 - RequestFileTransfer(请求文件传输)(0x38)服务

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 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务
UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务
UDS 诊断 - DynamicallyDefineDataIdentifier(动态定义数据标识符)(0x2C)服务
UDS 诊断 - WriteDataByIdentifier(按标识符写数据)(0x2E)服务
UDS 诊断 - WriteMemoryByAddress(按地址写内存)(0x3D)服务
存储数据传输功能单元
UDS 诊断 - ClearDiagnosticInformation(清除诊断信息)(0x14)服务
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(1) - 服务说明
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(2) - 请求消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(3) - 响应消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(4) - 示例
输入输出控制功能单元
UDS 诊断 - InputOutputControlByIdentifier(按标识符的输入输出控制)(0x2F)服务
例程功能单元
UDS 诊断 - RoutineControl(例程控制)(0x31)服务
上传下载功能单元
UDS 诊断 - RequestDownload(请求下载)(0x34)服务
UDS 诊断 - RequestUpload(请求上传)(0x35)服务
UDS 诊断 - TransferData(传输数据)(0x36)服务
UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务
UDS 诊断 - RequestFileTransfer(请求文件传输)(0x38)服务

一、 服务说明

客户端利用 requestFileTransfer(请求文件传输)服务从客户端向服务器或从服务器向客户端(下载或上传)传输文件数据。另外,此项服务可以检索文件系统的相关信息。

其旨在作为 RequestDownload 和 RequestUpload 服务的替代方案,以便在服务器利用系统存储数据时能够支持数据上传和下载功能。配置文件系统的下载或上传程序时,应使用 RequestFileTransfer 服务代替 RequestDownload 或 RequestUpload 服务。实际的数据传输和数据传输终止可以利用 TransferData 和 RequestTransferExit 服务执行,使用方法捅 RequestDownload 或 RequestUpload。这项服务还包括文件删除功能或服务器的文件系统索引功能。对于这种用例,TransferData 和 RequestTransferExit 服务不适用。

服务器收到 RequestFileTransfer 消息后,应在其发送肯定响应消息之前才去必要行动接收或传输数据。

二、请求消息

1. 请求消息定义

字节参数名称Cvt字节值
#1requestFileTransfer(请求文件传输)请求 SIDM0x38
#2modeOfOperation(运行模式)M0x01 - 0x05

#3
#4
filePathAndNameLength[
byte#1(MSB)
byte#2(LSB) ]

M
M

0x00 - 0xFF
0x00 - 0xFF

#5

#5+n-1
filePathAndName = [
byte#1(MSB)


byte#n ]

M

C1

0x00 - 0xFF

0x00 - 0xFF
#5+ndataFormatIdentifier(数据格式标识符)C20x00 - 0xFF
#5+n+1fileSizeParameterLength(文件大小参数长度)C20x00 - 0xFF

#5+n+2

#5+n+2+k-1
fileSizeUnCompressed = [
byte#1(MSB)

byte#k ]

C2

C2,3

0x00 - 0xFF

0x00 - 0xFF

#5+n+2+k

#5+n+1+2k
fileSizeCompressed = [
byte#1(MSB)

byte#k ]

C2

C2,3

0x00 - 0xFF

0x00 - 0xFF

C1:消息参数长度(字节数)由 filePathAndNameLength 参数决定。

C2:是否使用这些参数取决于 modeOfOperation 参数。

C3:消息参数长度(字节数)由 fileSizeParameterLength 决定。

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

定义
modeOfOperation(运行模式)
此数据参数定义了 filePathAndName(文件路径和名称)参数中所示的文件或目录该应用的运行方式。
filePathAndNameLength(文件路径和名称长度)
定义了 filePath(文件路径)参数的长度字节。
filePathAndName(文件路径和名称)
定义了服务器的文件系统位置,在此处,可以依据 modeOfOperation(运行模式)参数添加,删除,替代或读取文件。
另外,此参数还包含作为部分文件路径应添加,删除,替代或读取的文件的文件名。
如果 modeOfOperation 参数等于 0x05(readDIr),则此参数指示要读取的目录。参数的每一字节应采用 ASCII 格式编码。
dataFormatIdentifier(数据格式标识符)
此数据参数是一个单字节值,每个半字节均单独编码。搞笑半字节指定 ”compressionMethod(压缩法)“,低效半字节指定 ”encryptingMethod(加密法)“。字节值 0x00 不得使用压缩法或加密法。
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),则请求消息中不得包含此参数。

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称Cvt字节值
#1RequestFileTransfer(请求文件传输)响应SIDS0x78
#2modeOfOperation(运行模式)M0x01 - 0x05
#3LengthFormatIdentifier(长度格式标识符)C10x00 - 0xFF

#4

#4+(m-1)
maxNumberOfBlockLength[] = [
byte#1(MSB)

byte#m ]

C1,2

C1,2

0x00 - 0xFF

0x00 - 0xFF
#4+mdataFormatIdentifier(数据格式标识符)C10x00 - 0xFF

#4+m+1
#4+m+2
fileSizeOrDirInfoParameterLength[
byte#1(MSB)
byte#2(LSB)]

C1
C1

0x00 - 0xFF
0x00 - 0xFF

#4+m+3

#4+m+3+k-1
fileSizeUncompressedOrDirInfoLength = [
byte#1(MSB)

byte#k]

C1,3

C2,3

0x00 - 0xFF

0x00 - 0xFF

#4+m+3+k

#4+m+3+2k-1
fileSizeCompressed = [
byte#1(MSB)

byte#k]

C1,3

C2,3

0x00 - 0xFF

0x00 - 0xFF

C1:是否使用这些参数取决于 modeOfOperation 参数。

C2:消息参数长度(字节数)由 fileSizeOrDirInfoParameterLength 参数决定。

C3:消息参数长度(字节数)由 LengthFormatIdentifier 参数决定。

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

定义
modeOfOperation(运行模式)
此参数是请求值的回响。
lengthFormatIdentifier(长度格式标识符)
定义了 maxNumberOfBlockLength(最大信息组长度)参数的长度(字节数)。
如果 modeOfOperation 参数等于 0x02(DeleteFile),则响应消息中不得包含此参数。
maxNumberOfBlockLength(最大信息组长度)
上传数据时,requestFileTransfer(请求文件传输)肯定响应消息利用此参数通知客户端其发出的每条 transferData(传输数据)请求消息中应包含多少数据字节(maxNumberOfBlockLength)或服务器发出的 TransferData 肯定响应包含了多少数据字节。此长度反应了完整的消息长度,包括 TransferData 请求消息或肯定响应消息中出现的服务器标识符和数据参数。该参数允许客户端在开始向服务器传输数据之前适应服务器的接收缓冲大小或在上传数据时指出每条 TransferData 肯定响应中的数据字节大小。服务器接收的 TransferData 请求长度须与其报告的 maxNumberOfBlockLength 长度相等。TransferData 请求长度与 maxNumberOfBlockLength 间的允许公差(如有)可以视特定服务器而定。
注:指定信息组内的最后一天 TransferData 请求可能要比 maxNumberOfBlockLength 短。服务器不得写入 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),则响应消息中不得包含此参数。

四、 modeOfOperation(运行模式)值的定义

下表为 modeOfOperation 参数值的定义。

字节值说明
0x00保留
0x01AddFile(添加文件)
该值应用于添加 filePathAndName(文件路径和名称)参数中规定的文件(下载)。
0x02DeleteFile(删除文件)
该值应用于删除 filePathAndName 参数中规定的文件。
0x03ReplaceFile(替换文件)
该值应用于替换 filePathAndName 参数中规定的文件(下载)。如果文件未存储在该位置,则应添加文件。
0x04ReadFile(读取文件)
该值应用于读取 filePathAndName 参数规定的位置处的文件(上传)。
0x05ReadDir(读取目录)
该值应用于读取 FilePathAndName 参数规定的目录。该值意味着请求未包含文件名。
0x06 - 0xFF保留

五、受支持的 NRC

NRC说明
0x13消息不正确或格式无效
0x22条件不正确
在下载或上传数据过程中如果服务器接收到此项服务请求,或者,如果不满足执行此项服务的其他条件,则 NRC 会被返回。
0x31请求超过限值
下属情况下,应返回此 NRC:
- 特定 dataFormatIdentifier 无效;
- 特定 modeOfOperation 无效;
- 特定 fileSizeParameterLength 无效;
- 特定 filePathAndN阿么Length 无效;
- 特定 fileSizeUncompressed 无效;
- 特定 fileSizeCompressed 无效;
- 特定 filePathAndName 无效。
0x33安全访问被拒绝
如果接收到此项服务请求时服务器比较安全(针对支持 SecurityAccess 服务的服务器),则此 NRC 会被退回。
0x70不接受上传下载
该 NRC 表示由于某些故障条件无法下载到服务器内存。

下图为 0x38 服务 NRC 的处理。

0x38 服务 NRC 的处理

图例

1 最小长度:5 字节(SI + modeOfOperation + filePathAndNameLength + filePathAndName_byte#1)

2 消息参数的有效性检查取决于 modeOfOperation 参数。

3 最大长度可以利用 fileSizeParameterLength 和 filePathAndNameLength 计算。

六、示例

1. 假设

本小节说明了信息流举例的适用条件。

注:本示例仅限于 requestFileTransfer 和 requestFileTransfer 肯定响应的说明。本文中的 TransferData 和 RequestTransferExit 应用与 RequestDownload 和 RequestUpload 过程中应用这些服务的原理相同,因此,描述下载/上传序列的示例同样适用。

下表定义了 RequestFileTransfer(请求文件传输)值。

数据参数名称数据参数值数据参数说明
modeOfOperation(运行模式)0x01AddFile(添加文件)
filePathAndNameLength(文件路径和名称长度)0x001EfilePathAndName 参数的长度为 30。
filePathAndName(文件路径和名称)“D:\mapdata\europe\germany1.yxz”路径包括文件名。
dataFormatIdentifier(数据格式标识符)0x11compressionMethod = 0x1X;
encryptionMethod = 0xX1
fileSizeUnCompressed(文件大小未压缩)0xC350
fileSizeUncompressed(文件大小未压缩)0xC35050 千字节
fileSizeCompressed(文件大小压缩)0x753030 千字节
fileSizeParameterLength(文件大小参数长度)0x02两个文件大小参数的长度均为 2 字节。

2. 请求文件传输

req  38 
	 01 - modeOfOperation
	 00 1E - filePathAndNameLength
	 44 3A 5C 6D 61 70 64 61 74 61 ... 7A - filePathAndName(30 bytes)
	 11 - dataFormatIdentifier
	 02 - fileSizeParameterLength
	 C3 50 - fileSizeUnCompressed
	 75 30 - fileSizeCompressed
resp 78 
	 01 - modeOfOperation
	 02 - lengthFormatIdentifier
	 C3 50 - maxNumberOfBlockLength
	 11 - dataFormatIdentifier
### UDS诊断协议中的0x38服务 #### 服务名称与功能 在UDS (Unified Diagnostic Services) 协议中,服务标识符 `0x38` 被定义为“测试仪自检请求”。此服务允许外部测试设备向车辆的电子控制单元(ECU)发送指令,要求其执行一系列内部自我检测操作。该过程旨在验证ECU及其连接传感器和执行器的功能状态。 #### 请求结构 当发出 `0x38` 测试仪自检请求时,数据帧通常只包含服务ID本身而不附带额外参数[^1]: ```plaintext Request: [0x38] ``` 然而,在某些应用场景下可能会附加子函数(Sub-function),用于指定更详细的测试选项或配置。具体实现取决于制造商的要求和技术文档说明。 #### 响应解析 对于成功的响应,ECU会返回一个肯定确认(KPositive Response),其中包括原始的服务ID和服务完成的状态信息。如果存在错误,则返回带有相应否定响应码(Negative Response Code, NRC)的信息给测试工具。 成功回应示例: ```plaintext Response: [0x78] // 正常情况下,这是对0x38请求的成功回复 ``` 失败回应可能如下所示(假设由于未支持的操作而产生的拒绝): ```plaintext Negative Response: [0x7F][0x38][0x12] // 这里'0x12'表示具体的NRC值 ``` #### 实际应用案例 实际使用过程中,技术人员可以通过专用软件界面触发此类命令,并依据反馈评估目标系统的健康状况。例如,在维修车间环境中,技师可以利用这一特性快速排查硬件层面的问题所在;而在开发阶段,工程师们也能借此确保新设计的产品符合预期性能指标[^2]。 #### 可能遇到的问题及解决办法 - **问题**: ECU不识别来自测试仪器的`0x38`请求- **原因分析**: 可能是因为当前模式不允许运行全面自检流程,或者是固件版本较低不具备此项能力。 - **建议措施**: 检查并切换至适当的工作模式(如编程/扩展诊断模式), 或者更新到最新版固件后再试。 - **问题**: 收到了未知的负响应代码。 - **原因分析**: 不同厂商之间可能存在定制化的NRC编码方案。 - **建议措施**: 查阅对应车型的手册资料获取确切含义解释,必要时联系供应商寻求技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值