UDS服务基础篇之服务

admin 2024年4月22日05:54:02评论2 views字数 3031阅读10分6秒阅读模式

点击上方蓝字谈思实验室

获取更多汽车网络安全资讯

UDS服务基础篇之服务

01

服务功能

功能描述

根据ISO14119-1标准中所述,诊断服务36服务主要用于实现Client向Server端传输下载的数据或者Server端向Client端上传数据。

36服务的传输方向主要取决于在此之前执行的是34服务(下载传输)还是35服务(上传传输)。如果执行的是34服务,则36服务传输的数据方向则用于Client向Server端下载数据,如果是35服务则36服务的传输方向是从Server端上传数据至Client端。

下列文中使用到的Client可直接理解为上位机Tester,Server可直接理解为接受Tester诊断请求的ECU。

应用场景

一般而言,对于36诊断服务,主要应用场景为以下场合:

  • 在进行软件刷写的过程中,执行完34服务之后便会通过36服务来进行相关数据的传输以便完成软件下载流程;

  • 在进行软件上传的过程中,执行完35服务之后便可以通过36服务完成数据上传的操作,实际情况下一般较为少用;

36服务控制基本原理:

如下图1所示,针对36服务的通信控制过程会经过如下几个AUTOSAR BSW模块进行处理,然后完成最终的数据传输控制,具体步骤如下:

  • Client 发送诊断指令给到Server,Server接收到指令后通过确认请求block sequence,长度等信息;

  • 如果相关诊断请求长度,格式,blocksequence等信息没有问题则回复正响应,否则回复负响应;

  • 值得注意的是36服务没有subfunction。

UDS服务基础篇之服务

图1 36服务控制流程图

02

服务请求

服务请求是Client发送给到Server的诊断服务指令。

请求格式

按照ISO14229-1标准所述,如下图2所示为36服务诊断请求格式,即上述36服务控制原理中诊断服务请求格式:

UDS服务基础篇之服务

图2 36诊断服务请求格式

上述参数TransferData Request SID,blockSequenceCounter,transferRequestParameterRecord这几个参数较为关键,下图3中各参数解释如下:

UDS服务基础篇之服务

图3 36诊断服务请求格式说明

注意事项:

  • 如果发送的36诊断服务已被Server端接收并处理但是没有给到Client端正响应,那么Client一般会有超时处理然后重复上次同样的数据传输请求,此时Server端将接收同样的blockSequenceCounter但是同样会给到正响应,只不过不会往Memory中写入重复的值;

  • 如果下载数据的请求未能够及时被Server端接收到, 那么Client一般会有超时处理然后重复上次的下载数据请求,Server端收到之后便会认为这是一次新的数据传输请求并给出正响应;

  • 如果上传数据的传输请求已被Server端接收到并处理,但是Client端没有收到正响应,那么Client端一般会有超时处理然后重复上次同样的数据传输请求,Server端仍然会继续处理并最终回复正响应;

  • 如果上传数据的传输请求未能够被Server端接收到,Server端将不会发送正响应。Client端一般会有超时处理然后重复同样的传输请求,Server端收到后便会继续处理并给出正响应。

请求实例

以如下请求下载请求为例,给大家讲解下下载请求的诊断服务如何组成与发送:

  • TransferData Request SID= 0x36, 表示数据传输的Service ID;

  • blockSequenceCounter ==0x1,表示这是第一次Block传输;

  • transferRequestParameterRecord 表示传输下载的请求数据;

UDS服务基础篇之服务

图4 36服务下载请求实例

注意事项:如果是36服务的上传服务,那么transferRequestParameterRecord的值一般为空。

03

服务响应

服务响应是针对Client对Server诊断请求的响应。

正响应格式

如下图5所示,为36诊断服务的正响应格式:

UDS服务基础篇之服务
UDS服务基础篇之服务

图5 36诊断服务正响应格式

从上图中可以看出,36诊断服务的正响应由以下三个部分组成:

  • TransferData Response SID:表示36服务对应的诊断服务ID,即为0x36+0x40 = 0x76;

  • blockSequenceCounter:表示36服务下载的block ID编号,默认是从01开始,取决于36诊断请求中的block ID数值;

  • transferResponseParameterRecord:如果是下载服务,那么一般回复的值为Server端接收Client数据的CRC结果或者没有值,不应该与下载请求的数据内容一样,如果是上传服务,那么这部分就是表示待上传至Client端的数据。

正响应实例

如下图6所示,为上述请求下载示例图4所对应的正响应:

  • TransferData Response SID:该值为0x76,表示36服务的正响应;

  • blockSequenceCounter:该值设定为0x01,与36服务的发送请求一致;

UDS服务基础篇之服务

图6 36服务正响应示例

注意事项:对于下载服务,36服务的正响应一般不会包含transferResponseParameterRecord这个参数,但如果是上传服务,那么此时transferResponseParameterRecord就会表示待上传的值。

负响应NRC支持

绝大多数情况下,Server针对Client的请求都会给到正响应,比如发生重启前需确保整车处于安全状态,如引擎熄火,车速不能超过3km/h等,或者为了防止不按照诊断请求格式进行请求,那么Server需要通过某种方式来告诉Client执行不成功的原因在哪里以便于调查问题直至得到正响应。

因此ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式:7F +SID + NRC。

其中NRC全称为Negetive Responce Code,每个NRC具有唯一的含义来代表当前诊断请求错误的原因所在。当然每个诊断服务支持的NRC不尽相同,具体支持的NRC需要参考ISO14229-1标准文档,对于36服务而言支持的NRC如下图:

UDS服务基础篇之服务
UDS服务基础篇之服务

图7 36服务NRC支持

  • 当发送报文长度或者格式不对时,则Server会回复"7F 36 13";

  • 例如当下载过程发送的Block Sequence Number不连续或者不正确时,Server将会回复“7F 36 24”来告诉请求者检查Block Sequence Counter;

  • 当transferRequestParameterRecord包含无效的信息或者传输的Block数目超过34或者35服务的传输请求时规定大小时,则Server会回复“7F 36 31”;

  • 当传输的数据大小与请求下载服务的Memory Size不一致时,则Server会回复"7F 36 71";

  • 当在传输下载数据的过程中出现的Flash相关错误,则Server会回复“7F 36 72”;

  • 当在传输过程中如果出现Block Sequence Counter不一致或者不连续的情况,则Server会回复“7F 36 73”,,值得注意的时如果时相同的block sequence counter则是被允许的;

  • 如果在下载过程中出现电压过高或者过低时,那么Server会回复“7F 36 92/93, 当然前提是要有ADC检查”;

上述NRC也存在对应的优先级,因此小T将对应的36服务NRC优先级展示如下图8所示:

UDS服务基础篇之服务

图8 36服务NRC优先级

 线下交流 

 专业社群 

UDS服务基础篇之服务

 精品活动推荐 

UDS服务基础篇之服务
UDS服务基础篇之服务
UDS服务基础篇之服务

原文始发于微信公众号(谈思实验室):UDS服务基础篇之服务

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月22日05:54:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   UDS服务基础篇之服务https://cn-sec.com/archives/2625405.html

发表评论

匿名网友 填写信息