AUTOSAR诊断开发实战:手把手教你配置31服务(Routine Control)
在汽车电子开发中,UDS(统一诊断服务)协议是工程师绕不开的话题。相比于常见的读取数据(22服务)和写入数据(2E服务),31服务(Routine Control)往往显得更为神秘和复杂。它不仅仅是一个简单的读写操作,更像是一个“远程函数调用”,用于执行那些耗时、复杂或涉及多步骤的ECU内部任务(如擦除Flash、执行自检、标定传感器等)。一、 31服务:不仅仅是读写在开始配置之前,我们需要明确31服务的核心逻辑。与2F服务(简单的I/O控制)不同,31服务通常涉及一个状态机的管理。核心机制:DCM(诊断通信管理器)模块负责接收请求、校验权限,然后通过回调函数调用应用层(SWC)或底层驱动的具体逻辑。三大子功能:0x01 (Start Routine):启动例程。0x02 (Stop Routine):停止例程(视配置而定)。0x03 (Request Routine Results):获取执行结果。长耗时处理:如果任务执行时间超过P2超时时间,ECU必须回复NRC 0x78 (Response Pending),告诉Tester“我正在干活,请保持等待”,防止连接断开。二、 实战演练:ETAS工具链配置全流程配置31服务的过程,本质上是将协议栈(DCM)与应用层(SWC)“连线”的过程。我们以配置RID(Routine Identifier)为0xFD00的例程为例,详细拆解16个关键步骤。1. DCM模块基础配置首先,我们需要在DCM模块中“注册”这个服务。步骤1-2:新建服务在Dcm DcmDsd DcmDsdServiceTable中,找到DcmDsdServices,新建一个服务。Service ID:填入49(即0x31的十进制)。Function:关联协议栈中的处理函数(如Dcm_DcmRoutineCont