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.

[参考译文] CC3120MOD:调用 sl_Stop、后跟 sl_Start、有时会返回[-2005]错误代码?

Guru**** 2556730 points
Other Parts Discussed in Thread: CC3120

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/763335/cc3120mod-call-sl_stop-followed-by-sl_start-sometimes-return--2005-error-code

器件型号:CC3120MOD
主题中讨论的其他器件:CC3120

您好!

对于非 RTOS 环境、我使用 simplelink_sdk_wifi 插件_2_30_00_10驱动程序连接 CC3120至 STM32。 一切正常、但我在重新调整器件的等级复位(调用 sl_Stop、后跟 sl_Start)时遇到了一个问题。 当我复位器件时、有时它会生成错误代码[-2005]"//* API 因主机驱动程序检测到错误而中止、然后重复相同的错误。

我必须生成我所做的错误,我每隔5秒调用一次重置设备,直到它正常重置,但在一段时间后(几分钟后),它开始抛出错误[-2005], 如果5秒后继续复位器件、则永远不会再次复位、同样的错误也会重复。

请解释发生这种情况的原因、并建议一些解决方案来解决此错误。

此致、

Shubham

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

    您好、Shubham、

    您能给我一点澄清一下这种情况吗?

    1) 1)错误是在调用 sl_Start()时生成的、对吧?

    2) 2)如果错误发生一次、是否会出现对 sl_Stop()的以下调用以清除主机驱动程序中的 g_SlDeviceStatus 值?

    当您执行停止/启动操作以重置设备时、请确保您允许设备的最短休眠时间。 请参阅 CC3120数据表中第4.13.3.3节的表4-5。

    www.ti.com/.../cc3120.pdf

    最棒的

    本·M

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ben、
    我使用负测试用例进行测试。 如果我的系统通过任何方式获得此类错误、例如 WiFi 模块由于电源而复位、但不是主机、则不应在那里挂起。

    我要做的是生成此错误、我只需通过接通 CC3120的电源来重置 WiFi 模块、而不会干扰主机微控制器(STM32)。 然后它开始抛出错误"-2005"。 但是、再次打开 WIFI 模块电源后、应使用 sl_stop/sl_start 命令正确复位。 但并未发生。 这就是我想知道的。

    应该通过编程从该错误中执行什么操作?


    1) 1)调用 sl_start 或 sl_stop 时生成错误、并且错误与"-2005"相同。
    2)并且我发现一旦出现错误、sl_stop 就无法清除 g_SlDeviceStatus 标志。 标志值为0x0700、不变。

    我尝试在 sl_stop 和 sl_start 之间提供时间、正如您提到的、用于休眠的时间、但问题是相同的。

    此致、

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

    您好、Shubham、

    感谢您澄清、这是一个测试用例、其中 Wi-Fi 电源被移除、主机可继续运行以模拟错误条件。

    正确的做法是、一旦 Wi-Fi 器件使用 sl_Start/sl_Stop 进行下电上电后、应正确复位。 我认为网络处理器正在复位/将正确复位。 我认为错误来自未清理的主机驱动程序的状态。

    应该发生的情况是、当你调用 sl_Stop 时、全局状态变量的"Restart_Required"位应该被清除。 这将是状态变量中的位8 (0x0100)。 这看起来没有根据您看到的值清除、因此后续对 sl_Start 的调用失败、因为主机驱动程序认为仍需要重新启动才能从错误中恢复。

    请单步执行 sl_Stop()例程(并进入_SlDrvDriverCBDeinit()),以确保所有这些宏按预期工作,在再次调用 sl_Start()之前将 g_SlDeviceStatus 值清回"0"-

    • sl_unset_restart_required
    • sl_unset_device_stop_in_progress
    • sl_unset_device_started

    最棒的
    本·M

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

    我单步执行 sl_Stop 并发现它没有清除这些标志。 在调用此函数之前、它甚至不会调用此_SlDrvDriverCBDeinit()和 sl_stop 返回。 调用此 sl_DRV_LOCK_GLOBAL_LOCK_FOREVE_(GLOBAL_LOCK_FLAGS_NONE)后会返回。 这就是它无法清除这些标志的原因。 请参阅计划中的以下注释。

    是否有任何方法可以在我所面临的这种情况下实现复位?


    sl_stop()


    /*停止接口时锁定*/
    SL_DRV_LOCK_GLOBAL_LOCK_FOREVY (GLOBAL_LOCK_FLAGS_NONE);/***** 注:只能从这里返回**** /

    /******* 注意:程序在出错后不在此处通信它从上部例程*******返回 /
    SL_IfRegIntHdlr (NULL、NULL);
    sl_DeviceDisable();
    RetVal = sl_IfClose (g_PCB->FD);

    (void)_SlDrvDriverCBDeinit();

    /*清除正在停止标志*/
    sl_unset_device_stop_in_progress;

    /*清除设备启动标志*/
    sl_unset_device_started;

    SL_DRV_LOCK_GLOBAL_UNLOCK (false);

    return (RetVal);



    此致、

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

    我相信我现在看到了问题的原因。 如果 sl_is_restart_required、sl_DRV_lock_global_lock_forever ()将永远不会成功。

    在调用 sl_Stop()之前,如果在主机驱动程序之外调用 sl_unset_restart_required,您能否尝试测试它是否会正确复位? 这只是为了测试其余复位是否正常工作、不应将其用作永久的权变措施。

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

    我一段时间内没有听到您的反馈、因此我要关闭这个线程。 如果您尚未解决问题、请在此处发布回复、该主题将重新打开。 如果该主题在您可以再次发布之前锁定、请按顶部的"提出相关问题"按钮、打开链接到此主题的新帖子。

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

    很抱歉耽误你的回答

    我尝试了您建议它不起作用的方法、同一个问题在那里。 现在、我面临类似的问题、当出现任何致命错误时、我尝试重置(编程指南中提到的 sl_stop 和 sl_start)器件返回相同的错误[-2005]。 是否有任何解决方案、因为现场设备可能会在某个时间生成致命错误、然后如何在不复位主机的情况下复位器件 CC3120?

    现在、它已成为我们产品开发的瓶颈。 请尽快解决。

    谢谢你
    此致、

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

    我正在等待这一问题的答复,请你帮我解决。 是否有任何解决方法。 因为我们处于产品开发的原型阶段。

    此致、

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

    同一问题的含义是什么? 您能在观察窗口中看到状态变量中的位在 sl_Stop 调用之前被成功清除吗? 如果是、sl_Stop()调用现在在哪里返回错误代码?

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

    我只想知道、每当我的器件发生-2005错误(由于主机驱动程序检测到错误而导致 API 中止)时、如何从该错误中退出。 因为在我的情况下、我遵循复位序列、它不会复位并引发类似的错误、这意味着它卡住了、因为我检查的标志无法通过 sl_stop 清除(正如您要求检查上面线程中的某些标志)。 我只想知道是否有任何方法可以在不复位主机微控制器的情况下解决此错误。

    此致、

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

    我将其标识为主机驱动程序中的错误。 这就是我在一段时间前的这一发言所说的:
    "我相信我现在看到了问题的原因。 如果 sl_is_restart_required、sl_DRV_lock_global_lock_forever ()将永远不会成功。"

    已报告此问题、并将使用新的主机驱动程序版本进行修复。 在该版本可用之前(这将更新 sl_Stop()调用以确保其清除标志并按预期将器件复位),必须实施权变措施。

    我需要您的帮助、以确认我建议的变通办法将按预期工作、这样您就不必在发生这种情况时仅重置主机微控制器。

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

    您好 Ben、  

    感谢您的回答!

    在新版本发布之前、我需要解决此问题的方法。 请告诉我在这种情况下重置器件的步骤、然后我将实施并在测试后确认您。

    我正在等待您的回复、因为我必须尽快完成产品代码并投入生产。

    此致、

    Shubham

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

    请尽快为我提供解决此问题的步骤。

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

    权变措施应该是在调用 sl_Stop()之前取消设置应用程序中状态变量中的 RETART REQUIRED 位(正如在 sl_unset_restart_required 中完成的那样)。

    如果这不起作用(正如您的帖子所建议的),请解释 sl_Stop()函数为何看起来不起作用。 它从函数内部的哪个位置返回错误代码? 调用状态变量后的值是多少?

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

    您好 Ben、

    感谢您的回复!

    我的问题得到了解决、只有在我调用 sl_Stop()之前的全部三个复位宏(如下所述)位时、我的问题才会得到解决。

    sl_unset_restart_required
    sl_unset_device_stop_in_progress
    sl_unset_device_started

    请确认在 sl_stop()之前调用这些宏是否存在任何问题?

    此致、

    Shubham

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

    您确定这三项都是必需的吗?

    我同意 sl_unset_restart_required 和 sl_unset_device_stop_in_progress 应影响 sl_Stop ()的行为,但器件应在调用 sl_Stop ()之前启动,因此该测试不需要 sl_unset_device_started。

    话虽如此、这些都不是必需的、这完全是一种权变措施。 当需要恢复时,我不希望仅在 sl_Stop()之前调用这些函数出现问题。 但是、这并不是我们团队正式测试过的东西。 实际修复将包含在我们的下一个 SDK 版本中。 请在没有解决方法的情况下再次测试此方案。

    此致、
    本·M