This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-AM62X:M4 看门狗

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1509219/processor-sdk-am62x-m4-watchdog

器件型号:PROCESSOR-SDK-AM62X


工具/软件:

由于其他优先事项、我无法跟进 Anil 在线程中提供的信息(现已锁定):
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1483103/processor-sdk-am62x-m4-watchdog

我现在就这样做了。

我的目标是在 M4 看门狗到期时引起复位。  我已经跟踪了该线程中的信息、并且当我未能使用 Watchdog_clear () 重置看门狗关闭计数器时、看门狗将过期。  问题在于处理器未复位。

我定期转储寄存器:

WDSTATUS 0
DWDCNTR 16d601
MCU_CTRL_MMR_CFG0_RST_CTRL 400fff
----------------------------------------
WDSTATUS 0
DWDCNTR 11e4e9
MCU_CTRL_MMR_CFG0_RST_CTRL 400fff
----------------------------------------
WDSTATUS 0
DWDCNTR cf357
MCU_CTRL_MMR_CFG0_RST_CTRL 400fff
----------------------------------------
WDSTATUS 0
DWDCNTR 8021d
MCU_CTRL_MMR_CFG0_RST_CTRL 400fff
----------------------------------------
WDSTATUS 0
DWDCNTR 31115
MCU_CTRL_MMR_CFG0_RST_CTRL 400fff
----------------------------------------
WDSTATUS 32
DWDCNTR 1fe2056
MCU_CTRL_MMR_CFG0_RST_CTRL 400fff


这显示向下计数器递减、然后缠绕。   在上一次捕获中、状态寄存器显示看门狗已过期。

转储还显示 寄存器 MCU_CTRL_MMR0 的 RST_CTRL_MCU_ESM_ERROR_RST_EN_Z 位(位 17)已清除、这意味着 通过 ESM 激活 MCU 复位。

从 TRM 的第 6.3.5.6 节中、我确定 ESM 错误是要在 MCU_CTRL_MMR0 中设置的正确位。  该部分说  发生 MCU WDT 超时时会发出 ESM 错误复位。

什么是我的缺失?  还有哪些因素可以防止 MCU 看门狗过期来复位处理器?

