UDS 服务 Service 0x31 - RoutineControl
1.请求格式
RoutineControl (31服务) ,用于对主机厂定义的一些特定程序的控制操作(启动程序、停止程序、请求运行结果)。关于31服务的请求格式如下:
(1)第2个字节routineControlType用于指定对程序的操作动作,其可选项如下(一般用得比较多的是01子服务):
01:startRoutine(启动程序);
02:stopRoutine(停止程序);
03:requestRoutineResults(请求程序的运行结果)
(2)第3、4字节routineIdentifier表示指定的程序ID;这些特定的程序信息一般由车厂规定释放;一般会在诊断调查表中体现。比如针对ECU的升级,一般需要指定以下几个特定的程序功能(具体ID由车厂规定):
程序名+功能描述
CheckProgrammingPreconditions(编程条件检查) 该程序用于对ECU升级条件(如车速信息等)的判断,在ECU的BootLoader与APP程序中一般都要有该程序功能的定义。一般用于进入编程会话之前。
CheckAppSwAppDataValidity(检查数据的有效性,如CRC校验) 一般用于对升级数据中的每个块信息的CRC校验;ECU会将接收到的数据进行CRC计算,并与诊断仪计算发送过来的CRC进行比对;确保数据的准确性。
EraseFlashMemory(擦除Flash内存) 用于对此次升级要用到的内存空间进行擦除操作。一般用于请求APP数据下载(34服务)之前。
CheckProgrammingDependency(编程兼容性的检查 ) 用于升级完成后对升级信息的兼容性检查,例如对升级文件产品型号的检查,必要的逻辑块是否存在的检查等操作。一般用于完成所有数据的升级之后。
(3)之后的数据代表可选记录参数routineControlOptionRecord;一般用于携带其他信息,如程序的启动条件、停止条件等;可根据实际需要进行使用;一般比较少用到。
2.肯定响应格式
ECU在收到对应的程序动作请求后,返回的肯定响应格式如下:
其中,routineStatusRecord是可选参数,用于在执行相应程序动作后,返回ECU相关的信息(如请求31 02服务请求停止时ECU可以通过该参数返回该程序总运行时间等信息);可根据实际需要进行使用;一般比较少用到。
3. 具体参数的配置
1.DCM模块应该实现UDS服务例程控制(0x31),用于子功能startRoutine、stopRoutine和requestsRoutineResults。测试人员可以使用UDS服务0x31来启动、停止或获取由2字节routineldentifier标识的例程的结果。DCM模块配置包含DCM支持的routineldentifier列表(请参阅配置参数DcmDspRoutineldentifier)。对于每个“例程ID”,DCM配置规定:
- 与此routineIdentifier关联的函数Xxx_Start()。 (配置参数 DcmDspStartRoutineFnc and DcmDspRoutineUsePort)
- 请求和响应中可用的信号列表 。(配置参数 DcmDspStartRoutineIn and DcmDspStartRoutineOut)
- 与此routineIdentifier关联的函数Xxx_Stop()。(配置参数 DcmDspStopRoutineFnc and DcmDspRoutineUsePort)
- 请求和响应中可用的信号列表 。(配置参数 DcmDspStopRoutineIn and DcmDspStopRoutineOut)
- 与此routineIdentifier关联的函数Xxx_RequestResults()。(配置参数 DcmDspRequestRoutineResultsFnc and DcmDspRoutineUsePort)
- 响应中可用的信号列表 。(配置参数 DcmDspRequestRoutineResultsOut)
2.在接收UDS服务RoutineControl (0x31)时,Dcm模块应检查该例程是否受支持(请参阅配置参数DcmDspRoutine);如果不受支持,Dcm模块应发送NRC 0x31(请求超出范围)。
3.如果一个例程被设置为未使用(DcmDspRoutineUsed设置为FALSE), DCM应认为该例程不受支持(根据2)。
4.接收UDS服务RoutineControl (0x31)时,DCM模块应检查例程是否可以在当前会话中执行(请参阅配置参数DcmDspCommonAuthorizationRef)。如果不是。DCM模块应发送NRC Ox31(请求超出范围)。
5.当接收到UDS服务RoutineControl (0x31)时,DCM模块应该检查这个例程是否可以在当前安全级别执行(参见配置参数DcmDspCommonAuthorizationRef)。如果没有,DCM模块将发送NRC 0x33(安全访问被拒绝)。
6.当UDS服务RoutineControl (0x31)被接收时,Dcm模块应该检查相应例程的子函数是否被支持(子函数0x02的配置容器DcmDspStopRoutine的存在性);子函数DcmDspRequestRoutineResults上的数据是0x03)。如果没有,Dcm模块将发送NRC 0x12(不支持子函数)。
7.UDS服务RoutineControl (0x31)的接收,Dcm模块应检查例程是否可以在当前模式条件下执行(请参阅配置参数DcmDspCommonAuthorizationRef)。如果没有,Dcm模块应发送参考DcmModeRule的计算负响应代码。
8.当收到请求UDS服务RoutineControl (0x31)如果所有验证已成功完成(见2,4,5), Dcm模块依法分割routineControlOptionRecord收到的这个例程的输入信号配置列表(参见配置参数DcmDspStartRoutineln和DcmDspStopRoutineln)。
9.当收到请求UDS服务RoutineControl (0x31)与子功能startRoutine,如果所有验证已成功完成(见2,4,5), Dcm模块将调用已配置的Xxx_start()函数传递dataln开始,计算从routineControlOptionRecord(见8),该例程的输出信号配置列表中的dataOut引用(配置参数DcmDspStartRoutineOut)。根据DcmDspRoutineSignalType,数据链的数据长度可以是固定的,也可以是动态的。如果是动态的,则在参数currentDataLenath中提供datalength,参数currentDataLenath以字节为单位保存最后一个dataln参数的lenath。datalength只能在最后一个dataln参数上是动态的。
10.完成9时在完成SWS_Dcm_00400后,当Xxx_Start()不返回错误代码,Dcm模块应使用以下命令返回肯定响应:Xxx_Start()在dataOut中返回的数据作为例程信息和例程StatusRecord(dataOut根据输出信号列表合并为此例程配置(请参阅配置参数DcmDspStartRoutineOut)) dataOut的数据长度可以是固定的或动态的根据DcmDspRoutineSignalType。如果是动态的,则数据长度应为参数currentDataLength中提供的参数,该参数保存字节的长度最后一个dataOut参数。 数据长度只能在最后一个dataOut上是动态的参数。。
11.当接收请求UDS服务RoutineControl (0x31)与子功能stopRoutine,如果所有验证已成功完成(见2,4,5), Dcm模块将调用已配置 xxx_stop()函数传递dataln,计算从routineControlOptionRecord(见8),和根据此例程的输出配置signal列表的dataOut引用(参见配置参数DcmDspStopRoutineOut)。根据DcmDspRoutineSignalType,数据链的数据长度可以是固定的,也可以是动态的。如果是动态的,则datalength应该在参数currentDataLength中提供,该参数持有最后一个dataln参数的字节长度。datalength只能在最后一个dataln参数上是动态的。
12.当完成11时,收到UDS服务RoutineControl的请求时(0x31)具有子功能stopRoutine,如果所有验证均已成功完成(请参见2,4,5),DCM模块应该调用配置的Xxx_Stop()函数,并传递dataIn,该dataIn是从例程ControlOptionRecord(请参阅8)和dataOut参考根据为此例程配置的输出信号列表(请参阅配置参数DcmDspStopRoutineOut)。 dataIn的数据长度可以固定或根据DcmDspRoutineSignalType动态。 如果是动态的,则数据长度应为在参数currentDataLength中提供,该参数保存字节的长度(以字节为单位)最后一个dataIn参数。 数据长度只能在最后一个数据上是动态的参数。
13.当接收请求UDS服务RoutineControl (0x31)与子功能requestRoutineResults,如果所有验证已成功完成(见2,4,5) Dcm模块将调用已配置好的Xxx_RequestResults()函数提供dataOut参考列表的显示输出信号配置这个例程(参见配置参数DcmDspRequestRoutineResultsOut) 。
14.当完成13时Xxx_RequestResults() 没有返回错误代码,Dcm模块应当与积极的回应答复,Xxx_RequestResults() 返回的数据在dataOut routinelnfo和routineStatusRecord (dataOut合并根据这个例程的输出信号confiqured列表(见DcmDspReduestRoutineResults)实现方式参数)。根据DcmDspRoutineSignalType,数据输出的datalenath可以是固定的,也可以是动态的。如果是动态的,则datalength应该在参数currentDataLength中提供,该参数持有最后一个dataOut参数的字节长度。datalenath只能在最后一个dataOut参数上是动态的。
15.序列化所需AUTOSAR数据类型(有符号和无符号的int)从请求消息和响应消息的UDS服务RoutineControl目标字节顺序已配置的 DcmDspRoutineSignalEndianness应当考虑DcmDspRoutine信号有DcmDspRoutineSignalType设置为固定长度(DcmDspRoutineSignalType设置为VARIABLE_LENGTH以外的值)。如果DcmDspRoutineSignalEndianness不存在,则应改用DcmDspDataDefaultEndianness。
16.接待的UDS服务RoutineControl (0x31),对每一个请求消除OBD范围内(EO00-EOFF), Dcm模块应获取为OBD服务$8定义的RID值(See SWS_Dcm_00418 ,SWS_Dcm_00419),如果RID指的是对应的TID(见DcmDspRoutineTidRef)。
17.Dcm应按照ISO 14229-1[15]对RoutineControl 服务的NRC处理”。
18.接收UDS服务RoutineControl (0x31)时,Dcm模块应检查请求的总长度。如果请求长度错误,Dcm模块将发送NRC 0x13(错误的消息长度或无效的格式)给测试人员。
19. Dcm应在完成总长度检查和模式规则、安全级别和会话检查DcmDspCommonAuthorizationRef之后,调用SWC的相应例程函数。
20.DcmDspRoutine应该支持服务端口、回调函数或TID引用。
21.如果不使用DcmDspRoutineTidRef,则DcmDspStartRoutine,DcmDspCommonAuthorizationRef和DcmDspRoutineUsePort应该是强制性的。
22.如果使用DcmDspRoutineTidRef,则应禁用DcmDspCommonAuthorizationRef、cmdsprequrequestroutineresults、dcmdspstop例程、DcmDspStartRoutine和DcmDspRoutineUsePort。
UDS 服务 Service 0x31 - RoutineControl相关推荐
- 基于UDS服务的BootLoader架构和刷写流程
基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...
- linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程
基于UDS的BootLoader下载,可以支持ECU生命周期的无限次刷写,通过CAN网络进行无需拆壳和DEBUG口的应用程序刷写,本文介绍了刷写服务和是三个阶段的刷写流程.也可通过无线模块实现空中升级 ...
- android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作
位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...
- S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改
S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改 :731000661854305913时间煮雨_______
- Windows服务(Service)安装及启动停止方案
目录 一.创作背景 二.问题解决 2.1 安装Windows service服务 2.2 主方法Main()主方法改写 2.3 安装service服务/卸载service服务 2.4 服务启停 2.5 ...
- 开机启动一个服务Service,启动后没有界面后台暗暗运行
原文来自:http://blog.163.com/shaocpa@126/blog/static/553577572012418103732417/ 如果开机启动一个Activity,开机首先看的界面 ...
- 服务Service的基本用法
作为 Android四大组件之一, 服务也少不了有很多非常重要的知识点,那自然要从最基本的用法开始学习了. 定义一个服务: public class MyService extends Service ...
- ubuntu启动、关闭、重启服务service命令
查看当前所有服务 service --status-all 结果如下: zwl@zwl-NB50TJ1-TK1:~$ service --status-all[ + ] acpid[ - ] alsa ...
最新文章
- JVM,JDK,JRE和OpenJDK有什么区别?
- counter()函数和most_common()函数
- 【Docker】docker安装redis
- [转]IIS的完整控制类
- [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题
- java写入文件编码格式为ansi_Windows10 bat批处理删除 快速打开文件夹 固定到开始菜单或任务栏...
- windows史上最方便解压rar文件的软件WeDo
- opesnstack四部曲(1)---keystone
- Selenium基础篇之5-第一个完整的自动化测试脚本
- Spring boot 学习二:入门
- POJ3155 Hard Life
- 面试官问现在工资是多少,该怎么回答?
- winhex基础教程(更新中)
- 虚幻四C++入坑指南09:C++实现FPS游戏(3)Pitch Yaw Roll的作用 视角旋转 跳跃
- matlab求刚度,求整体刚度矩阵matlab程序
- Python 爬虫实践:《战狼2》豆瓣影评分析
- MIT6.824 2022 Fault-tolerant Key/Value Service
- navigator、history对象
- Jupyter Notebook切换conda虚拟环境
- 数据结构——图的邻接矩阵实现