【RT-Thread应用笔记】FRDM-MCXN947上的RW007实践——WiFi延迟和带宽测试

【RT-Thread应用笔记】FRDM-MCXN947上的RW007实践——WiFi延迟和带宽测试

    • 一、背景介绍
      • 1.1 RW007模组简介
      • 1.2 Arduino接口简介
      • 1.3 RW007软件包简介
      • 1.4 RT-Thread env工具简介
    • 二、创建工程
      • 2.1 新建工程
      • 2.2 添加rw007软件包
      • 2.3 打开RW007配置项
      • 2.4 启用pin驱动
      • 2.5 禁用rw007的STM32驱动
      • 2.6 下载软件包
      • 2.7 更新MDK项目文件
    • 三、编译运行
      • 3.1 打开MDK项目
      • 3.2 编译下载程序
      • 3.3 运行RT-Thread
    • 四、WiFi测试
      • 4.1 扫描测试
      • 4.2 连接测试
    • 五、延迟测试
      • 5.1 ping百度
      • 5.2 ping路由器
    • 六、带宽测试
      • 6.1 添加netutils软件包
      • 6.2 iperf命令参数
      • 6.3 PC端的iperf
      • 6.4 iperf测试准备工作
      • 6.5 进行iperf带宽测试
      • 6.6 iperf测试小结
    • 七、补充说明

本文将会介绍如何使用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

图片中间部分为RW007模组。

查阅RW007评估版原理图,可以看到SPI和UART接口部分,如下图所示:

image8.png

可以看到,Arduino接口与RW007模组引脚的连接关系,如下表所示:

Arduino接口引脚模组引脚功能说明
D13CLKSPI时钟信号
D12MISOSPI主机输入从机输出
D11MOSISPI主机输出从机输入
D10CSSPI片选信号
D9INT模组中断信号
D8RST模组复位控制
3.3VVCC模组电源正
GNDGND模组电源负

1.2 Arduino接口简介

FRDM-MCXN947开发板上提供了Arduino接口,如下图蓝色部分:

image9.png

FRDM-MXCN947开发板 Arduino接口,和RW007评估版通信的引脚如下:

image10.png

其中,D10~D13为SPI信号,D9为中断信号(INT),D8为复位控制(RST);

FRDM-MCXN947开发板和RW007评估板连接如下图:

mcxn947_rw007.jpg

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):

$ 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)目录:

$ cd bsp/nxp/mcx/mcxn/frdm-mcxn947/