谢谢、
  Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我增加了对 MCU_MMR0_RST_STAT 寄存器的打印。  它的启动时间为 1(复位取消置位)、并且保持为 1、即使 WDSSTATUS 指示看门狗超时也是如此。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve、

    我正在查看您的查询,你可能会期待在一两天内回复.

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve、

    您能否确认是否已将 ESM 模块集成到您的应用程序中以重置 SOC?

    我认为 ESM 集成不是在您的应用程序中完成的。

    如果您遵循下面的常见问题解答、则所有步骤都可用。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1283237/faq-am64x-am62x-how-to-reset-the-soc wddt-timer-expression-in-am64x-and-am62x

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Anil。

    我正在初始化 ESM:


    sdl_DPL_init (&DPL_interface);
    sdl_ESM_init (sdl_ESM_INST_WKUP_ESM0、&esmInitConfig 、sdl_ESM_callback、&apparg);


    我已确认两个例程都返回了 SDL_PASS。  DPL_INTERFACE 与 examples/sdl/DPL/DPL_interface.c 中的相同

    我想知道传递给 sdl_esm_init () 的配置。  在 UC1 示例代码(MCU+ SDK 和常见问题解答所附的 zip 文件中)中、该代码具有:

    SDL_ESM_CONFIG RTI_Test_esmInitConfig_wkup =

    .esmErrorConfig ={0U、3U}、/*自检错误配置*/
    .enableBitmap ={0xffffffffffu、0xff0fffffu、0x7fffffffu、0x00000007u、
    }、
    /**<所有事件启用:计时器和自检事件除外、主 ESM 输出*/
    /*也临时禁用 vim 比较错误*/
    .priorityBitmap ={0xffffffffffu、0xff0fffffu、0x7fffffffu、0x00000007u、
    }、
    /**<所有事件的高优先级:计时器、自检错误事件和主 ESM 输出除外*/
    .errorpinBitmap ={0xffffffffffu、0xff0fffffu、0x7fffffffu、0x00000007u、
    }、
    /**<所有事件的高优先级:计时器、自检错误事件和主 ESM 输出除外*/
    };


    对于每个位图、这是设置 3x32 + 3 = 99 位。  但是、TRM 中的表 10-3 只有 91 个中断。  另外,关于位的注释(虚拟比较,自检等)似乎与该表中的条目不匹配。  因此 我不理解所选位的值。

    我真的只对看门狗计时器 (ID 85) 到期时的复位感兴趣、因此我尝试了将位字段设置为:

    .enableBitmap ={0x0u、0x0u、0x00200000u、}、

    不过、这在看门狗到期时让器件复位方面没有什么区别。

    为了帮助确定 ESM 是否已初始化、我添加了调用:

    SDL_ESM_getStaticRegisters (SDL_ESM_INST_WKUP_ESM0、&staticRegs);

    它也会返回 SDL_PASS、我看到以下寄存器值:

    PID = 0x6fe04900
    INFO = 0x80000103
    EN = 0xF
    ERR_EN_SET = 0x7
    ERR_EN_CLR = 0x7
    LOW_PRI = 0xffffffff
     Hi_pri = 0xffffffff
     低电平= 0x0
    HI = 0x0
    PIN_CTRL = 0x0
    PIN_CNTR_PRE = 0x30d40
    PWMH_PIN_CNTR_PRE = 0x186a0
    PWML_PIN_CNTR_PRE = 0x186a0

    我没有看到任何明显的错误。

    此致、
      Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve、

    使用下面的配置将 WDT 事件路由到 MCU ESM 模块、默认情况下我已启用这些配置将主 ESM 事件路由到 WKUP ESM。

    如果您不从 MCU 内核监控这些主要 ESM 事件、则在下面的配置中、将任何 0x7 值替换为 0x00 值。

    SDL_ESM_config RTI_Test_esmInitConfig_wkup =
    {
        .esmErrorConfig = {0u, 3u}, /* Self test error config */
        .enableBitmap = {0x00000007u, 0x00000000u, 0x00200000u, 0x00000000u,
                    },
         /**< All events enable: except timer and self test  events, and Main ESM output */
        /* Temporarily disabling vim compare error as well*/
        .priorityBitmap = {0x00000007u, 0x00000000u, 0x00200000u, 0x00000000u,
                            },
        /**< All events high priority: except timer, selftest error events, and Main ESM output */
        .errorpinBitmap = {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
                          },
        /**< All events high priority: except timer, selftest error events, and Main ESM output */
    };
    

    接下来、我们需要配置 MMR 寄存器、以便在看门狗到期后进行 SOC 复位、如下所述。

         /* Unlock CONTROL MMR registers */
         SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_WKUP, rstPartition);
    
    
         ctrl_addr = (volatile uint32_t *)(0x43018170);
    
         *ctrl_addr &= (~(1<<17));
    
    
         /* Lock CONTROL MMR registers */
         SOC_controlModuleLockMMR(SOC_DOMAIN_ID_WKUP, rstPartition);

    请尝试上述步骤,并告诉我,如果你遇到任何问题...

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Anil。

    我在 FreeRTOS 环境中这样做。

    SoC_controlModuleUnlockMMR (SOC_DOMAIN_ID_WKUP、rstPartition); 

    Baseaddress =(uint32_t) AddrTranslateP_getLocalAddr (CSL_WKUP_CTRL_MMR0_CFG0_BASE);

    REG = HW_RD_REG32(基址+ CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL);
    DebugP_log(“CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL was %x\n\r“、reg);

    CSL_REG32_FINS (Baseaddress + CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL、WKUP_CTRL_MMR_CFG0_RST_CTRL_MAIN_ESM_ERROR_RST_Z、0);

    REG = HW_RD_REG32(基址+ CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL);
    DebugP_log (%x 处的“CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL、现在为%x\n\r“、Baseaddress + CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL、reg);

    SoC_controlModuleLockMMR (SOC_DOMAIN_ID_WKUP、rstPartition);

    这将显示:

    CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL 为 200ff 
    c3018170 处的 CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL 现在已关闭

    则 I:

    SDL_ESM_CONFIG esmInitConfig = 

    .esmErrorConfig ={0U、3U}、/*自检错误配置*/
    .enableBitmap ={0x00000007u、0x00000000u、0x00200000u、0x00000000u、
    }、
    /**<所有事件启用:计时器和自检事件除外、主 ESM 输出*/
    /*也临时禁用 vim 比较错误*/
    .priorityBitmap ={0x00000007u、0x00000000u、0x00200000u、0x00000000u、
    }、
    /**<所有事件的高优先级:计时器、自检错误事件和主 ESM 输出除外*/
    .errorpinBitmap ={0x00000000u、0x00000000u、0x00000000u、0x00000000u、0x00000000u、
    }、
    /**<所有事件的高优先级:计时器、自检错误事件和主 ESM 输出除外*/
    };
    /*需要在任何 SDL 函数之前调用此函数*/ 
    sdlret = SDL_DPL_init (&DPL_interface);
    if (sdlret!= sdl_pass)

    DebugP_logError(“SDL_DPL_Init Failed\n\r“);
    }

    /*初始化 WKUP ESM 模块*/
    状态= SDL_ESM_INIT (SDL_ESM_INST_WKUP_ESM0、&esmInitConfig、
    sdl_esm_callback、&apparg);
    IF (status!= SDL_PASS)

    DebugP_logError(“SDL_ESM_Init Failed\n\r“);
    }

    未报告任何故障。
    此处显示的 esmInitConfig 是您在上面指出的配置。  正如我之前提到的、我尝试了不同的配置、但没有运行方面的差异。

    我还能够检索 ESM 寄存器以帮助演示 ESM 已初始化:

    STATUS = SDL_ESM_getStaticRegisters (SDL_ESM_INST_WKUP_ESM0、&staticRegs); 
    if (status != SDL_PASS){
    DebugP_logError(“SDL_ESM_getStaticRegisters faile\n\r“);
    }

    之后:

    for (instCnt = 0u;instCnt < CONFIG_WATCHDOG_NUM_Instances;instCnt++) 

    gWatchdogHandle[instCnt]= NULL;
    }

    /*打开所有实例*/
    for (instCnt = 0u;instCnt < CONFIG_WATCHDOG_NUM_Instances;instCnt++)

    gWatchdogParams[instCnt].expirationTime = timeout_ms;
    gWatchdogHandle[instCnt]= Watchdog_open (instCnt、&gWatchdogParams[instCnt]);
    if (NULL == gWatchdogHandle[instCnt])

    DebugP_logError(实例%d!!!\r\n“的看门狗打开失败、instCnt);
    状态= SystemP_FAILURE;
    休息;
    }

    /*
    *第一次启用时,看门狗会从默认值开始递减计数
    *预加载值。 以便从计数开始
    *对应于上述 timeout_ms(由 watchdog_open () 设置),我们
    *需要调用 watchdog_clear ()。
    */
    WATCHDOG_CLEAR (gWatchdogHandle[instCnt]);
    }

    if (SystemP_FAILURE == status)

    watchdog_driversClose();/*正常退出*/
    }

    此时、我期望看门狗过期并将器件复位。  当我看到它到期时、没有复位:

    ======================================== 
    RTI_RTIDWDCTRL a98559da
    RTI_RTIINTFLAG 0
    RTI_RTIDWDCTRL a98559da
    RTI_RTIDWDPRLD 12
    RTI_RTIWDSSTATUS 0
    RTI_RTIDWDCNTR 25ffb
    RTI_RTIWWDRXNCTRL 5.
    ========================================
    RTI_RTIDWDCTRL a98559da
    RTI_RTIINTFLAG 0
    RTI_RTIDWDCTRL a98559da
    RTI_RTIDWDPRLD 12
    RTI_RTIWDSSTATUS 0
    RTI_RTIDWDCNTR 1e1fa
    RTI_RTIWWDRXNCTRL 5.
    正在执行 watchdog_clear ()
    ========================================
    RTI_RTIDWDCTRL a98559da
    RTI_RTIINTFLAG 0
    RTI_RTIDWDCTRL a98559da
    RTI_RTIDWDPRLD 12
    RTI_RTIWDSSTATUS 0
    RTI_RTIDWDCNTR 163c8
    RTI_RTIWWDRXNCTRL 5.
    ========================================
    RTI_RTIDWDCTRL a98559da
    RTI_RTIINTFLAG 0
    RTI_RTIDWDCTRL a98559da
    RTI_RTIDWDPRLD 12
    RTI_RTIWDSSTATUS 0
    RTI_RTIDWDCNTR e591
    RTI_RTIWWDRXNCTRL 5.
    ========================================
    RTI_RTIDWDCTRL a98559da
    RTI_RTIINTFLAG 0
    RTI_RTIDWDCTRL a98559da
    RTI_RTIDWDPRLD 12
    RTI_RTIWDSSTATUS 0
    RTI_RTIDWDCNTR 6756
    RTI_RTIWWDRXNCTRL 5.
    ========================================
    RTI_RTIDWDCTRL a98559da
    RTI_RTIINTFLAG 0
    RTI_RTIDWDCTRL a98559da
    RTI_RTIDWDPRLD 12
    RTI_RTIWDSTSTATUS 32
    RTI_RTIDWDCNTR 1ffe930
    RTI_RTIWWDRXNCTRL 5.

    此致、
      Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve、

    当您调用 WATCHDOG_CLEAR API 时、WDT 计数器会全新启动、您需要再次等待相同的到期时间。

    调用 watchdog_driver_open 并等待到期时间后、只应进行 WDT 复位。  

    我认为您设置中的 WDT 代码存在问题。

    您能否分享您的示例项目?

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“525901" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1509219/processor-sdk-am62x-m4-watchdog/5856165 #5856165“]

    当您调用 WATCHDOG_CLEAR API 时、WDT 计数器会全新启动、您需要再次等待相同的到期时间。

    调用 watchdog_driver_open 并等待到期时间后、只应进行 WDT 复位。  

    [/报价]

    寄存器转储相隔几秒。  当 RTI_RTIWDSSTATUS 寄存器从 0 变为 32 时、您可以看到看门狗最终到期。

    我无法共享工程、但将创建一个仅实现看门狗的简单工程。

    此致、
       Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否分享您的示例项目?

    我基于 hello_world 示例创建了一个简单版本。  它包含 watchdog_RTI.c 和 watchdog_soc.c、它们位于 MCU+ SDK 中、但不包含在 M4 库二进制文件中。  我正在使用我的应用程序构建它们、以便我可以使用未修改的 SDK。

    此致、
      Steve

    e2e.ti.com/.../watchdog.tar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve、

    按代码操作、除了下面的更改外、一切都正常。

        /* Reset Src belongs to partition 6 of the CTRL MMR */
        uint32_t     rstPartition = 6U, baseAddr;
        
        /* Unlock CONTROL MMR registers */
        SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MCU, rstPartition);
    
        baseAddr = (uint32_t) AddrTranslateP_getLocalAddr(CSL_MCU_CTRL_MMR0_CFG0_BASE);
    
    
        CSL_REG32_FINS(baseAddr + CSL_MCU_CTRL_MMR_CFG0_RST_CTRL,
                       CSL_MCU_CTRL_MMR_CFG0_RST_CTRL_MCU_ESM_ERROR_RST_EN_Z_MASK, 0);
    
                   
        SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MCU, rstPartition);
    

    我们需要控制 MCU MMR 寄存器、以便从 MCU ESM 模块进行 SOC 复位。

    您能否在您的设置中添加上述更改 并查看其是否有效?

    如果上述建议不起作用、我可以在我这边重现问题。

    请分享 测试结果。

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Ani。

    我们需要控制 MCU MMR 寄存器、以便从 MCU ESM 模块进行 SOC 复位。

    这与设置 WKUP RST_CTRL 寄存器(地址 43018170)而不是 MCU RST_CTRL 寄存器(地址 04518170)的示例代码所做的操作不同:

    CTRL_addr =(Volatile uint32_t *)(0x43018170);

    *ctrl_addr &=(~(1<<17));


    我添加了代码以同时设置 MCU RST_CTRL 寄存器、但发现 RST_CTRL_MCU_ESM_ERROR_RST_EN_Z 位 已清除。

    Baseaddress =(uint32_t) AddrTranslateP_getLocalAddr (CSL_MCU_CTRL_MMR0_CFG0_BASE);
    DebugP_LOG(“转换后的地址%x\n\r“、CSL_MCU_CTRL_MMR0_CFG0_BASE);

    REG = HW_RD_REG32(基址+ CSL_MCU_CTRL_MMR_CFG0_RST_CTRL);
    DebugP_log(“CSL_MCU_CTRL_MMR_CFG0_RST_CTRL was %x\n\r“、reg);
    CSL_REG32_FINS (Baseaddress + CSL_MCU_CTRL_MMR_CFG0_RST_CTRL、
    MCU_CTRL_MMR_CFG0_RST_CTRL_MCU_ESM_ERROR_RST_EN_Z、0);

    REG = HW_RD_REG32(基址+ CSL_MCU_CTRL_MMR_CFG0_RST_CTRL);
    DebugP_LOG(“CSL_MCU_CTRL_MMR_CFG0_RST_CTRL、位于%x、现在为%x\n\r“、
    Baseaddress + CSL_MCU_CTRL_MMR_CFG0_RST_CTRL、reg);

    这将产生:

    翻译后的地址 4500000
    CSL_MCU_CTRL_MMR_CFG0_RST_CTRL 为 400fff
    84518170 时的 CSL_MCU_CTRL_MMR_CFG0_RST_CTRL 现在为 400fff
    已翻译的地址 43000000
    CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL 为 200ff
    c3018170 处的 CSL_WKUP_CTRL_MMR_CFG0_RST_CTRL 现在已关闭

    此致、
      Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve

    我可以在我这边重现问题、并将在本周通过星期五更新状态。

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Anil。  还有其他问题吗?

      Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ping 线程、使其不会因不活动而自动关闭。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ping 线程、使其不会因不活动而自动关闭。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Steve、

    我可以在下周重现这个问题、下周您可能会得到答复。

    感谢您的耐心。

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Anil

    还有其他问题吗?

      Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ping 线程、使其不会因不活动而自动关闭。