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.

[参考译文] CC3235S:如何软件复位

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1163555/cc3235s-how-to-software-reset

器件型号:CC3235S
主题中讨论的其他器件: UNIFLASH

您好!  

我使用的是 SDK 6.10。
如何在 CC3235S 上重置软件?
我尝试调用 MAP_PRCMHibernateCycleTrigger ()或 MAP_PRCMMCUReset ()、但它不起作用。  
调用上述 API 后、操作停止、但不会重新启动。
请告诉我如何进行软件复位。
谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否正在进行 OTA 更新?

    您是如何安装代码的? 通过 Uniflash 或使用 CCS 调试器编程到 SFLASH?

    请详细说明您的用例。

    我认为问题不在于复位本身、而在于 应该在之后运行的新映像。  

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

    您好!

    不可以、 这不是 OTA 更新。

    使用 CC3235S 的定制板、并通过 Uniflash 对 SFLASH 进行编程。  

     由于定制板的硬件设计中缺少外部引脚硬件复位、 因此我将使用使用使用 GPIO 中断的软件复位、以便用户可以复位模块。 我没有尝试运行新映像、我正在尝试运行现有映像。

    我甚至检查了 GPIO 回调函数在 GPIO 的下降沿工作、并在回调函数中调用 MAP_PRCMHibernateCycleTrigger ()或 MAP_PRCMPCuRESET ()、但它不会重新启动。

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

    您好!

    您的中断处理程序是否设计正确以防止重新进入(e.g.contact b弹跳)? 如果没有、则需要修复代码的此错误(例如、在 ISR 处理程序开始时禁用 GPIO 中断)。

    1月

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

    您好!

    我 没有考虑防止再次进入。 根据您的建议,我在 回调函数的开头添加了 GPIO_disal反反复 Int() API。

    void softResetGPIOCallback(uint8_t index)
    {
        GPIO_disableInt(CONFIG_GPIO_CTS);
        UART_PRINT("\n\rDetect Falling trigger at CTS Pin!!\n\r");
    
        sl_Stop(SL_STOP_TIMEOUT);
    
        MAP_PRCMMCUReset(1);
    
        return;
    }

    但是,调用 map_PRCMMCUREset() API 后,它仍然不会重新启动。 (调用后、所有操作都停止)

     

    您能给我一些关于软件复位的建议吗?

    OT 运行。 英文

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

    您好!

    在我的代码中,我使用 SoC 休眠复位,其工作方式与 API PRCMHibernateCycleTrigger()类似。 我的代码是:

      MAP_PRCMHibernateIntervalSet(330);
      MAP_PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
      MAP_PRCMHibernateEnter();

    从中断上下文调用 sl_Stop() API 通常不是最佳做法。 更安全的方法是在 ISR 处理程序中设置事件、并在线程中处理复位。

    1月

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

    感谢你的建议。

    根据您的建议、我创建线程来监控复位事件、ISR 处理程序设置事件。 (在复位线程中、当设置事件时、我调用 sl_stop ()和 PRCMHibernateCycletTrigger ()))
    但是、它也不起作用。

     

    但是、如果在除 sl_stop()之外的之后运行、则复位有效! 但是、我不知道原因。

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

    您好!

    调用 unblock 时,复位线程是否卡在 sl_Stop() API 内?

    1月

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

    是的、它确实卡在 sl_Stop() API 中

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

    此外,sl_WlanDisconnect () API 也是如此。 (如果连接到 AP、则此 API 调用)

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

    您好!

    您的代码中需要存在其他问题。 没有理由停留在 sl_Stop()内。 您需要遇到崩溃的主机驱动程序、堆栈溢出、任务优先级问题或类似问题。 但很难说什么。

    1月

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

    您好!

    这个问题似乎难以确定原因。

    但是、当在调用 PRCMHibernateCycleTrigger()之前未使用 sl_Stop()时、将执行复位。

    在不停止网络处理器的情况下重置网络处理器时、是否需要考虑任何问题?

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

    您好!

    我认为主要原因是在写入操作进行时防止 SPI 闪存损坏。

    但是、我认为 SL_ API 在您的案例中冻结时的状态不是一个好状态。 我认为您需要调查此问题、除非您想要发布非常不可靠的产品。

    BTW... 您是否已更新设备内部的最新 ServicePack?

    1月

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

    感谢你的答复。

    我使用了 SDK 6.10和 Service Pack 4.13

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

    除了 Jan 提到的内容、在 复位之前、需要在 OTA 之后(即、如果您更新了 MCU 映像文件)将器件进入测试模式、然后才需要 sl_Stop。 但这目前与您无关。

    您是否已经完成了硬件审查流程?  https://www.ti.com/tool/SIMPLELINK-WIFI-DESIGN-REVIEWS

    我们在 sl_Stop 方面遇到了几个问题、但在过去一两年中没有。 因此、如果您使用的是最新的驱动程序和 SP、则不会出现这种情况。

    是否有其他线程与触发复位的线程并行运行? 如果是、他们在做什么?

    建议在 调用  PRCMHibernateCycleTrigger()之前禁用所有中断(Hwi_disable()。

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

    您好!

    经过多次测试、我们得到了以下结果。
    如果在 main_tirtos.c 中创建的主线程中调用 sl_Stop ()进行复位、sl_Stop 不会卡在内部。 但是,当在主线程中创建的 resetMonitor 线程上调用 sl_Stop()时,它确实会卡在内部。 (resetMonitor 线程由 GPIO 回调中发生的事件驱动、并停止 GPIO 回调中的所有中断。)

    在 resetMonitor 线程正在运行的情况下(当 sl_Stop 卡在内部时)、主线程在用户命令接口的 while 循环中执行命令解析和处理。

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

    您好!

    从您的 resetMonitor 线程调用 sl_Stop()时,此类问题不应有任何特定的原因。

    几个问题:

    • 我假设您使用的是 TI-RTOS。 对吧? 哪些版本(SYS/BIOS 6或 TI-RTOS7)?
    • 您在主线程上做了什么? 在处理用户命令界面时、您是否会调用 SL_ API 调用? 该线程中有哪些 sl_ API 调用? 您是否在此线程中使用套接字 API? 是否使用阻塞套接字?
    • 如何设置线程的优先级(resetMonitor、主线程、sl_Task)?

    1月

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

    您好!

    • 我假设您使用的是 TI-RTOS。 对吧? 哪些版本(SYS/BIOS 6或 TI-RTOS7)?

    是的、我使用的是 TI-RTOS。 我的项目基于 \examples\rtos\cC3235S_LAUNCHXl\demos\network_termina\tirtos\ccs。  

    • 您在主线程上做了什么? 在处理用户命令界面时、您是否会调用 SL_ API 调用? 该线程中有哪些 sl_ API 调用? 您是否在此线程中使用套接字 API? 是否使用阻塞套接字?

    在处理用户命令接口时,请根据命令使用 SL_* API,并且在使用与套接字相关的连接命令时,结束用户命令接口并创建用于数据处理的套接字线程。

    但是,我没有在用户命令界面中使用 SL_* API,因为在上述测试情况下,我们没有使用任何命令。

    在初始化过程中、执行了 SlNetConn_init()、WiFi_if_init()和 OTA_if_init()。

    更具体地说,我的项目使用了 SL_* API,但 SlNetConn API 也用于使用 OTA_IF 模块。 更改与 slNetConn API 相关的连接,并将现有的 SL_* API 用于其余函数。

    • 如何设置线程的优先级(resetMonitor、主线程、sl_Task)?

    线程为主线程、sl_Task、workQ (在创建 OTA 模块中)、SlNetConn_Process、SlWiFiConn (在创建 WiFi 鼠标中)、UART 读取、LED 显示屏、ResetMonitor。

    优先事项如下。

    主线程:1.

    SL_Task:9.

    工作问:2.

    SlNetConn_Process:1.

    SlWiFiConn:9.

    UART 读取:7

    LED 显示:5.

    resetMonitor:7.

    API 英文

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

    使用 SlNetConn_Process 时、建议在调用 sl_Stop 之前调用 SlNetConn_Stop。

    否则、可能存在竞争条件、从而导致 SlNetConn 模块出现问题。

    不过、我不认为 sl_Stop 应该卡住。

    通常、我建议 您确保按照  初始化序列的相反顺序执行关闭/复位。

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

    您好!

    调用 slNetConn_Stop 之前调用了 slNetConn_Stop。

    但它也是如此。

    卡在 SL_Stop 或 SL_WlanDISCONNECT 内部。 连接到 WiFi 后、它卡在 SlNetConn_Stop 内(sl_Wlandisconnect 在 SlNetConn_Stop 内调用)

    OTA 升级在我实现的用户命令界面中实现、并使用 OTA_IF 模块实现。 如果可以进行 OTA 安装、则会调用 OTA_IF_INSTALL () API、而不会卡在 sl_Stop 内。

    可能预计这是我实施的代码中的问题、并且在短时间内不可能找到原因。

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

    是的、我现在唯一可以建议的是发送 NWP 日志(请参阅 编程人员指南中的第20章)、我将检查是否可以看到任何内容。

    从理论上讲、从不同线程调用 sl_Stop 时应该有任何差异。 只需确保非主线程实际上是一个线程(即代码不是从中断上下文中执行的)-但根据您的描述、应该是可以的。

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

    您好!

    我的代码是在线程中调用 sl_Stop 而不是中断上下文。

    ...
    void * mainThread(void * arg)
    {
        GPIO_setCallback(CONFIG_GPIO_SOFTRESET, resetGPIOCallback);
        GPIO_enableInt(CONFIG_GPIO_SOFTRESET);
        ...
        pthread_t resetMonitorThread;
        softResetThread = OS_createTask(7, 256, resetMonitorThread, NULL, 0);
        ...
    }
    ...
    
    void resetGPIOCallback(uint8_t index)
    {
        GPIO_disableInt(CONFIG_GPIO_SOFTRESET);
        UART_readCancel(uartHandle);
        HwiP_disable();
        DBG_PRINT("\n\rDetect Falling trigger at CTS Pin!!\n\r");
    
        gSoftReset = 1;
    
        return;
    }
    ...
    
    void * resetMonitorThread(void* arg)
    {
        while(1)
        {
            usleep(100000);
    
            if (gSoftReset)
            {
                SlNetConn_stop(SlNetConnEventHandler);
                DBG_PRINT("1\n\r");
    //            sl_WlanDisconnect();
    //            DBG_PRINT("2\n\r");
    //            sl_Stop(SL_STOP_TIMEOUT);
    //            DBG_PRINT("3\n\r");
    
                DBG_PRINT("reseting the platform...\n\n\n\r");
                MAP_PRCMHibernateCycleTrigger();
            }
        }
    }

    下面是按案例列出的 NWP 日志。

    "10.28_reset_without slstop":它仅在 resetModtor 线程中调用 MAP_PRCMHibernateCycletTrigger()。 它可以进行重置

    "10.28_reset_with _slstop":它在 MAP_PRCMHibernateCycletTrigger()之前调用 sl_Stop()。 卡住。

    "10.28_reset_with _slwlandisconnect":在 MAP_PRCMHibernateCycleTrigger()之前调用 sl_WlanDisconnect ()。 卡住。

    "10.28_reset_With_slnetconnstop":连接到 AP 后,在 MAP_PRCMHibernateCycleTrigger()之前调用 SlNetConnstop()。 它可以进行重置。

    "10.28_RESET_OTA":它使用 OTA_IF 进行 OTA 升级。 它可以重置和 OTA 提交。 (新图像的波特率不是921600bps。 因此、OTA 后不会写入日志。)

    e2e.ti.com/.../10.28_5F00_cc3235s_5F00_logs.zip

    SL_Stop 引擎

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

    "10.28_reset_With_slnetconnstop":连接到 AP 后,在 MAP_PRCMHibernateCycleTrigger()之前调用 SlNetConnstop()。 它可以进行重置。

    如果这个可以正常工作、那么这就是您应该使用的内容。 您使用 SL_WlanConnect/Disconnect 或   SlNetConn_Start/Stop 进行连接(不要在两种方法之间混用)。

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

    如果连接到 AP、则似乎会调用 slnetconn_stop ()内的 sl_WlanDisconnect ()、但不会调用 sl_Stop。

    是否可以在 MAP_PRCMHibernateCycletrigger()之前不调用 sl_Stop()?

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

    右侧、应 在 slnetconn_stop 之后调用 sl_Stop。

    只有 在 OTA 更新之后、才必须执行 PRCMHibernateCycleTrigger 之前的 SL_Stop。