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
如果需要使用STA模式,需要包含 wpasupplicant.a,仅使用AP模式不需要包含
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模式吞吐率要高