本帖最后由 lin704932121 于 2017-1-27 10:24 编辑
看到名单上有我,心里其实挺激动的,毕竟还是第一次收到板子。板子价格也不菲,拿到板子自己也要写点有用的东西才行。USB-Wireless-LAN-Driver-for-STM32F4xx 是我两年前移植的联发科在Linux下USB无线网卡驱动DPO_RT5572_LinuxSTA_2.6.1.3_20121022,使用uC/OS-III操作系统 和 lwip网络协议栈。当时苦于市面上都是WIFI转串口或者WIFI转SPI之类的模块,很少有能直接驱动802.11物理层芯片的模块,既然找不到项目又需要自己便着手移植联发科的USB无线网卡驱动。移植过程花了近半年,这个过程还是挺辛苦的,自己开始时对USB协议和802.11是一窍不通,联发科的驱动虽然开源但是没有任何文档,对ST参考手册上USB 寄存器更是完全不理解。自己只能不断学习,不断在Linux下调时和阅读源代码,不断看ST的参考手册。就这样,慢慢地把工程搭建了起来。去年我将这个软件开源,下半年又抽时间对它进行了些优化,现在驱动占用约64KB的RAM,在USB FS接口下带宽可达3.3Mbits的上行速率、6Mbits的下行速率。在USB HS接口DMA模式下(嵌入式PHY)可达6Mbits的上行速率、7Mbits的下行速率。它还有以下的特性。
1.支持USB无线网卡热插拔
2.支持WEP、WPAPSK-AES、WPAPSK-TKIP、WPA2PSK-AES、WPA2PSK-TKIP等认证和加密方式
3.支持802.11b/g/n
4.使用iwpriv工具对无线网卡进行配置
5.当前支持的USB无线网卡型号为RT5370和RT3070
这个软件原本是在STM32F4-Discovery板子下运行的,收到板子后,花了几天时间将它移植到了STM32F469I-Discovery。
有关 DPO_RT5572_LinuxSTA_2.6.1.3_20121022驱动是如何移植到STM32F4下,修改了哪些宏和那部分源代码,在附件的一篇文档里有详细的说明,这里介绍在STM32F469I-Discovery板子如何使用USB无线网卡。
一、硬件连接
用一根OTG线连接板子上USB FS端口,并插入USB无线网卡。
二、配置无线网卡
附件的代码里默认的配置为:
SSID=mytest
AuthMode=WPA2PSK
EncrypType=AES
WPAPSK=12345678
如果你的无线路由器不是以上配置,那么要修改EvalBoards\ST\STM32469I-Discovery\uCOS-III\rt2870sta_conf.h 中以上几个值。
SSID 为你无线路由器的信道名称。
AuthMode 认证模式可以为"WEPAUTO", "OPEN", "SHARED", "WPAPSK", "WPA2PSK", "WPANONE"
EncrypType 加密类型可以为 "NONE", "WEP", "TKIP", "AES"
WPAPSK 为无线路由器密码
现在大多数的无线路由的 AuthMode为WPA2PSK EncrypType为AES,因为这种认证和加密类型相比于其它是最安全的。
运行 EvalBoards\ST\STM32469I-Discovery\uCOS-III\KeilMDK\uCOS-III.uvproj ,编译并直接烧写程序。工程环境用的是MDK 4.7,虽然没有STM32F469I的型号,但可以用STM32F407代替,只要将RAM,ROM的大小修改成STM32F469I 大小就可以。程序烧写完成后会同时在USART3和LCD上输出信息。USART3 连接到了板子上的STLINK,PC机上直接打开这个虚拟串口就可以使用它了。在USB无线网卡成功连接到AP后,会使用DHCP获取IP地址。串口和LCD输出如下:
wireless_send_event[35842] (RT2860) BSS(ra0)Scanning wireless_send_event[35842] (RT2860) BSS(ra0) scancompleted wireless_send_event[35842] (RT2860) BSS(ra0) hadassociated successfully wireless_send_event[35842] (RT2860)STA(f4:ee:14:54:4d:2e) connects with our wireless client dhcp_start... DHCP IP:192.168.1.117 DHCP GW:192.168.1.1 DHCP MASK:255.255.255.0
接着在串口终端中输入ping 命令, 串口和LCD会同时回显以下信息:
三、使用iperf进行网络性能测试
板子上的iperf是移植Linux下的,包含最基本的测试命令。现假设STM32F469I-Discovery的IP地址为192.168.1.117, PC机的IP地址为192.168.1.178。
UDP客户端带宽测试
PC机上输入 iperf -s -u ,其中-s代表PC机处于服务器模式,-u代表UDP测试。
STM32F469I-Discovery中输入 iperf -c 192.168.1.178 -u -b 4Mbits 其中-c代表客户端模式后面跟着服务器IP地址,-u代表UDP测试, -b带表测试带宽为4Mbits。
可以看到在4Mbits的带宽测试下,丢包率在7.6%左右。
UDP服务器带宽测试
STM32F469I-Discovery中输入 iperf -s -u -i 1 其中-s代表PC机处于服务器模式,-u代表UDP测试, -i 1 代表每秒输出一次报告。
PC机上输入 iperf -c 192.168.1.117 -u -b 8Mbits
可以看到在8Mbits的带宽测试下,丢包率在20%左右。
四、总结
以上都是使用USB FS接口,由于USB FS接口不支持DMA模式,所以软件中USB主机调度控制器的负荷还是比较高的,大概占用CPU 45%的利用率,因为它需要轮询USB设备端点是否有数据要发送。使用USB HS接口DMA模式,CPU负荷率会很低,而且USB性能也有很大提高。STM32F469I-Discovery 板子上没有USB HS 的接口,需要自己焊洞洞板。这个后面在具体写一下。
完整的工程附件,分卷压缩,记得全部下载。
USB-Wireless-LAN-Driver-for-STM32F4xx-master.part01.rar
(4 MB)
USB-Wireless-LAN-Driver-for-STM32F4xx-master.part02.rar
(2.01 MB)
|