诊断请求1101到MCU复位的完整流程

文章目录

  • [ETAS 诊断 0x1101(ECU Reset / Hard Reset)到 MCU 复位完整流程](#ETAS 诊断 0x1101(ECU Reset / Hard Reset)到 MCU 复位完整流程)
    • [1. 请求含义与工程配置](#1. 请求含义与工程配置)
    • [2. 总体架构](#2. 总体架构)
    • [3. 分阶段说明](#3. 分阶段说明)
      • [阶段 A:总线接收(诊断工具 → ECU)](#阶段 A:总线接收(诊断工具 → ECU))
      • [阶段 B:DCM 服务处理](#阶段 B:DCM 服务处理)
      • [阶段 C:正响应发送确认](#阶段 C:正响应发送确认)
      • [阶段 D:BswM 动作链(DcmEcuReset = HARD)](#阶段 D:BswM 动作链(DcmEcuReset = HARD))
      • [阶段 E:EcuM 关机状态机](#阶段 E:EcuM 关机状态机)
      • [阶段 F:MCU 硬件复位](#阶段 F:MCU 硬件复位)
    • [4. 调试要点](#4. 调试要点)
    • [5. 关键源文件索引](#5. 关键源文件索引)
    • [6. 一句话总结](#6. 一句话总结)

ETAS 诊断 0x1101(ECU Reset / Hard Reset)到 MCU 复位完整流程

1. 请求含义与工程配置

项目 说明
诊断仪报文 11 01(SID=0x11 ECUReset,子功能=0x01)
俗称 0x1101
语义 ISO 14229:hardReset ;本工程 DCM 配置为 HARD 复位类型
正响应 51 01(响应 SID = 0x11 + 0x40)
子功能配置 Dcm_DspEcuResetType_cast[]0x01RTE_MODE_DcmEcuReset_HARD

配置出处BasicSoftware/src/bsw/Dcm/Dcm_Lcfg_DspUds.c

c 复制代码
const Dcm_DspEcuReset_tst Dcm_DspEcuResetType_cast[DCM_CFG_DSP_NUMRESETTYPE] =
{
    {
        RTE_MODE_DcmEcuReset_HARD,   /* DcmEcuReset Mode */
        0x1,                         /* ResetType = hardReset */
        DCM_RESET_NO_BOOT
    }
};

服务入口BasicSoftware/src/bsw/Dcm/Dcm_Lcfg_DslDsd.c --- SID 0x11Dcm_DcmEcuReset()


2. 总体架构

Mcu(AURIX) ASW/CDD EcuM BswM Dcm PduR CanIf/CanTp 诊断仪 Mcu(AURIX) ASW/CDD EcuM BswM Dcm PduR CanIf/CanTp 诊断仪 #mermaid-svg-n4yLhLKD6C7vhq5G{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-n4yLhLKD6C7vhq5G .error-icon{fill:#552222;}#mermaid-svg-n4yLhLKD6C7vhq5G .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-n4yLhLKD6C7vhq5G .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-n4yLhLKD6C7vhq5G .marker{fill:#333333;stroke:#333333;}#mermaid-svg-n4yLhLKD6C7vhq5G .marker.cross{stroke:#333333;}#mermaid-svg-n4yLhLKD6C7vhq5G svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-n4yLhLKD6C7vhq5G p{margin:0;}#mermaid-svg-n4yLhLKD6C7vhq5G .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-n4yLhLKD6C7vhq5G text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-n4yLhLKD6C7vhq5G .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-n4yLhLKD6C7vhq5G .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-n4yLhLKD6C7vhq5G #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-n4yLhLKD6C7vhq5G .sequenceNumber{fill:white;}#mermaid-svg-n4yLhLKD6C7vhq5G #sequencenumber{fill:#333;}#mermaid-svg-n4yLhLKD6C7vhq5G #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-n4yLhLKD6C7vhq5G .messageText{fill:#333;stroke:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-n4yLhLKD6C7vhq5G .labelText,#mermaid-svg-n4yLhLKD6C7vhq5G .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .loopText,#mermaid-svg-n4yLhLKD6C7vhq5G .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-n4yLhLKD6C7vhq5G .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-n4yLhLKD6C7vhq5G .noteText,#mermaid-svg-n4yLhLKD6C7vhq5G .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-n4yLhLKD6C7vhq5G .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-n4yLhLKD6C7vhq5G .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-n4yLhLKD6C7vhq5G .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-n4yLhLKD6C7vhq5G .actorPopupMenu{position:absolute;}#mermaid-svg-n4yLhLKD6C7vhq5G .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-n4yLhLKD6C7vhq5G .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-n4yLhLKD6C7vhq5G .actor-man circle,#mermaid-svg-n4yLhLKD6C7vhq5G line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-n4yLhLKD6C7vhq5G :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 11 01 分段重组完成 StartOfReception / CopyRxData / RxIndication 模式规则 / 预处理 / 状态机 SchM_Switch(DcmEcuReset=HARD) 51 01 TxConfirmation SchM_Switch(DcmEcuReset=EXECUTE) SelectShutdownTarget + Dem + GoDown GoOffOne → ShutdownOS OnGoOffTwo → NvM_WriteAll EcuM_AL_Reset → Mcu_PerformReset SCU SWRSTREQ 软件复位

通信栈路径(收)CanIfCanTpPduRDcm

通信栈路径(发)DcmPduRCanTpCanIfPduR_DcmTransmit


3. 分阶段说明

阶段 A:总线接收(诊断工具 → ECU)

  1. CAN 帧经 CanIf 进入协议栈。
  2. CanTp 完成多帧重组,经 PduR 回调 DCM:
    • Dcm_StartOfReception
    • Dcm_CopyRxData
    • Dcm_TpRxIndication
  3. Dcm_MainFunction (周期任务)中 DSL 状态机调度 DSD,调用 Dcm_DcmEcuReset()

阶段 B:DCM 服务处理

状态机Dcm_stEcuResetState_en):IDLEREQPERMISSIONSENDRESPONSEIDLE

步骤 动作 关键文件
B1 校验子功能 0x01 已配置 DcmDspUds_Er.c
B2 模式规则(项目定制) DcmAppl_UserSubServiceModeRuleService.c
B3 复位前准备 DcmAppl_DcmEcuResetPreparation.c(默认 E_OK
B4 SchM_Switch_Dcm_DcmEcuReset(HARD),组正响应 DcmDspUds_Er.c
B5 DcmAppl_Switch_DcmEcuReset(0x01) DcmAppl_Switch_DcmEcuReset.c
B6 resData[0]=0x01resDataLen=1 → 总线 51 01 同上
项目模式规则(0x1101)

文件BasicSoftware/integration/src/bsw/Dcm/integration/DcmAppl_UserSubServiceModeRuleService.c

  • 拒绝复位(NRC 0x22):特定条件。
  • 允许复位:满足复位条件。

阶段 C:正响应发送确认

正响应经 CanTp 发送成功 后,Dcm_Prv_DspEcuResetConfirmation() 被调用:

文件BasicSoftware/src/bsw/Dcm/src/DcmDsp/DcmDspUds/DcmDspUds_Er.c

动作 说明
SchM_Switch_Dcm_DcmEcuReset(EXECUTE) Tx 确认后切换执行模式
DcmAppl_Switch_DcmExecuteEcuReset() 应用侧通知
DcmAppl_Switch_DcmExecuteReset() 本工程为空实现

时序要点

  • HARD 模式在 SENDRESPONSE 阶段切换(组包时),用于通知 BswM。
  • EXECUTETx 确认后 切换(符合 AUTOSAR:先应答、再执行复位)。

阶段 D:BswM 动作链(DcmEcuReset = HARD)

通知路径SchM_Switch(HARD)BswM_Cfg_DfrdBswNotification_..._EcuReset_HARDBswM_RequestMode → 规则 BswM_LE_DCM_EcuReset_HARD → 动作表 BswM_AL_DCM_EcuReset_HARD

文件BasicSoftware/src/bsw/BswM_PreCompile_and_PB_Variant/BswM_PBcfg.cBswM_Cfg_AC.c

序号 动作 说明
1 EcuM_SelectShutdownTarget(RESET, ECUM_RESET_IO) 关机目标:复位,模式 RESET_IO
2 Dem_SetOperationCycleState(END) 结束 DEM 运行周期
3 Dem_Shutdown() DEM 关断
4 CanTrcv_GotoSleep CAN 收发器休眠
5 EcuM_GoDown(0) 启动 EcuM 关机流程

Hard Reset 选用 ECUM_RESET_IO (非 ECUM_RESET_MCU),二者在 EcuM_AL_Reset 中均调用 Mcu_PerformReset()


阶段 E:EcuM 关机状态机

步骤 函数 说明
E1 EcuM_GoDown 置位 EcuM_Prv_flgGoDown_b
E2 EcuM_MainFunction 检测 GoDown → EcuM_Prv_ProceedShutdown()
E3 EcuM_OnGoOffOne Go Off I:见下表
E4 BswM_Deinit / SchM_Deinit BSW 去初始化
E5 ShutdownOS / ShutdownAllCores 关闭 OS
E6 EcuM_ShutdownEcuM_OnGoOffTwo Go Off II:NvM 写
E7 EcuM_AL_Reset 因 ShutdownTarget=RESET 进入复位

EcuM_OnGoOffOne 集成BasicSoftware/integration/src/bsw/EcuM/user/EcuM_integration.c):

  • Rte_Stop()
  • Dem_SetOperationCycleState(END) / Dem_Shutdown()
  • RE_NvMUT_100ms()

EcuM_OnGoOffTwoBasicSoftware/src/bsw/EcuM/EcuM_Cfg_Shutdown.c):

  • NvM_Integration_WriteAll() --- 关机前 NvM writeall

阶段 F:MCU 硬件复位

文件BasicSoftware/integration/src/bsw/EcuM/integration/EcuM_Callout_Stubs.c

c 复制代码
void EcuM_AL_Reset(EcuM_ResetType reset)
{
    switch (reset)
    {
        case ECUM_RESET_MCU:
        case ECUM_RESET_IO:
        case ECUM_RESET_WDGM:
            Mcu_PerformReset();
            break;
        default:
            break;
    }
}

MCALsrc/00BSW/00Mcal/Mcu/src/Mcu.c --- Mcu_PerformReset()

  • SCU.SWRSTCON.SWRSTREQ = 1 ,触发 AURIX 软件复位
  • 短延时等待复位生效。

4. 调试要点

  1. 先看到 51 01 ,MCU 才可能复位;NRC 0x22 表示模式规则拒绝。
  2. BswM HARD 在组正响应时即可触发;Mcu_PerformResetOS 关闭之后
  3. DcmAppl_Switch_DcmExecuteReset 为空,复位逻辑在 BswM/EcuM/MCU。
  4. Hard Reset 配置为 ECUM_RESET_IO ,与 ExeMgr 演示路径 ECUM_RESET_MCU 不同,最终均走 Mcu_PerformReset()

建议断点/日志顺序

复制代码
Dcm_DcmEcuReset
  → SchM_Switch HARD
  → BswM_AL_DCM_EcuReset_HARD
  → EcuM_GoDown
  → EcuM_OnGoOffOne / OnGoOffTwo
  → EcuM_AL_Reset
  → Mcu_PerformReset

5. 关键源文件索引

模块 路径
ECU Reset 服务 BasicSoftware/src/bsw/Dcm/src/DcmDsp/DcmDspUds/DcmDspUds_Er.c
子功能配置 BasicSoftware/src/bsw/Dcm/Dcm_Lcfg_DspUds.c
服务表 BasicSoftware/src/bsw/Dcm/Dcm_Lcfg_DslDsd.c
模式规则 1101 BasicSoftware/integration/src/bsw/Dcm/integration/DcmAppl_UserSubServiceModeRuleService.c
BswM 动作表 BasicSoftware/src/bsw/BswM_PreCompile_and_PB_Variant/BswM_PBcfg.c
BswM Callout BasicSoftware/src/bsw/BswM_PreCompile_and_PB_Variant/BswM_Cfg_AC.c
BswM 模式通知 BasicSoftware/src/bsw/BswM_PreCompile_and_PB_Variant/BswM_Cfg_ModeManagerReq.c
EcuM GoDown/Shutdown BasicSoftware/src/bsw/EcuM/src/EcuM_Shutdown.c
EcuM MainFunction BasicSoftware/src/bsw/EcuM/src/EcuM_MainFunction.c
GoOffOne 集成 BasicSoftware/integration/src/bsw/EcuM/user/EcuM_integration.c
GoOffTwo / NvM BasicSoftware/src/bsw/EcuM/EcuM_Cfg_Shutdown.c
复位 Callout BasicSoftware/integration/src/bsw/EcuM/integration/EcuM_Callout_Stubs.c
MCU 复位 src/00BSW/00Mcal/Mcu/src/Mcu.c

6. 一句话总结

诊断仪 发送 11 01 → CanTp/PduR 递交 Dcm → 模式规则与预处理 → 切换 DcmEcuReset=HARD 触发 BswM(Dem/CanTrcv/EcuM_GoDown)→ 应答 51 01 且发送确认后进入 EXECUTE → EcuM 经 GoOffOne/Two 写 NvM 并关 OS → EcuM_AL_Reset 调用 Mcu_PerformReset 完成 MCU 软件复位。


相关推荐
无畏jh3 天前
CCFC3008PCSN与Vector适配经验分享
autosar·国产化·汽车嵌入式·ccfc3008pcsn
车软派开发学长8 天前
零基础学习车软嵌入式AUTOSAR,以一帧CAN报文实战讲解AUTOSAR的学习
网络·stm32·车载系统·autosar·嵌入式实时数据库
龙智DevSecOps解决方案16 天前
TESSY AUTOSAR插件详解:从ARXML模型到自动化测试的完整工作流
autosar·tessy
说不得明天17 天前
网络管理:AutoarNM部分
c语言·网络·mcu·汽车·autosar
内容为空22 天前
comm网络开启流程
autosar
内容为空22 天前
comm网络关闭流程
autosar
内容为空25 天前
AUTOSAR COM 发送流程笔记:Com_SendSignal 与 Com_MainFunctionTx
autosar
嵌软小白呗1 个月前
Autosar-SecOC功能详解(一)
e2e·can·autosar·crc·secoc
内容为空1 个月前
TC397 CAN 模块硬件资源与配置详解笔记
autosar