0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UDS诊断服务介绍之31服务

jf_EksNQtU6 来源: ADAS与ECU之吾见 2023-08-08 10:48 次阅读

正文

服务功能

功能描述

根据ISO14119-1标准中所述,诊断服务31服务主要用于实现针对某类测试场景,非正常工况下的程序活动以及其他擦除内存等连续性操作步骤的集合。

在某些情况下2F服务的基本功能也是能够通过31服务来实现,可以理解2F实现的功能31服务均可以实现,不过如果能够用2F实现的功能来用31服务,未免有些大材小用,因此31服务则是用于更为复杂的输入输出控制场景,而2F服务则可用于较为简单常见的输入输出控制场景。

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

应用场景

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

比如用于某sensor特定工况下的操作集合,如进行摄像头或者雷达内参标定流程;

在整车制造过程中较为常见的便是某Sensor的外参标定工位,在该工位中需要用到31服务开启标定例程,标定流程结束后也能够31服务获取标定例程的最终结果;

如雷达使用过程中的非正常工况下的发波波形配置调整可以通过31服务来实现;

在进行UDS刷写过程中可以通过31服务来触发内存的擦除操作等;

上述这些应用场景较为常见,这里就不一一列举。

除了在哪些应用场景下使用,在此还需要针对31服务提出如下几点注意事项:

31服务针对同一控制场景一般可分为开始,停止,获取结果三个过程,这三个过程并不是同时存在,是否需要同时存在完全可以客户自定义;

31服务针对每一个控制场景均可以一个Routine ID来进行唯一的区别,因此不同的控制场景应采用唯一的Routine ID来进行区别;

通过AUTOSAR工具链配置的31 Routine回调函数命名时,函数名除了说明其基本功能以外,也需要将对应的Routine ID体现在函数名称中,这样便于搜索排查问题,是一种不错的代码实践;

对于31服务涉及的回调函数,一般不建议走RTE,主要是从代码可维护角度而言,更加简洁明了,实现效率高,走RTE接口还需增加额外的工作量,没有必要且容易出错。

31服务控制基本原理:

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

Client 发送诊断指令给到Server,Server接收到指令后通过确认Routine Type来决定调用不同的回调函数;

在每个回调函数中便可以实现客户自定义的控制场景,具体场景就是要根据客户需求来自定义来实现的。

16ef8b3c-3508-11ee-9e74-dac502259ad0.png

图1 31服务控制流程图

服务请求

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

请求格式

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

170736e2-3508-11ee-9e74-dac502259ad0.png

图2 31诊断服务请求格式

上述参数routineControlOptionRecord是可选项,在项目中可自定义,如传递相关的一些控制参数等。除此之外,就是SID,SubFunction,routineIdentifier这三个参数则必选,下图3中各参数解释如下:

1723fbd8-3508-11ee-9e74-dac502259ad0.png

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

请求实例

开启Routine(01)

以开启Routine为例,假设Routine ID为0201,该Routine则用于进行短时间的输入输出控制, 31服务诊断请求开启Routine实例如下图4所示:

1733fd6c-3508-11ee-9e74-dac502259ad0.png

图4 31服务开启Routine请求实例

停止Routine(02)

以停止Routine为例,31服务诊断停止Routine请求实例如下图5所示:

17586148-3508-11ee-9e74-dac502259ad0.png

图5 31服务停止Routine请求实例

获取Routine结果(03)

以获取Routine结果为例,31服务诊断获取Routine结果请求实例如下图5所示:

1786238a-3508-11ee-9e74-dac502259ad0.png

图6 31服务获取Routine结果请求实例

服务响应

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

正响应格式

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

17aaf87c-3508-11ee-9e74-dac502259ad0.png

图7 31诊断服务正响应格式

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

Response ID:该参数固定为SID+0x40 = 0x71;

SubFunction:该参数为上述诊断请求格式中Routine Type保持一致;

routineIdentifier: 该参数与诊断服务请求中的routineIdentifier中保持一致;

routineInfo:一般可以理解为客户自定义,作为可选项;

routineStatusRecord: 同上;

