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.

[参考译文] IWR6443:iwr6443中的外部看门狗实现

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/981478/iwr6443-external-watchdog-implementation-in-iwr6443

器件型号:IWR6443

您好!

我正在 IWR 6443中实施用于外部看门狗的 API。IWR 6443将继续向电源管理 IC (PMIC)发送150ms 低电平和50ms 高电平信号。 如果 IWR 6443发生故障并停止响应、 则不会向 PMIC 发送150ms 低电平和50ms 高电平信号。 PMIC 将监控此情况、并开始每隔5秒向 IWR 6443的 WARM _RESET 引脚发送10ms 低电平信号。 因此 IWR 6443将复位。 因此、我可以在 每5秒间隔内获得10ms 的低电平信号到 iwr6443的 warm _reset 引脚、该引脚执行处理器的热 REST 操作。 使用 watchdog_open()、watchdog_control()等 API,我正在尝试实现 watchdog。但由于某些问题,不会发生热复位。

在下面找到我实现的 API。 请告诉我、 我应该做哪些更改来检测 warm 引脚中的10ms 低电平信号并导致处理器热复位。

int32_t ROA_watchdog_Test ()
    Watchdog_Params     观测 dogParams;
    int32_t             errCode = 0;
    Watchdog_ResetMode  resetMode;
    Watchdog_WindowSize 窗口大小;

    /* 初始化  看门狗 驱动程序 */
    Watchdog_init();

    /* 初始化  看门狗 驱动 程序的默认 参数 */
    Watchdog_Params_init (&watchdogParams);

    if (testSelection => (uint32_t)安全装置_app_test_reset)
    {
        WatchdogParams.resetMode = Watchdog_reset_on;
        cli_write ("resetMode = Watchdog_reset_on");
    }
    if (testSelection => (uint32_t)安全装置_app_test_interrupt)
    {
        WatchdogParams.resetMode = Watchdog_reset_off;
        watchdogParams.callbackFxn = watchdogCallback;
        cli_write ("resetMode =watchdog_app_test_interrupt\n");
    }
    watchdogParams.debugStallMode = Watchdog_debug_star_on;
    watchdogParams.windowSize = Watchdog_window_100_percent;
    watchdogParams.preloadValue = 20;
    watchdogParams.socHandle = socHandle;
    watchdogParams.esmHandle = esmHandle;

    /* 打开  看门狗 驱动程序 */
    观察子句柄 = Watchdog_open (0U、 &watchdogParams);
    if (看门狗 Handle == 空)
    {
        cli_write ("错误: 看门狗 驱动 程序打开 失败\n");
        返回 -1;
    }
    其他
    {
        cli_write("看门狗 驱动 程序打开 成功\n");
    }

       
    if (testSelection => (uint32_t)安全装置_app_test_reset)
    {
        /* 等待   看门狗  过期 并 触发  热 复位 */
        cli_write ("等待   看门狗  过期 并 触发  热 复位 \n");
         while (1);
    }
    否则 、如果 (testSelection => (uint32_t) watchdog_app_test_interrupt)
    {
        while (gWatchdogInt = (uint32_t) 0U)
        {
            // 不执行任何操作
        }
        cli_write ("调试:    接收到看门狗驱动程序 NMI ");
    }
    其他
    {
        // 不执行任何操作
    }
    
    /* 在      */上配置看门狗复位模式
    resetMode = Watchdog_reset_on;
    错误代码 = WatchdogHandle 、 Watchdog_CMD_RESETMODE ( void* )&resetMode);
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set Reset Mode failed [Error code %d]\n"、 errCode);
        返回 -1;
    }
    其他
    {
       cli_write ("Watchdog control set Reset Mode Success \n");
    }

    /* 关闭  看门狗 复位 模式  */
    resetMode = Watchdog_reset_off;
    错误代码 = WatchdogHandle 、 Watchdog_CMD_RESETMODE ( void* )&resetMode);
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set Reset Mode failed [Error code %d]\n"、 errCode);
        返回 -1;
    }
    其他
    {
       cli_write ("Watchdog control Reset Off Mode Success \n");
    }

    /* 配置  看门狗 窗口 大小 50% */
    windowSize = Watchdog_window_50_percent;
    errCode = WatchdogHandle 、 Watchdog_CMD_WINDOWSIZE、 (void* )&windowSize;
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set window size failed [Error code %d]\n"、 errCode);
        返回 -1;
    }
    其他
    {
        cli_write ("Watchdog control set window size success \n");
    }


    /* 配置  看门狗 窗口 大小 25% */
    windowSize = Watchdog_window_25_percent;
    errCode = WatchdogHandle 、 Watchdog_CMD_WINDOWSIZE、 (void* )&windowSize;
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set window size failed [Error code %d]\n"、 errCode);
        返回 -1;
    }

    /* 配置  看门狗 窗口 大小 12.5% */
    windowSize = Watchdog_window_12_5_percent;
    errCode = WatchdogHandle 、 Watchdog_CMD_WINDOWSIZE、 (void* )&windowSize;
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set window size failed [Error code %d]\n"、 errCode);
        返回 -1;
    }

    /* 配置  看门狗 窗口 大小 6.25% */
    windowSize = Watchdog_window_6_25_percent;
    errCode = WatchdogHandle 、 Watchdog_CMD_WINDOWSIZE、 (void* )&windowSize;
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set window size failed [Error code %d]\n"、 errCode);
        返回 -1;
    }

    /* 配置  看门狗 窗口 大小 3.125% */
    windowSize = Watchdog_window_3_125_percent;
    errCode = WatchdogHandle 、 Watchdog_CMD_WINDOWSIZE、 (void* )&windowSize;
    如果 (错误代码 < 0)
    {
        cli_write ("Error: watchdog control set window size failed [Error code %d]\n"、 errCode);
        返回 -1;
    }

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

    您好!

    我选择了选项、  

    testSelection =安全装置_app_test_interrupt

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

    您好、Krishna、

    我无法完全遵循这一点。 您是否无法触发外部 WD 超时或 WARM_RESET 引脚无法触发复位?

    此外、在勘误表中给出了热复位、您可能需要执行冷复位。

    谢谢

    Yogesh  

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

    尊敬的 Yogesh:

    感谢您的回答。   我可以在超时后触发外部 WD。 因此、PMIC 将开始向 iwr6443的 WARM _RESET 引脚发送10ms 低电平信号(使用示波器进行检查)。 但我的代码未检测到、并且不会导致处理器中的热复位。  我的问题是 、WERM_RESET 引脚无法触发热复位。 是否应更改"testSelection (testSelection)"选项? 您是否可以建议在 API 实现中进行更改?

    谢谢、

    Krishna Prasad

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

    Krishna、

    为了确认、您已查看此器件上的 warm 重置勘误表、对吧? 我只是想确保我们在前进之前对这一点保持一致。 您可以在我在下面链接的页面上的 MSS #34下查看它。

    https://www.ti.com/lit/er/swrz087c/swrz087c.pdf?ts=1614867141548&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FIWR6443


    此致、
    阿尔茨