UDS 诊断 - TransferData(传输数据)(0x36)服务

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)服务

一、 服务说明

客户端利用 TransferData(传输数据)服务从客户端向服务器(下载)或从服务器向客户端(上传)传输数据。

数据传输方式取决于前述 RequestDownload(请求下载)或 RequestUpload(请求上传)服务。如果客户端发出 RequestDownload,则待下载数据包含在 TransferData 请求消息中的 transferRequestParameter(传输请求参数)内。如果客户端发出的 RequestUpload,则待上传数据包含在 TransferData 响应消息中的 transferResponseParameter(传输响应参数)内。

TransferData 服务请求包含 blockSequenceCounter(快序列计数器),以便在请求一序列 TransferData 过程中 TransferData 服务失败时提高错误处理。收到 RequestDownload(0x34)或 RequestUpload(0x35)消息是,服务器的 blockSequenceCounter 应初始化为 1。这表示 RequestDownload 或 RequestUpload 消息之后的首个 TransferData 请求消息是从 blockSequenceCounter 1 开始。

二、请求消息

1. 请求消息定义

字节参数名称Cvt字节值
#1TransferData(传输数据) 请求 SIDM0x36
#2blockSequenceCounter(块序列计数器)M0x00 - 0xFF

#3

#n
transferRequestParameterRecord[] = [
transferRequestParameter#1

transferRequestParameter#m ]

C

U

0x00 - 0xFF

0x00 - 0xFF

C:如果正在下载,则此参数为强制参数。

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

定义
blockSequenceCounter(块序列计数器)
blockSequenceCounter(块序列计数器)参数值从 0x01 开始,第一个 TransferData 请求在 RequestDownload 或 RequestUpload 服务器之后。TransferData 请求每增加一次,参数值加 1。参数值为 0xFF 时,blockSequenceCounter(块序列计数器)翻滚并从 0x00 开始发出下一条 TransferData 请求消息。
示例:
- 如果下载数据要求 TransferData 请求被服务器正确接收和处理,但肯定响应消息未达到客户端,则客户端会认为应用层超时并重复相同的请求(包括同一 blockSequenceCounter(块序列计数器))。这样,服务器会接收重复 TransferData 请求并根据计入的 blockSequenceCounter(块序列计数器)确定 TransferData 请求重复。然后服务器不再重复写入数据,而是立即将肯定响应消息发送到服务器内存中。
- 如果下载数据要求的 TransferData 请求未被服务器正确接收,则服务器不会发出肯定响应消息。客户端会认为应用层超时并会重复相同的请求(包括同一 blockSequenceCounter)。这样,服务器会接收重复 TransferData 请求并根据计入的 blockSequenceCounter 确定该请求为新 TransferData 请求。然后服务器会处理服务并发送肯定响应消息。
- 如果上传数据要求的 TransferData 请求被服务器正确接收和处理,但肯定响应消息未到达客户端,则客户端会认为应用层超时并重复相同的请求(包括同一 blockSequenceCounter)。这样,服务器会接收重复 TransferData 请求并根据计入的 blockSequenceCounter 确定 TransferData 请求重复。然后一访问到之前提供的数据,服务器会立即再次向其内存发送肯定响应消息。
- 如果上传数据要求的 TransferData 请求未被服务器正确接收,则服务器不会发出肯定响应消息。客户端会认为应用层超时并会重复相同的请求(包括同一 blockSequenceCounter )。这样,服务器会接收重复 TransferData 请求并根据计入的 blockSequenceCounter 确定该请求为新 TransferData 请求。然后服务器会处理服务并发送肯定响应消息。
transferRequestParameterRecord(传输请求参数记录)
此参数记录包含服务器要求的支持数据传输的参数。参数格式和长度由车辆制造商规定。
示例:下载时,transferRequestParameterRecord 包括待传输的数据。

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称Cvt字节值
#1TransferData(传输数据)响应SIDM0x76
#2blockSequenceCounter(块序列计数器)M0x00 - 0xFF

#3

#n
transferResponseParameterRecord[] = [
transferResponseParameter#1

transferResponseParameter#m ]

C

U

0x00 - 0xFF

0x00 - 0xFF

C:如果正在上传,则此参数为强制参数。

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

定义
blockSequenceCounter(块序列计数器)
此参数是请求消息的 blockSequenceCounter 参数的反射。
transferResponseParameterRecord(传输响应参数记录)
此参数应包含客户端支持数据传输要求的参数。参数格式和长度由车辆制造商规定。
示例:下载时,transferResponseParameterRecord 参数可以包含服务器计算出的校验和。上传时,transferResponseParameterRecord 参数包含上传数据。下载时,transferResponseParameterRecord 参数不得重复 transferRequestParameterRecord。

四、受支持的 NRC

NRC说明
0x13消息不正确或格式无效
如果消息长度错误(如消息长度不符合肯定响应消息对 RequestDownload 服务回应的 maxNumberOfBlockLength 参数要求),则应发送此 NRC。
0x24请求序列错误
下列情况中,服务器应使用此响应码:
- 收到 RequestDownload 或 RequestUpload 服务请求时,RequestDownload 或 RequestUpload 服务未激活;
- RequestDownload 或 RequestUpload 服务激活,但服务器已接收到 RequestDownload 或 RequestUpload 服务中的 memorySize 参数确定的所有数据;
注:利用 BlockSequenceCounter 接收到的与其中一条历史 TransferData 请求消息等效的 TransferData 请求消息应可以被服务器接受。
0x31请求超过限值
下述情况下,应返回此 NRC:
- transferRequestParameterRecord 包含附加控制参数(如附加地址信息),但此控制信息无效。
- transferRequestParameterRecord 与 RequestDownload 或 RequestUpload 服务参数 maxNumberOfBlockLength 不符。
- transferRequestParameterRecord 不符合服务器的内存对齐限制。
0x71传输数据暂停
如果下载模块长度不符合 RequestDownload 服务的请求消息中发送的 memorySize 参数要求,则此 NRC 会被返回。
0x72一般编程故障
下载数据过程中,如果服务器在清除或编程永久性存储器(如快闪存储器)中的内存位置检测到错误,则此 NRC 会被返回。
0x73错误块序列计数器
如果服务器在序列 BlockSequenceCounter 中检测到错误,则此 NRC 会被返回。
注:利用 BlockSequenceCounter 接收到的与其中一条历史 TransferData 请求消息等效的 TransferData 请求消息应可以被服务器接受。
0x92 / 0x93电压过高 / 电压过低
如果在服务器的主电源接脚处测得的电压超出将数据下载到服务器永久性存储器(如快闪存储器)所需电压的可接受范围,则应发送此 NRC。

下为 0x36 服务的 NRC 处理。

0x36 服务的 NRC 处理

图例

1 如果正在执行 RequestUpload 服务,则最小长度必须为 2,如果正在执行 RequestDownload 服务,则 最小长度至少为 3(SI + BlockSequenceCounter + 最小 transferRequestParameterRecord)

本节示例见 UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务

Modbus协议中的0x15指令是写入文件记录(Write File Record)指令。下面是该指令的报文格式: 请求报文: | 字节位置 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ... | n-1 | n | |----------|---------|---------|---------|---------|---------|---------|---------|---------|--------|-----|---------|-------| | 内容 | 从站地址 | 功能码 | 文件号 | 起始地址 | 记录数量 | 数据长度 | 数据 | CRC低字节 | ... | CRC高字节 | | - 从站地址(Slave Address):指定了要操作的Modbus从站的地址。 - 功能码(Function Code):0x15,表示写入文件记录。 - 文件号(File Number):要写入的文件的编号。 - 起始地址(Starting Address):要写入的记录的起始地址。 - 记录数量(Record Quantity):要写入的记录数量。 - 数据长度(Data Length):要写入的数据的总字节数。 - 数据(Data):要写入的数据。 - CRC(Cyclic Redundancy Check):用于校验报文的完整性和正确性。 响应报文: | 字节位置 | 0 | 1 | 2 | 3 | 4 | ... | n-1 | n | |----------|---------|---------|---------|---------|---------|-----|------|-------| | 内容 | 从站地址 | 功能码 | 文件号 | 起始地址 | 记录数量 | ... | CRC低字节 | CRC高字节 | - 从站地址(Slave Address):与请求报文中的从站地址相同。 - 功能码(Function Code):与请求报文中的功能码相同。 - 文件号(File Number):与请求报文中的文件号相同。 - 起始地址(Starting Address):与请求报文中的起始地址相同。 - 记录数量(Record Quantity):与请求报文中的记录数量相同。 - CRC(Cyclic Redundancy Check):用于校验报文的完整性和正确性。 请注意,报文中的CRC字段是通过对报文内容进行CRC校验计算得到的校验值,用于验证报文的完整性。具体的CRC计算方法可以参考Modbus协议的相关文档和规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值