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.

[参考译文] CC3220SF:CC3220SF 的软件复位/重启

Guru**** 2577385 points
Other Parts Discussed in Thread: CC3220SF, SEGGER, CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/986932/cc3220sf-sw-reset-reboot-of-cc3220sf

器件型号:CC3220SF
主题中讨论的其他器件: SEGGERCC3200

尊敬的 TI:

在我的项目中、我随机观察、但不经常观察(即使现在使用特定的软件、它在100%情况下也可重现)
应用 OTA FW 更新和调用后的情况  

PRCMHibernateCycleTrigger();

使用 CC3220SF 的电路板不会重新启动。 当使用调试器进行检查时、它会调用 来自 PRCMHibernateCycletrigger()的所有代码;并且"冻结"。
它不会在之后启动。

我的第一个问题与硬件有关:我是否应该检查特定的内容? 我指的是此主题:  
https://e2e.ti.com/support/wireless-connectivity/wifi/f/wi-fi-forum/795818/cc3220mod-mcu-reset-after-a-local-ota-update

如果我排除这是硬件问题、我需要知道执行软件复位的正确方法是什么。
我找到了提供下一个触发软件复位选项的相关线程:

https://e2e.ti.com/support/wireless-connectivity/wifi/f/wi-fi-forum/919422/launchxl-cc3235sf-ota-sys-mcuflashimg-bin-with-sl_fs_write_bundle_file-doesn-t-take-effect

https://e2e.ti.com/support/wireless-connectivity/wifi/f/wi-fi-forum/896487/cc3220moda-soc-freezes-on-rebooting-when-it-invokes-method-prcmmcureset

提前感谢您的支持!

此致
Jiří μ A

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

    您好 Jiří、

    几个问题:

    • OTA 后、您的所有重启代码看起来如何? 例如、我使用此代码在 OTA 后重新启动、我从未遇到过任何问题:

    //*****************************************************************************
    //* DeviceReset(int stop)                                                     *
    //*                                                                           *
    //* restartovani CC3220 SoC                                                   *
    //*                                                                           *
    //*   stop ... typ restartu:                                                  *
    //*            0 - restart bez deaktivace NWP. Tento zpusob restartu neni     *
    //*                prilis bezpecny. Pro nektere situace muze byt uzitecny.    *
    //*            1 - restart s deaktivaci NWP a pozastavenim sitovych tasku.    *
    //*                Pouziti tohoto zpusobu by melo byt bezpecne a z toho       *
    //*                duvodu preferovane.                                        *
    //*                                                                           *
    //*****************************************************************************
    static void DeviceReset(int stop) {
    
      if (stop != 0) {
        // cekani na dokonceni aktualni komunikace
        osi_Sleep(200);
      }
    
      // nastaveni WLAN na stav idle (blokovani sitlovych tasku)
      WLANState = WLAN_STATE_IDLE;
      // inkrementace cisla session
      WLANSessionNr++;
    
      // cekani na zaparkovani sitovych vlaken
      osi_Sleep(100);
    
      if (stop != 0) {
        // vypnuti NWP
        sl_Stop(200);
      }
    
      // kompletni restart SoC pomoci HIB
      MAP_PRCMHibernateIntervalSet(330);
      MAP_PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
      MAP_PRCMHibernateEnter();
    }

    • 您使用的是什么 SDK 版本和 ServicePack?
    • 您是否在 TI OTA 示例中看到了相同的问题?
    • 如何连接模块上的 nRESET 引脚?

    1月

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

    你好,Jan!

    感谢您的快速响应。

    • 我们的软件复位代码如下所示:

    void power_cycle (void)

       notification_send (...); //此处,我们将告知系统的其他部分我们已停止运行
                        //实际上,我们在这里只调用 httplib_stop_listening (..) 功能

       Sleep (8); /*确保留出时间让其他组件处理通知*/

       如果(b_nwpRunning)   // NWP 可能不会运行,因为它只是重新启动
       
         if (sl_Stop (200)!= sl_RET_CODE_OK)
         {
           assert_always();
         }
       

      PRCMHibernateCycletrigger();

      assert_always();  /*不应在此处获得*/

    • 我们正在使用的 SDK 版本: TI CC32xx SDK v3.20.0.6 (在本地进行了一些修改);ServicePack 版本: SP_3.13.0.3_2.0.0.0_2.2.0.6
    • 我尚未尝试过 TI OTA 示例
    • nRESET 引脚悬空(在我的位置仅通过 J-tag 电缆连接到 Segger J-link 调试器)-但我们也会在未连接调试器的情况下观察到此问题

    此致
    Jiří μ A

    PS:我无法格式化 C 代码、我收到了此错误消息

    访问被拒绝

    您无权访问此服务器上的"">e2e.ti.com/.../configure。

    参考编号18.5e1d4117.1616060937.1077f470

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

    您好 Jiří、

    我在您的代码和使用 PRCMHibernateCycleTrigger() API 时没有发现任何错误。 我唯一的想法是尝试在 sl_Stop()和休眠 API 之间增加小延迟。 为了进行测试、请尝试使用最新的 ServicePack。

    如果您无法通过上述步骤解决您的问题、下一步将是捕获 NWP 日志(SWRU455第20章)。 您需要等待 TI 响应、因为我没有用于分析 NWP 日志的工具。

    1月

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

    您好 Jan、

    我将尝试从中进行修改

    PRCMHibernateCycleTrigger();

    更改为

    PRCMHibernateIntervalSet(330);
    PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
    PRCMHibernateEnter();

    因为它看起来很有用。 但很难验证此更改。 在本例中、它起作用
    嗯、但需要更多的用例测试。

    因此、我不确定是否应该添加提到的小延迟(200ms?) 或 IF
    我还应更改为上述重新引导过程。
    我将通过两个步骤对其进行测试。 首先、我将添加延迟并查看结果是什么。

    我们无法使用最新的 Service Pack、因为 我们无法将其降级(与公司外交付的设备相关)
    我需要广泛测试我的修复程序、因为它似乎是随机发生的。

    我将在任何情况下记录 NWP 日志、因为我的 SW 每次都在我的位置出现故障。

    此致
    Jiří μ A

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

    您好 Jiří、

    我已经仔细研究了 driverlib 中的 PRCM 休眠 API。 我认为我的代码 PRCMHibernateIntervalSet() PRCMHibernateWakeupSourceEnable()没有执行它们的任务。 我将之前项目中的代码与 CC3200一起使用、但我没有意识到这样的代码已经位于 driverlib PRCMHibernateEnter() API 中。

    添加此项可能会解决 sl_Stop()和休眠复位之间的时间延长所导致的问题。 200ms 对我来说是合理的。

    1月