最后,使用 scons 命令创建独立的项目目录(可以在env命令行,或者gitb-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

scons命令创建的目录,内容如下图所示:

Untitled 1.png

其中,rtt_n947开头的两个文件,就是scons生成的项目文件。如果不加—project-name参数,则是project开头的两个文件。

2.2 添加rw007软件包

在env命令行环境中,跳转到上一小节创建的项目目录 E:\DIY\FRDM-MCXN947\rtt_n947目录,

然后,使用 menuconfig 命令:

Untitled 2.png

2.3 打开RW007配置项

类似的,依次选择:

│ -> Hardware Drivers Config

│ -> Board extended module Drivers

如下图所示:

Untitled 3.png

空格选中Enable RW007选项。

选中该选项后,将会自动选中rw007软件包,以及片上SPI1配置。

左右移动光标到Save上,回车保存配置。

保存配置之后,.config和rtconfig.h文件将会更新。

保存配置后,就可以退出配置界面了。

2.4 启用pin驱动

类似的,依次进入菜单:

→ Hardware Drivers Config → On-chip Peripheral Drivers

如下图所示:

Untitled 4.png

如图,选中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

上下移动光标到”example driver port (rw007 for stm32)”上,回车,进入这个配置项:

Untitled 6.png

选中,not use example driver porting by myself。

选中之后,自动返回rw007软件包配置页面:

Untitled 7.png

此时,rw007的STM32驱动就被禁用掉了。

左右移动光标到Save上,回车保存配置。

保存配置之后,.config和rtconfig.h文件将会更新。

保存配置后,就可以退出配置界面了。

2.6 下载软件包

刚刚我们用menuconfig选中了“RT-Thread online packages”中的rw007软件包,rw007软件包的代码默认不在本地。menuconfig选中并保存配置后,需要运行pkgs —update命令,才能将rw007软件包的代码下载到本地。

执行pkgs —update命令,输出如下图所示:

Untitled 8.png

2.7 更新MDK项目文件

使用menuconfig命令修改配置之后(尤其是增加软件包之后),需要更新MDK项目文件,新增的代码才会被编译。

对于scons创建时添加了project-name参数的,更新时也要加project-name参数:

Untitled 9.png

三、编译运行

3.1 打开MDK项目

鼠标双击打开rtt_n947.uvprojx文件,打开后看到如下图所示:

Untitled 10.png

可以看到,rw007的代码已经在里面了。

3.2 编译下载程序

在Keil中,按F7编译项目,按F8下载固件。

下载固件之前,需要使用USB Type-C线,将PCUSB口连接到FRDM-MCXN947开发板的MCU-LINK口上。

默认的下载固件设置是正确的,如果不能下载固件很可能是没有安装MCXN947的支持包。

下载固件完成,Keil输出如下:

Untitled 11.png

3.3 运行RT-Thread

打开串口终端,配置如下:

Untitled 12.png

连接串口后,

按下开发板复位键,串口终端可以看到,输出了RW007固件的版本信息:

Untitled 13.png

四、WiFi测试

接下来,我们进行一些简单的WiFi测试。

接下来我们查看wifi命令的使用方式:

Untitled 14.png

4.1 扫描测试

尝试扫描周围的WiFi热点:

Untitled 15.png

可以看到,成功扫描到了周围的WiFi热点。

4.2 连接测试

尝试连接其中的一个热点(这里连接的是无线路由器):

Untitled 16.png

可以看到,成功连接上了WiFi热点,并且获取到了IP地址。

五、延迟测试

ping命令可以输出玩咯延迟信息,可以作为网络延迟的简单测试工具。

5.1 ping百度

接下来,用 ping 命令测试一下,板子能不能ping通baidu.com:

Untitled 17.png

可以ping通baidu.com,说明TCP/IP协议基本没有太大问题(域名解析OK,而且可以发送数据到公网主机)。

5.2 ping路由器

接下来,ping一下局域网的无线路由器:

Untitled 18.png

ping局域网的路由器,延迟明显小了很多。

作为对比,可以看一下笔记本ping路由器的延迟:

Untitled 19.png

我的笔记本电脑连接的也是同一个无线路由器。

模组比笔记本的WiFi延迟稍微高一点点,差别不大。

六、带宽测试

6.1 添加netutils软件包

RT-Thread的netutils组件中提供了iperf命令,可以用于测试网络带宽。

menuconfig界面,依次选择:

Untitled 20.png

选中netutils软件包,然后回车进入软件包配置页面:

Untitled 21.png

如图,选中Enable iperf-liked network performace tool。

左右移动光标到Save上,回车保存配置。

保存配置之后,.config和rtconfig.h文件将会更新。

保存配置后,就可以退出配置界面了。

执行pkgs —update命令,输出如下图所示:

Untitled 22.png

更新MDK项目文件:

Untitled 23.png

重新编译固件,下载固件,复位运行,串口终端就有iperf命令了:

Untitled 24.png

6.2 iperf命令参数

直接运行iperf,默认输出帮助信息:

Untitled 25.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

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

PC端输出:

Untitled 28.png

可以看到带宽为7.02Mbps。

6.6 iperf测试小结

实际上,影响WiFi带宽测试结果数据的因素很多。我们这里,其中,起决定性的的主要由以下几个方面:

  1. 模组本身支持的最高WiFi传输速率;
  2. 模组接口支持的最高工作频率;
  3. 主控芯片接口最高支持的工作频率;
  4. 热点的WiFi最高传输速率;
  5. 各种环境因素,例如开发板和PC直接的距离、环境是否有其他热点干扰等等;

为了测出比较高的数据,我把开发板直接放到路由器天线边上,才测到以上的结果:

mcxn947_wifi_ap.jpg

好了,本篇内容就到这里,感谢阅读。

七、补充说明

如果有时候测试发现栈溢出,则需要修改TCPIP线程栈大小:

Untitled 29.png

将其修改为4096即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/565804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cloud微服务:Ribbon负载均衡

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Ribbon负载均衡 一、Ribbon - 负载均衡原理、流…

探索 虚拟化技术+Docker部署与操作

目录 一、你知道哪些云 1.1国内云 1.2国外云 二、Iaas、 Paas、SaaS三种云服务区别 2.1第一层叫做IaaS 2.2第二层就是所谓的PaaS 2.3第三层也就是所谓SaaS 三、虚拟化架构 3.1寄居架构 3.2源生架构 3.3操作系统虚拟化架构 3.4混合虚拟化架构 四、虚拟化特点及优势…

jmeter5.4.1源码编译(IDEA)问题解决

问题现象:最近想更深入的研究下jmeter5.4.1的原理及功能具体实现,从官网down了个源码,在本地使用IDEA工具导入项目、编译时,报以下错误: class jdk.internal.loader.ClassLoaders$PlatformClassLoader cannot be cast…

vue整合Echarts

首先打开网址https://echarts.apache.org/examples/zh/index.html 进入Echars官网找到自己想要的图形我这里选择的是柱形图 点开完整代码直接cv大法 下载Echars的npm npm install echarts 在vue里面挂在个div 导入相关包 写个方法 就是cv过来的 然后改成后端传过来的值…

【STM32+HAL+Proteus】系列学习教程---RS485总线(收发仿真实现)

实现目标 1、掌握UART/USART/RS485等几个常见概念的区别 2、掌握RS485的逻辑电平、硬件接线等基础知识 3、具体实现目标:1、利用两个单片机组成RS485通信网络;2、两个单片机之间能实现正常收发数据。 一、串口、RS485等之间的关系 串口:是…

微机原理实验三、将AX寄存器中的16位数分成4组,每组4位,让后把这四组数分别放在AL,BL,CL,DL

微机原理实验三、将AX寄存器中的16位数分成4组,每组4位,让后把这四组数分别放在AL,BL,CL,DL 功能: 将AX寄存器中的16位数分成4组,每组4位,让后把这四组数分别放在AL,BL,CL,DL ; 调试结果: input&#xff1a…

ASP.NET集成客户关系管理的企业网站的设计与开发

摘 要 企业要在激烈的市场竞争中立于不败之地,就必须找一种全新的管理理念和管理手段,对其内部和外部资源进行有效的整合。新一代ERP产品正在向客户端和供应端延伸,客户端的延伸即是客户关系管理。对于每个企业来说客户管理的完善程度将直接…

计算机网络 --- WebSocket协议 和 Signalr

计算机网络 --- WebSocket协议 和 Signalr 什么是WebSocket什么是SignalrSignalr Example -- SimpleChat 什么是WebSocket HTTP是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,是半双工通信。 通常,打开某个网页…

Qt笔记-解决子控制大小获取不正确(width和height)需要重制窗体后,才能获得正确的值

在Qt中,子控件的宽度和高度在构造后并不准确,而只有在调整窗口大小后才正确,这可能是因为子控件的布局或者约束尚未完全计算和应用。 为了解决这个问题,可以使用QTimer来延迟获取子控件的宽度和高度,以确保在布局和约…

ffmpeg初体验

一:安装 sudo yum install epel-release -y sudo yum update -ysudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpmyum -y install …

数据结构(邓俊辉)学习笔记——向量vector_02_动态空间管理

文章目录 1. 概述2. 静态空间管理缺点3. 动态空间管理3.1 扩容3.1.1 如何实现扩容3.1.2 扩容算法3.1.3 容量递增策略 VS 容量倍增策略3.1.3.1 容量倍增策略分摊分析3.1.3.2 容量递增策略分摊分析3.1.3.3 结果对比 3.2缩容3.2.1 动态缩容算法实现3.2.2 动态缩容算法时间复杂度 4…

Opencv_3_图像对象的创建与赋值

ColorInvert.h 如下&#xff1a; #include <opencv.hpp> using namespace std; #include <opencv.hpp> using namespace cv; using namespace std; class ColorInvert{ public : void mat_creation(); }; ColorInvert.cpp 文件如下&#xff1a; #include &q…

自动驾驶---OpenSpace之Hybrid A*规划算法

1 背景 笔者在上周发布的博客《自动驾驶---低速场景之记忆泊车》中&#xff0c;大体介绍了记忆泊车中的整体方案&#xff0c;其中详细阐述了planning模块的内容&#xff0c;全局规划及局部规划&#xff08;会车&#xff09;等内容&#xff0c;包括使用的算法&#xff0c;但是没…

3D Gaussian Splatting介绍

目录 一、概述二、基础介绍1. 多维高斯分布2. 将3D 高斯投影到2D像素平面3. 球谐函数4. Splatting and α \alpha α blending 三、整体流程四、 伪代码五、评价指标六、实验结果七、reference 一、概述 3D Gaussian Splatting和NeRF一样&#xff0c;主要用于新视图合成。 特…

开源博客项目Blog .NET Core源码学习(17:App.Hosting项目结构分析-5)

本文学习并分析App.Hosting项目中前台页面的作品展示页面和首页页面。 作品展示页面 作品展示页面总体上为上下布局&#xff0c;上方显示导航菜单&#xff0c;下方从左向右显示图片数据&#xff0c;支持放大查看图片和下载图片。整个页面使用了layui中的面包屑导航、弹出层、流…

高通发布电脑CPU,比英特尔Ultra9领先51%

要说2024年最热门的关键词&#xff0c;那肯定非 AI 莫属&#xff0c;当前 AI 已经开始深入各行各业&#xff0c;AI 电视、AI 手机、AI 车机、AI 家电&#xff0c;以及 AI PC ,这些都意味着 AI 将对各个行业带来的新风向和不小的冲击。 2024 年了&#xff0c;PC 处理器还能卷出什…

偏微分方程算法之二阶双曲型方程紧差分方法

目录 一、研究目标 二、理论推导 三、算例实现 一、研究目标 前面我们已经介绍了二阶双曲型方程显式、隐式差分格式&#xff0c;可否像抛物型方程一样&#xff0c;构建更高精度的差分格式。接下来我们介绍紧差分格式。这里继续以非齐次二阶双曲型偏微分方程的初边值问题为研…

【JavaScriptThreejs】判断路径在二维平面上投影的方向顺逆时针

原理分析 可以将路径每个连续的两点向量叉乘相加&#xff0c;根据正负性判断路径顺逆时针性 当我们计算两个向量的叉积时&#xff0c;结果是一个新的向量&#xff0c;其方向垂直于这两个向量所在的平面&#xff0c;并且其大小与这两个向量构成的平行四边形的面积成正比。这个新…

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…

【云计算】云数据中心网络(七):负载均衡

《云网络》系列&#xff0c;共包含以下文章&#xff1a; 云网络是未来的网络基础设施云网络产品体系概述云数据中心网络&#xff08;一&#xff09;&#xff1a;VPC云数据中心网络&#xff08;二&#xff09;&#xff1a;弹性公网 IP云数据中心网络&#xff08;三&#xff09;…