正响应实例

开启Routine(01)

如下图8所示,为上述31 01 02 01请求示例所对应的正响应:

17b3cbc8-3508-11ee-9e74-dac502259ad0.png

图8 31 01正响应示例

其中,0x01就是跟诊断请求中31 01中的RoutineType保持一致即可,同时routineStatusRecord则是根据客户需求进行自定义回复。

停止Routine(02)

如下图9所示,为上述31 02 02 01请求示例所对应的正响应:

17e4be72-3508-11ee-9e74-dac502259ad0.png

图9 31 02正响应示例

其中,0x02就是跟诊断请求中31 02中的RoutineType保持一致即可,同时routineStatusRecord则是根据客户需求进行自定义回复。

获取Routine结果(03)

如下图10所示,为上述31 03 02 01请求示例所对应的正响应:

180a0de4-3508-11ee-9e74-dac502259ad0.png

图10 31 03正响应示例

其中,0x03就是跟诊断请求中31 03中的RoutineType保持一致即可,同时routineStatusRecord则是根据客户需求进行自定义回复。

负响应NRC支持

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

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

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

1844b7e6-3508-11ee-9e74-dac502259ad0.png

185ab3f2-3508-11ee-9e74-dac502259ad0.png

图11 31服务NRC支持

当诊断请求的subfuntion不在Server支持的范围内时,则Server会回复”7F 31 12“;

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

例如当尝试请求复位时且当前车速条件不满足,此时Client发送诊断请求时,Server将会回复“7F 31 22”来告诉请求者当前进入编程会话的条件不满足,请再次检查进入编程会话的条件;

当某个routine还没有Start时便请求结果或者中止Routine时,那么Server会回复"7F 31 24";

当routineIdentifier或者可选的routineControlOptionRecord中均超出规定的范围时,则Server会回复“7F 31 31”;

当该routineIdenfier设置了安全访问等级时,如果未解锁便执行该31服务,则Server会回复"7F 31 33";

当31服务用于擦除NVM时,在此过程中如果出现失败那么Server便会回复"7F 31 72"

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

1881125e-3508-11ee-9e74-dac502259ad0.png

图12 31服务NRC优先级

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2996

    浏览量

    73868
  • AUTOSAR
    +关注

    关注

    10

    文章

    350

    浏览量

    21464
  • ecu
    ecu
    +关注

    关注

    14

    文章

    880

    浏览量

    54395
  • 上位机
    +关注

    关注

    27

    文章

    930

    浏览量

    54721

原文标题:UDS服务基础篇之31服务

