2.3. DEMO_WIFI工程说明

概述

本工程展示了使用iperf测试wifi吞吐率的使用示例:

  • WIFI STA模式测试IPERF

  • WIFI AP模式测试IPERF

  • IPERF的上下行吞吐率测试以及参数配置

具体的示例工程代码详见 apps/demo/demo_wifi

2.3.1. WIFI框架图

2.3.2. 工程配置

  • app_config.h:

    • 打开宏 #define CONFIG_WIFI_ENABLE 无线WiFi

    • 打开宏#define CONFIG_IPERF_ENABLE iperf测试

    #define CONFIG_WIFI_ENABLE                                      /* 无线WIFI */
    #define CONFIG_IPERF_ENABLE                                     // iperf测试
    
  • wifi_demo_task.c:

    • 打开宏定义AP_MODE_TEST或者STA_MODE_TEST配置WIFI工作模式

    • 配置AP模式和STA模式的SSID(名称)和PWD(密码)

    • wifi_on(); 之后调用 iperf_test()

    //选择其中一种开机默认的模式测试
    #define AP_MODE_TEST
    //#define STA_MODE_TEST
    //#define MONITOR_MODE_TEST
    
    //#define WIFI_MODE_CYCLE_TEST //从起始测试模式开始(FORCE_DEFAULT_MODE=1)或者最后记忆模式开始((FORCE_DEFAULT_MODE=0)), 循环测试WIFI模式切换: ->AP_MODE ->STA_MODE ->MONITOR_MODE ->AP_MODE ...
    
    #define FORCE_DEFAULT_MODE 0 //配置wifi_on之后的模式,0为使用最后记忆的模式, 1为强制默认模式, 3-200为STA连接超时时间多少秒,如果超时都连接不上就连接最后记忆的或者最优网络
    
    #define AP_SSID "AC79_WIFI_DEMO_"      //配置 AP模式的SSID前缀
    #define AP_PWD  ""                //配置 AP模式的密码
    #define STA_SSID  "配置需要连接的路由器SSID"           //配置 STA模式的SSID
    #define STA_PWD  "配置需要连接的路由器密码"      //配置 STA模式的密码
    #define CONNECT_BEST_SSID  0    //配置如果啟動WIFI后在STA模式下, 是否挑选连接记忆过的信号最优WIFI
    

2.3.3. 模块依赖

  • 如果只需要测试STA模式和MONITOR模式, 工程文件或者Makefile包含wl_wifi_sta.a, wpasupplicant.a

  • 如果只需要测试AP模式, 工程文件或者Makefile包含wl_wifi_ap.a

  • 如果STA和AP模式均要测试, 工程文件或者Makefile包含wl_wifi.a,wpasupplicant.a

  • 其中wl_wifi_ap_sfc.a,wl_wifi_sta_sfc.a,wl_wifi_sfc.a为节省内存/降低性能版本的WIFI库

2.3.4. 代码流程

1.demo_wifi()入口:

A)创建WIFI启动任务wifi_demo_task

B)打印WIFI信号质量信息和吞吐率信息

static int demo_wifi(void)
{
    return os_task_create(wifi_demo_task, NULL, 10, 1000, 0, "wifi_demo_task");
}

2.wifi_event_callback():

​A)case WIFI_EVENT_MODULE_INIT: 配置WIFI启动前的必要配置, 例如WIFI MP测试后校准PA参数, WIFI启动前的默认模式, 配置信息等

​B)case WIFI_EVENT_MODULE_START:配置WIFI启动后的配置

        case WIFI_EVENT_MODULE_START:
        puts("|network_user_callback->WIFI_EVENT_MODULE_START\n");

        struct wifi_mode_info info;
        info.mode = NONE_MODE;
        wifi_get_mode_cur_info(&info);
        if (info.mode == SMP_CFG_MODE) {
            net.arg = "net";
            net.event = NET_EVENT_SMP_CFG_FIRST;
            net_event_notify(NET_EVENT_FROM_USER, &net);
        }

        u32  tx_rate_control_tab = // 不需要哪个速率就删除掉,可以动态设定
            0
            | BIT(0) //0:CCK 1M
            | BIT(1) //1:CCK 2M
            | BIT(2) //2:CCK 5.5M
            | BIT(3) //3:OFDM 6M
            | BIT(4) //4:MCS0/7.2M
            | BIT(5) //5:OFDM 9M
            | BIT(6) //6:CCK 11M
            | BIT(7) //7:OFDM 12M
            | BIT(8) //8:MCS1/14.4M
            | BIT(9) //9:OFDM 18M
            | BIT(10) //10:MCS2/21.7M
            | BIT(11) //11:OFDM 24M
            | BIT(12) //12:MCS3/28.9M
            | BIT(13) //13:OFDM 36M
            | BIT(14) //14:MCS4/43.3M
            | BIT(15) //15:OFDM 48M
            | BIT(16) //16:OFDM 54M
            | BIT(17) //17:MCS5/57.8M
            | BIT(18) //18:MCS6/65.0M
            | BIT(19) //19:MCS7/72.2M
            ;
        wifi_set_tx_rate_control_tab(tx_rate_control_tab);
#if 0
        wifi_set_pwr(0); //把WIFI模拟功率调整到最低档位节电
#endif

        break;

3.wifi_demo_task()函数流程:

A)注册WIFI事件回调函数

B)启动WIFI

C)启动IPERF测试

static void wifi_demo_task(void *priv)
{
    wifi_set_store_ssid_cnt(NETWORK_SSID_INFO_CNT);
    wifi_set_event_callback(wifi_event_callback);

    wifi_on();

    //wifi_on之后即可初始化服务器类型的网络应用程序
    iperf_test();
    ......
}

2.3.5. 操作说明

  • 设备端操作:

    1.编译工程,烧录镜像,复位启动

    2.系统启动后,可以通过串口软件看到示例的WIFI相关打印信息

  • 手机端操作:

    1.安卓手机可安装 Magic iPerf.apk ,苹果手机端在商店安装对应收费版本软件, PC端可安装 iperf-3.1.3-win64.exe

    2.参考文档 iperf3工具说明

2.3.6. 常见问题

  • WIFI库选择说明:

wl_wifi.a

包含AP和STA模式,占据大内存,性能强悍

wl_wifi_sfc.a

包含AP和STA模式,占据内存小

wl_wifi_ap.a

只包含AP模式,占据大内存,性能强悍

wl_wifi_ap_sfc.a

只包含AP模式,占据内存小

wl_wifi_sta.a

只包含STA模式,占据大内存,性能强悍

wl_wifi_sta_sfc.a

只包含STA模式,占据内存小

lwip.a

占据大内存,性能强悍

lwip_sfc.a

占据内存小

Important

  1. 如果需要使用STA模式,需要包含 wpasupplicant.a,仅使用AP模式不需要包含

  2. WIFI API接口头文件在 wifi/wifi_connect.h

  • iperf测试吞吐率一般结果为多少?

    答:AP模式下一般TX/RX速率有800KB/S-2MB/S,STA模式下一般有200KB-1MB/S

  • 影响iperf测试吞吐率的因素有哪些?

    答:

    1.WIFI RF校准参数有没有进行仪器测试调整到SDK里面

    2.板子天线是否有调试好

    3.AP模式比STA模式吞吐率要高

    4.空中信道是否有比较大的干扰

    5.SDK运行过程中剩下的CPU使用率是否足够

    6.测试手机,路由器,设备,距离是否足够小

    7.使用占据资源多的高性能的WIFI库与LWIP库有利于提高吞吐率

    8.程序运行在SDRAM模式比在SFC模式吞吐率要高