微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 WINC1500 与 PIC32 一起使用,扫描无法正常工作

如何解决将 WINC1500 与 PIC32 一起使用,扫描无法正常工作

我目前正在使用 PIC32 和 wifi 模块 ATWINC1500 进行项目。我无法提供所有代码,但我正在使用可以共享的测试功能。 首先,这是我正在使用的一些设置和配置:

  • 处理器:PIC32MZ1024EFE064
  • IDE:MPLAB IDE 5.45
  • 和谐版:2.06
  • Wifi 模块:ATWINC1500
  • 实时操作系统:FreeRTOS

我想要做的是使用基础架构模式将 Wifi 模块连接到现有接入点。我能够获得我周围接入点的数量,但是当我尝试从这些接入点读取信息时,信息是空的、无效的或不正确的。 这是我的代码

bool WIFI_Test_Infrastructure(void)
{
    //Example: https://www.microchip.com/forums/m906568.aspx
    
    //Wait for WINC1500 to be initialized
    if(isWdrvExtReady() == false)
        return false;
    
    //Start a scan or wait for result
    IWPRIV_ParaM_SCAN scanner;
    IWPRIV_GET_ParaM param_scan = {
        .scan = scanner
    };
    iwpriv_get(SCANSTATUS_GET,&param_scan);
    IWPRIV_SCAN_STATUS status = param_scan.scan.scanStatus;
    IWPRIV_EXECUTE_ParaM dummy_param;
    
    //Process StateMachine while scanning
    if(status == IWPRIV_SCAN_IDLE)
    {
        vTaskDelay(1000 / portTICK_PERIOD_MS);

        //disconnect wifi from everything
        WDRV_disconnect();
        
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        
        while(WDRV_ConnectionState_Get() != WDRV_CONNECTION_STATE_NOT_CONNECTED)
            vTaskDelay(10 / portTICK_PERIOD_MS);

        vTaskDelay(1000 / portTICK_PERIOD_MS);
        

        WDRV_EXT_CmdscanStart();
        
        return false;
    }
    else if(status == IWPRIV_SCAN_IN_PROGRESS)
    {
        return false;
    }
    else if(status == IWPRIV_SCAN_NO_AP_FOUND)
    {
        iwpriv_execute(SCAN_START,&dummy_param);
        return false;
    }
    else if(status == IWPRIV_SCAN_SUCCESSFUL)
    {
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        
        //Read liste of wifi access point
        uint16_t wifi_number_AP;
        wifi_number_AP = m2m_wifi_get_num_ap_found();
        
        WDRV_SCAN_RESULT scanResult;
        tstrM2mWifiscanResult result;
        int i;
        for(i=0; i<wifi_number_AP; i++)
        {
            m2m_wifi_req_scan_result(i);

            vTaskDelay(1000 / portTICK_PERIOD_MS);

            winc1500_scan_result_read(&result); //ISSUE HAPPENED HERE

            vTaskDelay(1000 / portTICK_PERIOD_MS);

            memcpy((void *)scanResult.bssid,(void *)result.au8BSSID,sizeof(scanResult.bssid));
        }
        
        //SUCCESS
        return true;
    }
    else
    {
        return false;
    }
}

这里发生了什么:

  • 首先,您需要知道该函数是由线程管理器调用的,这就是它返回 false 或 true 的原因。我正在检查扫描的状态。
  • 我能够到达 SCAN_SUCCESSFUL 部分,并且检测到的接入点数量是正确的。
  • 标记了发生问题的那一行。当我读取接入点的结果信息时,它是空的。这是我在调试会话中看到的(对于所有接入点都是相同的结果):

Bug ATWINC1500

我已经等了好几个星期才问这个问题。希望有人可以提供帮助,或者至少给我一些需要检查的提示。 如果我错过了信息,请随时问我。

提前致谢!

阿德里安

解决方法

解决方案只是一个关于堆栈的故事。我还有另外两个任务:SYS 和 TCP/IP。我需要增加他们堆栈的大小,因为他们正在管理几个有关扫描的功能。所以在某处有一个覆盖。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。