Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
NXP 微控制器
WIFI模块_RW007
NXP-MCXN947
恩智浦FRDM-MCXN947上的RW007实践——WiFi延迟和带宽测试
发布于 2024-04-21 00:29:16 浏览:632
订阅该版
[tocm] 本文将会介绍如何使用RT-Thread env 工具创建一个基于RT-Thread RTOS的软件项目;如何使用RT-Thread env 工具对项目进行配置,实现FRDM-MCXN947开发板通过RW007模组进行WiFi联网;以及如何使用RT-Thread env 工具对项目进行配置,实现WiFi网络延迟和带宽测试。 ## 一、背景介绍 本章介主要介绍 RW007模组,以及RW007软件包。 ### 1.1 RW007模组简介 RW007模组是由上海睿赛德电子科技有限公司开发的一款支持WiFi和蓝牙功能的无线通信模块,它提供了基于SPI和UART 两种接口的通信方式。 RW007模组硬件资料: https://pan.baidu.com/s/1NeQN2XNIUv4JP2ina4pnMw SPI接口相对于UART接口,具有更高的通信速率,因此本文采用SPI接口进行实验。 RW007模组工作在SPI模式下时,主控芯片为模组需要提供1组SPI信号,一个中断输入,一个IO输出,包含电源和地总,一共8个引脚。 RT-Thread官方也提供了RW007模组的Arduino评估板(以下简称RW007评估板),如下图所示: ![image7.jpg](https://oss-club.rt-thread.org/uploads/20240421/b3482634df549c911fcec6023824d8a5.jpg.webp) 图片中间部分为RW007模组。 查阅RW007评估版原理图,可以看到SPI和UART接口部分,如下图所示: ![image8.png](https://oss-club.rt-thread.org/uploads/20240421/3dc411c95c06ed52e23c0305771a79d6.png) 可以看到,Arduino接口与RW007模组引脚的连接关系,如下表所示: | Arduino接口引脚 | 模组引脚 | 功能说明 | | --- | --- | --- | | D13 | CLK | SPI时钟信号 | | D12 | MISO | SPI主机输入从机输出 | | D11 | MOSI | SPI主机输出从机输入 | | D10 | CS | SPI片选信号 | | D9 | INT | 模组中断信号 | | D8 | RST | 模组复位控制 | | 3.3V | VCC | 模组电源正 | | GND | GND | 模组电源负 | ### 1.2 Arduino接口简介 FRDM-MCXN947开发板上提供了Arduino接口,如下图蓝色部分: ![image9.png](https://oss-club.rt-thread.org/uploads/20240421/ce7718669cf93384060388b211c61f64.png.webp) FRDM-MXCN947开发板 Arduino接口,和RW007评估版通信的引脚如下: ![image10.png](https://oss-club.rt-thread.org/uploads/20240421/337405b1fb6339166c1a016ee2d11863.png.webp) 其中,D10~D13为SPI信号,D9为中断信号(INT),D8为复位控制(RST); FRDM-MCXN947开发板和RW007评估板连接如下图: ![mcxn947_rw007.jpg](https://oss-club.rt-thread.org/uploads/20240421/2da87cfd65455d3551980955b1629651.jpg.webp) ### 1.3 RW007软件包简介 RT-Thread rw007软件包实现了MCU主控端与RW007模组的SPI/UART接口的底层通讯,同时实现了与RT-Thread的WiFi框架、网络协议栈对接。借助此软件包,开发者可以在RT-Thread系统上轻松实现WiFi联网或BLE功能。 软件包源码仓库链接: https://github.com/RT-Thread-packages/rw007 软件包源码仓库链接(国内镜像): https://gitee.com/RT-Thread-Mirror/rw007 ### 1.4 RT-Thread env工具简介 RT-Thread Env 工具 包括配置器和包管理器,用来对内核和组件的功能进行配置,对组件进行自由裁剪,对线上软件包进行管理,使得系统以搭积木的方式进行构建,简单方便。 RT-Thread Env工具下载页面: https://www.rt-thread.org/download.html#download-rt-thread-env-tool ## 二、创建工程 ### 2.1 新建工程 首先,克隆RT-Thread主线源码到本地(Windows系统使用git-bash): ```bash $ mkdir -pv /e/Opensource/rt-thread/master $ cd /e/Opensource/rt-thread/master $ git clone https://github.com/RT-Thread/rt-thread.git . ``` 接着,跳转到 FRDM-MXCN947 板级支持包(BSP)目录: ```bash $ cd bsp/nxp/mcx/mcxn/frdm-mcxn947/ ``` 最后,使用 scons 命令创建独立的项目目录(可以在env命令行,或者gitb-bash中执行): ```bash scons --dist --target=mdk --project-name=rtt_n947 --project-path=e:/DIY/FRDM-MCXN947/rtt_n947/ ``` 其中,target参数用于指定项目模板(可以使用mdk、iar等),project-name参数和project-path参数分别表示项目名称和项目目录,可以根据实际需要修改修改。 注意:git-bash执行scons之前,需要保证已经安装了Python,并且已使用pip install scons安装scons软件包。否则会报 scons 命令找不到。 scons命令执行成功,命令输出,如下图所示: ![Untitled.png](https://oss-club.rt-thread.org/uploads/20240421/80d2efed3f88aa75fd44818988e42b46.png) scons命令创建的目录,内容如下图所示: ![Untitled 1.png](https://oss-club.rt-thread.org/uploads/20240421/3d41a9fa3c57448ade0a0aa5d77c5d11.png.webp) 其中,rtt_n947开头的两个文件,就是scons生成的项目文件。如果不加—project-name参数,则是project开头的两个文件。 ### 2.2 添加rw007软件包 在env命令行环境中,跳转到上一小节创建的项目目录 E:\DIY\FRDM-MCXN947\rtt_n947目录, 然后,使用 menuconfig 命令: ![Untitled 2.png](https://oss-club.rt-thread.org/uploads/20240421/6ee20d1047449b46db3f1d03e487d528.png) ### 2.3 打开RW007配置项 类似的,依次选择: │ -> Hardware Drivers Config │ -> Board extended module Drivers 如下图所示: ![Untitled 3.png](https://oss-club.rt-thread.org/uploads/20240421/eed8b398b8362b8457e2c92899587a2c.png) 空格选中Enable RW007选项。 选中该选项后,将会自动选中rw007软件包,以及片上SPI1配置。 左右移动光标到Save上,回车保存配置。 保存配置之后,.config和rtconfig.h文件将会更新。 保存配置后,就可以退出配置界面了。 ### 2.4 启用pin驱动 类似的,依次进入菜单: → Hardware Drivers Config → On-chip Peripheral Drivers 如下图所示: ![Untitled 4.png](https://oss-club.rt-thread.org/uploads/20240421/6c71b7d9c0c8f9872455f4ab9e40fd05.png.webp) 如图,选中Enable GPIO。 这样,就开启了pin驱动。开启pin驱动的原因是,SPI的CS使用了pin接口进行控制。 左右移动光标到Save上,回车保存配置。 保存配置之后,.config和rtconfig.h文件将会更新。 保存配置后,就可以退出配置界面了。 ### 2.5 禁用rw007的STM32驱动 类似的,依次选择: RT-Thread online packages → IoT - internet of things → Wi-Fi → rw007: SPI WIFI rw007 driver 进入rw007软件包配置界面: ![Untitled 5.png](https://oss-club.rt-thread.org/uploads/20240421/ac0cc0a33054c1f42ea7793983363a76.png.webp) 上下移动光标到”example driver port (rw007 for stm32)”上,回车,进入这个配置项: ![Untitled 6.png](https://oss-club.rt-thread.org/uploads/20240421/422e413c17e49c594384849f320fa19c.png) 选中,not use example driver porting by myself。 选中之后,自动返回rw007软件包配置页面: ![Untitled 7.png](https://oss-club.rt-thread.org/uploads/20240421/114cc98c7d9ffe68287d0a05f10aa4c3.png.webp) 此时,rw007的STM32驱动就被禁用掉了。 左右移动光标到Save上,回车保存配置。 保存配置之后,.config和rtconfig.h文件将会更新。 保存配置后,就可以退出配置界面了。 ### 2.6 下载软件包 刚刚我们用menuconfig选中了“RT-Thread online packages”中的rw007软件包,rw007软件包的代码默认不在本地。menuconfig选中并保存配置后,需要运行pkgs —update命令,才能将rw007软件包的代码下载到本地。 执行pkgs —update命令,输出如下图所示: ![Untitled 8.png](https://oss-club.rt-thread.org/uploads/20240421/5b30c90856e2424e76530f657e8018f3.png) ### 2.7 更新MDK项目文件 使用menuconfig命令修改配置之后(尤其是增加软件包之后),需要更新MDK项目文件,新增的代码才会被编译。 对于scons创建时添加了project-name参数的,更新时也要加project-name参数: ![Untitled 9.png](https://oss-club.rt-thread.org/uploads/20240421/22790b72439b99e5c9ddbe898be7f5fc.png) ## 三、编译运行 ### 3.1 打开MDK项目 鼠标双击打开rtt_n947.uvprojx文件,打开后看到如下图所示: ![Untitled 10.png](https://oss-club.rt-thread.org/uploads/20240421/7fd071f2b4cfe955b245fd053b8f1365.png) 可以看到,rw007的代码已经在里面了。 ### 3.2 编译下载程序 在Keil中,按F7编译项目,按F8下载固件。 下载固件之前,需要使用USB Type-C线,将PCUSB口连接到FRDM-MCXN947开发板的MCU-LINK口上。 默认的下载固件设置是正确的,如果不能下载固件很可能是没有安装MCXN947的支持包。 下载固件完成,Keil输出如下: ![Untitled 11.png](https://oss-club.rt-thread.org/uploads/20240421/4d4b3f0c53ad8d51fb370917a8f2b32d.png) ### 3.3 运行RT-Thread 打开串口终端,配置如下: ![Untitled 12.png](https://oss-club.rt-thread.org/uploads/20240421/bf1b7a563279da07786928ba73810f17.png.webp) 连接串口后, 按下开发板复位键,串口终端可以看到,输出了RW007固件的版本信息: ![Untitled 13.png](https://oss-club.rt-thread.org/uploads/20240421/c020116a65e5905e8716ef026423223a.png) ## 四、WiFi测试 接下来,我们进行一些简单的WiFi测试。 接下来我们查看wifi命令的使用方式: ![Untitled 14.png](https://oss-club.rt-thread.org/uploads/20240421/459d89302584096fec9367ee5c5ca2f0.png) ### 4.1 扫描测试 尝试扫描周围的WiFi热点: ![Untitled 15.png](https://oss-club.rt-thread.org/uploads/20240421/c41be9ec5455cd50b36615ef7356f7a6.png) 可以看到,成功扫描到了周围的WiFi热点。 ### 4.2 连接测试 尝试连接其中的一个热点(这里连接的是无线路由器): ![Untitled 16.png](https://oss-club.rt-thread.org/uploads/20240421/5d9d4cd9f38da98ad09a15c585c4e047.png) 可以看到,成功连接上了WiFi热点,并且获取到了IP地址。 ## 五、延迟测试 ping命令可以输出玩咯延迟信息,可以作为网络延迟的简单测试工具。 ### 5.1 ping百度 接下来,用 ping 命令测试一下,板子能不能ping通baidu.com: ![Untitled 17.png](https://oss-club.rt-thread.org/uploads/20240421/8595c13392b223b682be2f5ee62960e9.png) 可以ping通baidu.com,说明TCP/IP协议基本没有太大问题(域名解析OK,而且可以发送数据到公网主机)。 ### 5.2 ping路由器 接下来,ping一下局域网的无线路由器: ![Untitled 18.png](https://oss-club.rt-thread.org/uploads/20240421/3bfb7b34622ce6def1477e0450d53cda.png) ping局域网的路由器,延迟明显小了很多。 作为对比,可以看一下笔记本ping路由器的延迟: ![Untitled 19.png](https://oss-club.rt-thread.org/uploads/20240421/38b74f43c3d60707d0cbb85d087d3912.png) 我的笔记本电脑连接的也是同一个无线路由器。 模组比笔记本的WiFi延迟稍微高一点点,差别不大。 ## 六、带宽测试 ### 6.1 添加netutils软件包 RT-Thread的netutils组件中提供了iperf命令,可以用于测试网络带宽。 menuconfig界面,依次选择: ![Untitled 20.png](https://oss-club.rt-thread.org/uploads/20240421/482c8190a84bd1c78da9b709182653e3.png) 选中netutils软件包,然后回车进入软件包配置页面: ![Untitled 21.png](https://oss-club.rt-thread.org/uploads/20240421/60af2b499fe545965de12fefd8a84366.png) 如图,选中Enable iperf-liked network performace tool。 左右移动光标到Save上,回车保存配置。 保存配置之后,.config和rtconfig.h文件将会更新。 保存配置后,就可以退出配置界面了。 执行pkgs —update命令,输出如下图所示: ![Untitled 22.png](https://oss-club.rt-thread.org/uploads/20240421/e9d38f294eb0593793e8adb8e1b09a5d.png) 更新MDK项目文件: ![Untitled 23.png](https://oss-club.rt-thread.org/uploads/20240421/b6fccdaf6a77aca1c240dd2d97d04fa9.png) 重新编译固件,下载固件,复位运行,串口终端就有iperf命令了: ![Untitled 24.png](https://oss-club.rt-thread.org/uploads/20240421/2c4767ecb1f1b15782557e4b0d65fc78.png) ### 6.2 iperf命令参数 直接运行iperf,默认输出帮助信息: ![Untitled 25.png](https://oss-club.rt-thread.org/uploads/20240421/86b60df9aea75b4078160feb2b0b10e6.png) 可以看到iperf的命令参数使用方法。 **注意:** 1. RT-Thread的iperf命令实现中,对参数的顺序由要求,如果使用过程中发现参数报错,需要查看源码定位原因; 2. RT-Thread的iperf不支持持续时间选项,一般是先启动,后通过stop选项停止的方式控制测试时长; ### 6.3 PC端的iperf PC端的iperf可以到iperf项目官网下载:https://iperf.fr/iperf-download.php 我使用的mobaxterm,里面自带了iperf命令,所以就不单独下载了: ![Untitled 26.png](https://oss-club.rt-thread.org/uploads/20240421/d2153619c42fa7a91b7333b639a1c4f6.png) ### 6.4 iperf测试准备工作 进行iperf测试之前,需要准备: 1. 最好用PC创建热点,用无线路由器也行,但是需要确保信号强度足够; 2. 确保开发板和PC直接的距离不要太远,否则WiFi信号较弱,测试的结果可能会偏小; 3. 最好在WiFi热点较少的环境下进行测试,否则测出的结果数据也会偏小; ### 6.5 进行iperf带宽测试 下面进行测试,测试步骤如下: 1. 在PC上,启动iperf服务端:iperf -s -p 5678 2. 在开发板上,通过ping命令测试开发板和PC直接IP是否可达 3. 在开发板上,启动iperf客户端:iperf -c 192.168.3.6 -p 5678 (其中192.168.3.6是PC的IP地址) - 启动后,可以通过ps命令查看正在运行的线程 4. 一段时间后,在开发板上,停止iperf客户端:iperf --stop 5. 开发板上iperf停止后,PC端应该可以看到iperf的输出; 开发板上整个过程的输出如下: ![Untitled 27.png](https://oss-club.rt-thread.org/uploads/20240421/7917ecb6def15896c8ce88f7c4b1aad2.png) PC端输出: ![Untitled 28.png](https://oss-club.rt-thread.org/uploads/20240421/3511bc7aae896250e2880914fdfef384.png) 可以看到带宽为7.02Mbps。 ### 6.6 iperf测试小结 实际上,影响WiFi带宽测试结果数据的因素很多。我们这里,其中,起决定性的的主要由以下几个方面: 1. 模组本身支持的最高WiFi传输速率; 2. 模组接口支持的最高工作频率; 3. 主控芯片接口最高支持的工作频率; 4. 热点的WiFi最高传输速率; 5. 各种环境因素,例如开发板和PC直接的距离、环境是否有其他热点干扰等等; 为了测出比较高的数据,我把开发板直接放到路由器天线边上,才测到以上的结果: ![mcxn947_wifi_ap.jpg](https://oss-club.rt-thread.org/uploads/20240421/349ddb16fe5330db0777ff5ae019925b.jpg.webp) 好了,本篇内容就到这里,感谢阅读。 ## 七、补充说明 如果有时候测试发现栈溢出,则需要修改TCPIP线程栈大小: ![Untitled 29.png](https://oss-club.rt-thread.org/uploads/20240421/8bfdc1c411e8b2fe2c1e8569ef6fbfd0.png) 将其修改为4096即可。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
xusiwei1236
https://blog.csdn.net/xusiwei1236
文章
11
回答
33
被采纳
4
关注TA
发私信
相关文章
1
试贴-消灭0主题
2
LPC M4的一些资料
3
LPC4088的临时分支
4
lpc1788 ad 不稳定
5
1788 LCD控制器缓冲区字节问题
6
一起来学习LPC4088吧
7
上传LPC4088的realtouch主工程
8
RealBoard 4088预定帖 [第一批板子不多,预定提前结束]
9
晒RealBoard LPC4088开箱照啦,速带小板凳前来围观
10
4088主程序需要的SD卡资源
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部