UDS诊断在之前的文章中已经介绍了诊断报文在各个服务中的格式,以及故障码和DID的一些介绍,为了完整性,今天这篇继续进行补充,来介绍下RID和IOID(即Routine Control和IO control),看到他们的名字全称,从字面意思大家应该也能理解到,这2个是服务是控制类的,这也是我把他们呢放在一起进行介绍的原因。它们的不同点在于,一个是控制软件逻辑类,一个是硬件IO接口的控制。下面我们就对着2个服务进行一一介绍。

功能

31服务又叫Routine Control,该服务主要是对产品内部软件逻辑进行一些控制,比如在CAN/CANFD、亦或者DoIP升级的时候,对flash进行预擦除;或者拨打xcall电话;播放驱动AVAS声音等功能。

2F服务又叫IO control,也很简单,IO就是硬件接口,该服务就是对硬件接口进行控制,比如控制车窗的升降;后视镜的调节;以及内部灯光的控制等功能。从功能上来说,这2个非常相似,都是控制,区别在于一个是软件内部逻辑的控制,一个是IO硬件接口的控制。

命令格式

31服务的请求格式:31(服务)+01/02/03(子服务)+RoutineID+OptionRecord

所有的31服务必须包含的要有31(服务)+01/02/03(子服务)+RoutineID,而OptionRecord是可选3,只有在有需要的时候才会添加该数据,如果没有需要整个命令可不带有该部分。

关于RoutineControl Request SID和RoutineIdentifier我们不做过多的介绍,在31服务中RoutineControl Request SID就是固定的31会改变,而RoutineIdentifier会根据不同的DUT规范在器件设计之初就会定下来。不同的ID代表不同的功能。我们主要说的是Subfunction,在31服务中主要包含01/02/03 3种子功能,其中01代表startroutine(启动例程),02代表stoproutine(停止例程),03代表requestroutineresult(获取例程结果)。

其中启动例程是必须支持的,很明显如果例程没有被启动的话,就不存在停止和请求结果了,因此01必须支持;而停止例程和请求例程结果就是看各主机厂的需求或者具体的功能需要,可有可无。例如打开背光灯,这个动作是一瞬间执行完成的,那么很明显我们要无法对其进行停止操作,因此停止例程的功能有没有就没有什么必要了,但是我们如果是黑盒测试的话,我们可以通过获取例程请求结果来检查是否启动成功。

再比如擦除flash,由于这个过程是需要一段时间才能完成,这其中就会涉及到在擦除一半的时候我们想停止擦除,这就可以使用停止例程来终止该操作。

ump监控系统_3c

2F服务的请求格式:2F(服务)+DataID+01/02/03(子服务)+MaskRecord

所有的2F服务必须包含的要有2F(服务)+DataID+子服务,而MaskRecord是可选,只有在有需要的时候才会添加该数据,如果没有需要整个命令可不带有该部分。

关于IO Request SID和DataID我们不做过多的介绍,在2F服务中IO Request SID就是固定的2F会改变,而DataID会根据不同的DUT规范在器件设计之初就会定下来。不同的ID代表不同的功能。我们主要说的是Subfunction,在2F服务中主要包含01/02/03 3种子功能,其中01代表ReturnControltoECU(控制权返回ECU),02代表stopcontrol(停止控制),03代表shortterm adjustment(获取控制权)。

相对于31服务来说,2F服务中常用的是01和03两个子服务,原因很好理解,你从其他地方拿到某个硬件的控制权,在使用后肯定需要返回给人家,不然别的ECU如何使用。

我们拿现在车上常用的MIC来举例,通常MIC是挂在中央控制器上,但是在拨打xcall的时候,我们需要从中央控制器手中将mic的控制权给到tbox,在xcall结束后,控制权回到中央控制器,这是个正常的流程,如果我们补还给中央控制器,那中央控制器将无法使用MIC。

ump监控系统_运维_02

肯定应答

肯定应答在看过我之前的文章,上面都有具体的命令描述,大家可以进行参考,之前手误对于2F服务的命令格式写错成跟31服务一样,已进行说明,大家看的时候可以注意下:https://mp.weixin.qq.com/s?__biz=MzkxMjI4ODMwMQ==&mid=2247483756&idx=1&sn=11846fee19a1f5a6c0a5ee3cc7103cff&chksm=c10e7e2ef679f738fa8ff7bcee74f9d23cea1e24de79a7cbe352b7f68d7dc406fe0e96d839cc&token=1465782712&lang=zh_CN#rd

否定应答

由于各个主机厂对于否定应答的规定都有一定的出入,这里不再进行全部的介绍,我们只说下一定支持的否定应答码一般有NRC 13(命令长度错误);NRC 12(子服务功能不支持)。其他的否定应答码我们根据主机厂的具体定义进行确认。