查看: 4814|回复: 1

3.STM32F469I----Linux下USB无线网卡驱动的移植

[复制链接]
  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2018-1-12 11:30:51 | 显示全部楼层 |阅读模式
    分享到:
    继续学习网上资料---【STM32F469I试用】Linux下USB无线网卡驱动的移植【转】

    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无线网卡。


    2.jpg


    二、配置无线网卡

         附件的代码里默认的配置为:
         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会同时回显以下信息:


    3.jpg

    三、使用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。

    4.jpg

    可以看到在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

    5.jpg

    可以看到在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.part02.rar (2.01 MB, 下载次数: 31, 售价: 1 与非币)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 18:02 , Processed in 0.144994 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.