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.

[参考译文] CC3301:如何了解 WiFi 连接失败的原因

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1365018/cc3301-how-to-obtain-the-reasons-for-wifi-connecting-failure

器件型号:CC3301

您好!

在 RTOS SDK 中,我们调用 Wlan_Connect () 以连接到 AP, 如果成功,主机将接收 wlan_event_connect 事件, 如果失败,主机将只获取超时。

因此我们无法找出失败的原因。 我们是否有任何方法可以获取连接失败的原因代码。

谢谢。

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

    您 只会 在 断开连接时获得原因代码。

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

    您可以使用802.11监听器 检查连接中的故障或向我们发送 NWP 日志。

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

    我们想要的是知道程序中失败的原因代码、例如错误的密钥。

    当连接失败时、就不会发生断开事件。

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

    对于大多数此类情况、您应该会得到断开指示。  

    您是否有任何特定的地方没有看到断开事件?

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

    您可以看到以下代码来自您的 SDK、仅在超时时、我们可以知道连接失败、不知道详细原因、是否有其他方法可以知道连接失败而不超时。 实际上,当超时时,它将调用 Wlan_Disconnect (),这将获得一个断开事件,但原因代码总是  

    WLAN_DISCONNECT_USER_INITIALIZED (200)。   
    我们可以看到 wlan_if.h 中定义了许多有关断开 连接的原因代码、我的问题是如何获得有关连接失败的这些原因代码、
    #define WLAN_DISCONNECT_STA_NOT_AUTH                     (9)
    #define WLAN_DISCONNECT_INVALID_PAYWISE_CO密码               (19)
    #define WLAN_DISCONNECT_USER_INITIALIZED                    (200)
    #define WLAN_DISCONNECT_AUTH_TIMEOUT                     (202)
    #define WLAN_DISCONNECT_ASSOC_TIMEOUT                    (203)
    #define WLAN_DISCONNECT_SECURITY_FAILURE                   (204)
    #define WLAN_DISCONNECT_while 连接                  (208)
    #define WLAN_DISCONNECT_MISING_CERT                     (209)
    #define WLAN_DISCONNECT_CERTIFICATE_EX                 (210)

      /*连接至 AP */
      RET = Wlan_Connect ((const signed char *)(ConnectParams.SSID)、
                strlen ((const char *)(ConnectParams.ssid))、
                null、
                ConnectParams.secParams.Type
                (const char *)(ConnectParams.secParams.Key)
                (( ConnectParams.secParams.Key != NULL)? strlen (( const char *)ConnectParams.secParams.Key : 0 ));

      assert_and_clean_connect (ret、WLAN_ERROR、&ConnectParams);


      /*等待连接事件:
       *为了验证连接是否成功,
       *我们挂起两个传入事件:已连接和已获取 IP。
       *下面的信标将由这个(主)上下文挂起。
       *它们将在发生异步事件时发出信号
       *表示 NWP 已连接并获取了 IP 地址。
       *有关详细信息,请参阅此应用程序自述文件。
       */
      if (IS_STA_CONNECTED (APP_CB.Status))
      {
        RET = OSI_SyncObjWait (&APP_CB.con_CB.connectEventSyncObj
                    WLAN_EVENT_TOUT);
        if (ret == TIMEOUT_SEM)
        {
          uart_print ("\n\n\r[wlanconnect]:连接到 AP 时超时:%s\n\n\r"
                ConnectParams.SSID);
          Wlan_Disconnect ();
          FreeConnectCmd (&ConnectParams);
          return (-1)
        }
      }


      FreeConnectCmd (&ConnectParams);
      返回(0);

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

    好的。 我们需要对此进行检查。

    我认为对于大多数错误、您应该期望断开连接事件带有真实的错误代码(至少是调用802.11断开连接事件的错误)。

    该超时适用于 AP 未响应的情况。 如果情况不是这样-我们将修复它。  

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

    您是否收到了断开连接事件(即向 Wlan_Start 注册的事件处理程序-您应该接收到事件 WLAN_EVENT_DISCONNECT、而参数(WlanEventDisconnect_t)应该包括 ReasonCode)

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

    我在 Wlan_Start 中注册了事件处理程序、如果连接成功、我可以获得 wlan_event_connect 事件、如果连接失败、我则无法获得

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

    我能够再现它。  

    实际上、在某些情况下、您只得到超时值而没有得到与错误代码相关的断开连接。

    我们将 对其进行调试、并在下一个版本中提供修复。