文章出处:【微信号:谈思实验室,微信公众号:谈思实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    UDS在CAN和以太网上的实现方案

    JTAG是针对MCU或者SOC这种芯片的调试接口协议,而UDS更像是针对整个ECU的调试接口。UDS简单来说是一种Client/Server的通信服务,即Tester(诊断仪)向ECU
    发表于 11-28 09:56 5252次阅读
    <b class='flag-5'>UDS</b>在CAN和以太网上的实现方案

    TSMaster 的 CAN UDS 诊断操作指南(上)

    TSMaster可以少代码甚至零代码就可以完成诊断流程开发,诊断开发人员只需要熟悉诊断流程,就能打通研发、产线、售后整条链路环节。TSMaster的UDS
    的头像 发表于 06-08 08:21 2051次阅读
    TSMaster 的 CAN <b class='flag-5'>UDS</b> <b class='flag-5'>诊断</b>操作指南(上)

    TSMaster 的 CAN UDS 诊断操作指南(下)

    上期,我们主要介绍UDS诊断模块的创建以及TSMaster基础诊断配置。很多客户表示意犹未尽。因此我们将继续带来《TSMaster的CANUDS
    的头像 发表于 06-18 08:21 1614次阅读
    TSMaster 的 CAN <b class='flag-5'>UDS</b> <b class='flag-5'>诊断</b>操作指南(下)

    Aurix TC364D是否可以通过某些UDS服务停用HSM?

    无法更新,因为 HSM 无法验证。 我们无法连接 JTAG 或其他 UCB,因此唯一的办法是通过诊断插座(UDS 服务)停用它。 请问谁有经验? 非常感谢。
    发表于 05-20 07:19

    UDS诊断命令备忘录

    UDS实践性强,逻辑复杂,很多服务非要体验过一次才能理解,导致包括我在内的初学者感觉晦涩难懂,不明觉厉,因此将自己的理解写下来、整理下来,与君共勉。零、UDS诊断命令备忘录一、简介
    发表于 08-26 16:09

    OBDII与UDS的区别是什么

    PrimaryECU在已经开发完UDS诊断的基础上增加OBD II诊断一、OBD II与UDS的区别?这里主要介绍
    发表于 02-23 06:55

    基于MM32F0140系列MCU实现UDS Bootloader的设计

    (Unified Diagnostic Services,统一诊断服务)是一种用于汽车电子控制器 ECU (Electronic Control Units) 环境下的一种诊断通信协议,可实现
    发表于 09-15 16:35

    【野火】瑞萨RA MCU创意氛围赛+ 基于CAN总线的UDS诊断升级MCU /bootloader/UDS诊断/14229/15765

    基于can总线的UDS软件升级 最近学习UDS诊断协议(ISO14229),是一项国际标准,为汽车电子系统中的诊断通信定义了统一的协议和服务
    发表于 06-13 01:26

    UDS诊断协议在纯电动汽车电机控制器中的应用说明

      针对UDS诊断协议在电动汽车电机控制器中的应用问题,利用UDS诊断协议中各项服务的功能,同时根据电机控制器的功能需求,实现
    发表于 04-02 17:16 8次下载

    UDS基础知识介绍

    UDS(Unified Diagnostic Services 统一的诊断服务)是一种通用的诊断服务标准,用于汽车电子控制单元(ECU)的
    的头像 发表于 05-30 10:57 1.3w次阅读
    <b class='flag-5'>UDS</b>基础知识<b class='flag-5'>介绍</b>

    UDS常用诊断服务

    UDS诊断概述 UDS(Unified Diagnostic Services,统一的诊断服务诊断
    的头像 发表于 06-12 10:36 1.1w次阅读
    <b class='flag-5'>UDS</b>常用<b class='flag-5'>诊断</b><b class='flag-5'>服务</b>

    UDS19服务中04子服务:读取快照数据

    诊断通信的需求规范,也就是UDSUDS主要应用于OSI七层模型的第七层——应用层,它支持的汽车总线包括:CAN、LIN、FlexRay、Ethernet及K-L
    的头像 发表于 04-23 09:32 2309次阅读
    <b class='flag-5'>UDS</b><b class='flag-5'>之</b>19<b class='flag-5'>服务</b>中04子<b class='flag-5'>服务</b>:读取快照数据

    UDS诊断服务响应规则介绍

    15031,ISO 15765,还有我们熟悉的ISO 14229就是UDS协议,在协议里面定义了诊断的请求,诊断响应的报文格式,以及ECU怎样处理诊断请求报文,以及
    的头像 发表于 08-15 17:00 3838次阅读
    <b class='flag-5'>UDS</b><b class='flag-5'>诊断</b><b class='flag-5'>服务</b>响应规则<b class='flag-5'>介绍</b>

    汽车UDS协议栈与XCP协议栈

    UDS协议栈 汽车UDS协议栈是一种用于汽车电子控制单元(ECU)之间进行诊断和通信的标准协议。UDS(Unified Diagnostic Services)协议定义了一组
    的头像 发表于 10-27 16:35 4015次阅读
    汽车<b class='flag-5'>UDS</b>协议栈与XCP协议栈

    UDS29服务:认证服务

    汽车工业的很多领域都有严格的国际标准,其中针对车载诊断的ISO14229规定了车载诊断服务的通用需求(UDS),UDS主要应用于OSI模型的
    的头像 发表于 11-30 08:24 2059次阅读
    <b class='flag-5'>UDS</b><b class='flag-5'>之</b>29<b class='flag-5'>服务</b>:认证<b class='flag-5'>服务</b>