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:在断开连接期间从-2006错误中恢复

Guru**** 2563250 points
Other Parts Discussed in Thread: DRV8873, CC3120MOD

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/856595/cc3120mod-recovering-from-a--2006-error-during-disconnect

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

我们有一个定期向云服务器发送数据的设备。  为了确保连接可靠、我们通过拔下路由器以突然断开连接进行了多次测试。  其中一些情况恢复正常、另一些则帮助我们发现我们的软件无法正确处理断开连接后的问题。  一种无法正常恢复的情况是-2006错误。  我们发现、如果程序在发生断开连接错误后等待了大约30秒、我们每次都能够恢复。  断开连接后、似乎 Wi-Fi 线程需要一些时间来清理。  我们使用的是运行 TI-RTOS 的 MSP432P4111、云服务器通信在其自己的低优先级线程上运行。  解决方案是可以接受的。  导致恢复延迟的原因是什么?  我们缺少什么吗?  (我注意到 Wi-Fi 驱动程序的超时时间很短、为20秒)。

Gary

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

    Gary、

    提高云任务的优先级是否会缩短响应时间?

    BR、

    Vince  

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

    我没有想到这一点。  我目前有2个优先级为9的任务、它们依赖于实时。  为了避免致命的 Wi-Fi 错误、我必须将锯动任务设置为10。  唯一的另一个任务是主线程。  2个优先级为9的任务应该处于睡眠状态。  我可以将其移动得更高、但不能超过9个优先级任务。因此、我将尝试将其移动到优先级为3的主线程之上。

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

    您好、Gary、

    您是否仍然遇到此问题的问题?

    此致、

    Vince  

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

    您好、Vince、我们还没有时间尝试您的建议。  我们计划在下周初进行。

    Gary

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

    我最终有时间更改优先级、这一点没有任何影响。

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

    您好、Gary、

    -2006是无效输入。 返回此错误的函数是什么? 我们能否在复位期间验证参数?

    BR、

    Vince

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

    尊敬的 Vincent:

    我能够执行一些额外的优先级测试。 这与最初的解释略有不同、但症状相同。  在数据发送到云时进行实时洒水喷头操作。  我遇到的错误是:

    云故障=-2005
    [错误]-致命错误:未检测到 Cmd Ack [命令操作码= 0x8c8c]

    任务中 运行。  下面列出了当前的优先级。  最初、SpringlerTask 是最高优先级、但我能够放松洒水喷头计时、以便它可以处理1ms 的变化、这似乎解决了洒水喷头计时问题与 WiFi。  将 CloudMessageSend 任务上移似乎有所帮助、但它没有解决问题。  使 SLNET_IF_WIFI_PRIO 足够高似乎也很重要、尽管我不确定原因。  

    空闲任务0
    MainThread 3.
    SprinkerTask 6.
    SprinkerTask 6.
    SL_任务10
    CloudMessageSend 8.
    SLNET_IF_WIFI_PRIO 7.
    是否有进一步调试的建议?
    谢谢、
    Gary
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gary、

    错误-2005是 sl_api_aborted、这意味着主机驱动程序出错。 您能否从器件捕获 NWP 并将其发送给我?

    https://processors.wiki.ti.com/index.php/CC3120_%26_CC3220_Capture_NWP_Logs

    我应该能够诊断这些问题的发生。

    BR、

    Vince

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

    文森特

    很抱歉耽误你的时间。  周五和周六、当我尝试回复时、TI 网站对我不起作用、不确定原因。  这是一个具有 CC3120MOD 的定制板、我们没有引脚排列 NWP。  今天、我能够从坏板上的模块中取出板顶、这样我可能仍然能够获取日志。  在这个电路板上让我感到惊讶的一点是、我们必须在 SPI 时钟线路上添加一个1K 电阻器到 CC3120MOD。  我们有许多 DRV8873在没有时钟电阻器的另一个 SPI 端口上运行类似的配置。  我正在尝试使用其他电阻器值来查看其影响。  电阻过小会导致同步误差。  当系统连接到云时、第一步是进行身份验证、连接-身份验证-断开连接。  下一个操作是使用修改后的 URI 重新连接并发出 HTTP 请求。  我注意到、在身份验证正常后、在 HTTP 请求正常期间、如果请求正常、但响应失败、则-2005总是失败。  请告诉我这是否会引发其他想法。

    Gary

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

    尊敬的 Vincent:

    我附加了日志文件。  我已经在硬件和软件方面尝试了我能想到的所有东西、因此我很渴望看到您能找到的内容。

    Garye2e.ti.com/.../IrriGreen_2D00_NWP_2D00_CC3120MOD.txt

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

    Gary、

    遗憾的是、日志已损坏。 您能告诉我您使用的是哪个 Service Pack 版本吗?

    BR、

    Vince  

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

    文森特

    服务包: SP_3.10.0.5_2.0.0.0_2.2.0.6。  是否可能未正确使用 TeraTerm?  此外、接线也可能不牢固。  我可以在文件中看到一些文本。  如果您能让我知道日志应该是什么样子、我可以对我的末尾进行故障排除

    Gary

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

    您好、Gary、

    TeraTerm 应以921600的波特率连接到 COM 端口。 通常最常见的问题是没有共同点。

    此致、

    Vince

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

    尊敬的 Vincent:

    这可能是个问题、因为我在芯片上连接了一根相当长的导线、并在几英寸远的地方使用了一个接地连接。  不过、我有一些好消息、我在 http_client.c 中找到了软件解决方案  在函数 readRawResponseBody()中,有一段代码我更改了:

           if (buffereddBodyLen >= len)
           {
               memcpy (body、cli->validBufStart、len);
               cli->validBufStart += len;
               返回(len);
           }
           其他
           {
               memcpy (body、cli->validBufStart、buffereddBodyLen);
               cli->validBufStart += buffereddBodyLen;
           }

    在代码的上述部分中、我将"buffereddBodyLen > len"更改为"buffereddBodyLen >= len"。  如果不进行此更改、以下行:

       RET =
           slNetSock_recv (cli->ssssssock、body + buffereddodyLen、len -
                          buffereddBodyLen、
                          0);

    长度参数将为0、并导致 sl_device_event_fature_driver_abort。  即使是错误、套接字函数也没有检查这种情况、这让我有点惊讶。  事实之后,我意识到以前可能没有找到此错误,因为 在我的代码正在使用时,HttpClient_readResponseBody ()的 DO 循环应该是 while (more_flag && ret >0)(more_flag && ret >= 0)。  由于 MoreDataFlag 仍然设置为0响应、我假设这是正常的、实际上、如果响应为0、则无论 MoreDataFlag 如何、都可以停止获取响应。

    感谢您的支持、

    Gary