目录
前言
UDS(Unified Diagnostic Services)是一种基于ISO 14229标准的用于汽车诊断和通信的协议,它定义了一系列的服务和消息格式,使得不同厂家的诊断工具可以与汽车的ECU(电子控制单元)进行通信。在UDS协议中,刷写服务是其中的重要部分,它涉及到程序的下载和更新。下面将针对UDS 14229-1标准中的34、36、37服务标准讲解。
1. 34服务(RequestDownload)
功能描述:
34服务是请求下载服务,客户端(如诊断仪或刷写工具)利用此服务启动与服务器(ECU)之间的数据传输(下载)。主要用于向ECU请求下载数据,如软件更新包。
请求格式:
- SID:0x34
- 数据格式标识符(dataFormatIdentifier):1字节,高4位表示压缩方法,低4位表示加密方法。
- 地址和长度格式标识符(addressAndLengthFormatIdentifier):1字节,高4位表示memorySize参数占用的字节数,低4位表示memoryAddress参数占用的字节数。
- memoryAddress:请求刷写的首地址,占用的字节数由addressAndLengthFormatIdentifier的低4位决定。
- memorySize:请求刷写的字节长度,占用的字节数由addressAndLengthFormatIdentifier的高4位决定。
正响应格式:
- SID + 0x40:表示肯定响应。
- lengthFormatIdentifier:1字节,高4位表示maxNumberOfBlockLength参数占用的字节数,低4位默认0。
- maxNumberOfBlockLength:目标ECU允许传输的最大字节数。
负响应格式:
- 0x7F + SID + NRC:表示否定响应,NRC为错误响应码,指示具体错误原因。
Trace示例:
复制代码
请求:34 00 44 52 80 90 00 00 00 16 00 | |
响应:74 20 02 FF |
2. 36服务(TransferData)
功能描述:
36服务是传输数据服务,用于在客户端和服务器之间实际传输数据。在刷写过程中,它负责下载数据的传输与接收,并可能包括校验过程。
请求格式:
- SID:0x36
- blockSequenceCounter:数据传输计数器,从1开始,循环至0xFF后再从0开始。
- transferRequestParameterRecord:传输的数据,长度通常为maxNumberOfBlockLength - 2。
正响应格式:
- SID:0x36
- blockSequenceCounter:与请求中的相同。
- (无transferRequestParameterRecord参数,因为36服务是响应数据传输请求的)
负响应格式:
- 0x7F + SID + NRC:表示否定响应,NRC为错误响应码。
Trace示例:
复制代码
请求:36 01 XX XX ... | |
响应:36 01 |
3. 37服务(RequestTransferExit)
功能描述:
37服务是请求退出传输服务,用于终止并退出数据传输过程。在刷写完成后,客户端会发送此服务请求以结束数据传输会话。
请求格式:
- SID:0x37
正响应格式:
- 通常没有特定的正响应格式,因为服务的主要目的是通知ECU停止数据传输。
负响应格式:
- 0x7F + SID + NRC:表示否定响应,但在正常情况下,此服务不应引发否定响应。
Trace示例:
复制代码
请求:37 | |
(无特定响应,因为服务目的是终止会话) |
总结
UDS 14229-1标准中的刷写34、36、37服务共同构成了ECU刷写的完整流程。34服务用于请求下载,协商关键参数;36服务用于实际传输数据;37服务用于终止数据传输会话。这三个服务相互配合,实现了ECU程序的更新和升级。在实际应用中,还需要根据具体的ECU和刷写工具来配置相应的参数和处理流程。