发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[STM32F4]

【STM32F469I试用】Linux下USB无线网卡驱动的移植

[复制链接]
楼主: lin704932121
手机看帖
扫描二维码
随时随地手机跟帖
41
lin704932121|  楼主 | 2016-12-30 15:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
hanzixi_angel 发表于 2016-12-15 10:44
楼主真是太牛了  这应该是首创了   不知道楼主有没有解决stm32f4外接3G网卡的驱动呢? ...

有的,3G网卡驱动我移植了Linux下的usb_mode_switch用于转换网卡模式,然后再使用LWIP里的PPPOS进行认证。这部分代码还么怎么整理,年前我把它整理好后再分享给大家。

使用特权

评论回复
42
lin704932121|  楼主 | 2016-12-30 16:04 | 只看该作者
本帖最后由 lin704932121 于 2016-12-30 16:06 编辑
honami520 发表于 2016-12-15 14:28
楼主这个东西做的还是很有突破性的啊,USB的wifi愣是让你在stm32上面跑起来了。
要是早几年这个东西的商用 ...

谢谢!当初移植这个WIFI驱动,一方面是时间比较充裕,另一方面也是自己学习用,这个USB WIFI速率还是比较高的。

使用特权

评论回复
43
简瑞谦| | 2017-1-7 18:10 | 只看该作者
请问这个驱动支持ap模式吗?看说明好像只能配置成sta或者adhoc?

使用特权

评论回复
44
lin704932121|  楼主 | 2017-1-10 21:58 | 只看该作者
简瑞谦 发表于 2017-1-7 18:10
请问这个驱动支持ap模式吗?看说明好像只能配置成sta或者adhoc?

这个驱动不支持ap模式的。

使用特权

评论回复
45
hanzixi_angel| | 2017-1-12 11:49 | 只看该作者
lin704932121 发表于 2016-12-30 15:59
有的,3G网卡驱动我移植了Linux下的usb_mode_switch用于转换网卡模式,然后再使用LWIP里的PPPOS进行认证 ...

楼主威武 真心佩服啊 希望楼主早日分享出来   

使用特权

评论回复
46
hanzixi_angel| | 2017-1-22 11:29 | 只看该作者
lin704932121 发表于 2016-12-30 15:59
有的,3G网卡驱动我移植了Linux下的usb_mode_switch用于转换网卡模式,然后再使用LWIP里的PPPOS进行认证 ...

楼主的usb 3g年前还能公布吗  好期待啊   

使用特权

评论回复
47
lin704932121|  楼主 | 2017-1-24 16:47 | 只看该作者
hanzixi_angel 发表于 2017-1-22 11:29
楼主的usb 3g年前还能公布吗  好期待啊

这两天整理了一下代码,见帖子https://bbs.21ic.com/forum.html?mo ... 1&extra=#pid7591992

使用特权

评论回复
48
lin704932121|  楼主 | 2017-1-25 15:37 | 只看该作者
本帖最后由 lin704932121 于 2017-1-25 15:43 编辑

这个驱动不仅支持STA模式,还支持Adhoc模式。

1、修改rt2870sta_conf.h文件
     (1) 将NetworkType参数修改为Adhoc
     (2) 将AuthMode参数修改为OPEN
     (3) 将EncrypType参数修改为NONE

2、修改wlan.c文件
      (1) 将lwip的网络接口地址设置为静态ip地址192.168.1.165,在wlan.c文件的最开始添加如下语句禁止DHCP Client:
           #undef LWIP_DHCP
      (2) 在Netif_Config()函数里初始化DHCP Server,添加如下语句:
            dhcpd_init(&ipaddr, &netmask);

以上修改已经打包好成附件,将附件解压到EvalBoards\ST\STM32469I-Discovery目录下,打开工程文件EvalBoards\ST\STM32469I-Discovery\uCOS-III_Adhoc\KeilMDK\uCOS-III.uvproj进行编译即可。在PC中进行搜索,即可搜索到无线网卡生成的Adhoc热点mytest。连接Adhoc后,将会为PC分配一个IP地址。





uCOS-III_Adhoc.rar

196.49 KB

使用特权

评论回复
49
lin704932121|  楼主 | 2017-1-26 16:23 | 只看该作者
本帖最后由 lin704932121 于 2017-1-27 10:18 编辑

    智能家居现在还处于发展阶段,由于大部分智能设备不具备人机交互界面,不能输入WIFI的密码。因此,想要让智能设备联网,首先要解决智能设备如何获取WIFI密码的问题。
目前流行的wifi配置模式一般有以下2种:
1:智能硬件处于AP模式,手机用于station模式,手机连接智能插座的AP后组成局域网,手机发送需要连接路由的SSID及密码至智能插座,智能硬件主动去连接指定路由后,完成连接
2:智能连接(smarlink)模式:智能硬件处于监听模式下,监听802.11网络中的所有报文;手机APP将SSID和密码编码到UDP报文中,通过广播包或组播报发送,智能硬件接收到UDP报文后解码,得到正确的SSID和密码,然后主动连接指定SSID的路由,完成连接。

一、WIFI智能连接原理
    这里介绍一下第二种智能连接(smarlink)模式:手机通过发送UDP组播数据包来配置智能设备。如下图所示,802.11帧头部包含有AP的MAC地址(RA域)、源MAC地址(SA/TA域)以及目的MAC地址(DA域)。虽然WIFI数据包是加密的,但是802.11帧头部是没有加密的,这就给了我们通过编码目的MAC地址(DA域)来传输数据的机会。


如何编码目的MAC地址呢?组播的目的MAC地址与目的IP地址有映射关系:将MAC地址的前25位设定为01:00:5e,而MAC地址的后23位对应组播IP地址的位。其中组播地址是保留的D类地址从224.0.0.0-239.255.255.255。如下图所示,假设我们要传输AP_NAME这几个字符给智能设备,将AP_NAME分四次发送。
第一次发送,将UDP组播IP地址设置为234.0.'A'.'P',对应的MAC地址为01:00:5E:00:'A':'P',发送的数据包长度为100。
第二次发送,将UDP组播IP地址设置为234.0.'_'.'N',对应的MAC地址为01:00:5E:00:'_':'N',发送的数据包长度为101。
第三次发送,将UDP组播IP地址设置为234.0.'A'.'M',对应的MAC地址为01:00:5E:00:'A':'M',发送的数据包长度为102。
第四次发送,将UDP组播IP地址设置为234.0.'E'.'\0',对应的MAC地址为01:00:5E:00:'E':'\0',发送的数据包长度为103。


发送的数据包长度每次加一。数据包长度可以用来作为数据索引,从而防止接收到的802.11帧次序不同的情况。

二、智能连接的使用
    这个无线网卡驱动支持监听模式,因此我们可以编写智能连接的程序。
    1、将smartlink.c文件导入MDK工程。
    2、在app.c中AppTaskStart()函数里添加智能连接程序的初始化函数smartlink_init()
    3、在无线网卡的热插拔回调函数ralink_hotplug_call_back()里,添加智能连接的启动和停止函数smartlink_start()、smartlink_stop()。
    4、重新编译工程。
    以上修改已经打包好成附件,将附件uCOS-III_SmartLink.rar解压到EvalBoards\ST\STM32469I-Discovery目录下,打开工程文件EvalBoards\ST\STM32469I-Discovery\uCOS-III_SmartLink\KeilMDK\uCOS-III.uvproj进行编译即可。

    安装手机端Android智能连接应用(见附件),连接指定热点后,打开智能连接应用。如下图所示,SSID里会显示当前连接的WIFI名称,输入密码后点击”开始智能连接“按钮,应用程序将会一直发送包含SSID和密码的UDP组播数据包。

    设备端的程序会不停地切换无线网卡的信道,来监听802.11数据包。在串口里看到以下信息:

wireless_send_event[0x8c02][0x217] (RT2860) BSS(ra0) Scanning
smartlink set STA to monitor mode
smartlink setup packet detected
4 of 77 bytes received
10 of 77 bytes received
12 of 77 bytes received
14 of 77 bytes received
16 of 77 bytes received
              ┋
68 of 77 bytes received
70 of 77 bytes received
72 of 77 bytes received
74 of 77 bytes received
76 of 77 bytes received
All data received
SSID: NetWork_Main
PSK : guodanian
smartlink try to connect NetWork_Main
wireless_send_event[0x8c02][0x217] (RT2860) BSS(ra0) Scanning
wireless_send_event[0x8c02][0x211] (RT2860) BSS(ra0) scan completed
wireless_send_event[0x8c02][0x200] (RT2860) BSS(ra0) had associated successfully
wireless_send_event[0x8c02][0x210] (RT2860) STA(a8:57:4e:83:f9:28) disconnects with our wireless client
wireless_send_event[0x8c02][0x20f] (RT2860) STA(a8:57:4e:83:f9:28) connects with our wireless client
dhcp_start...
DHCP IP:192.168.2.101
DHCP GW:192.168.2.1
DHCP MASK:255.255.255.0

    设备一旦在某个信道监听到了数据,将会保持在该信道,直到获得所有剩余数据。设备获得了AP的SSID和密码后,将会切换到STA模式来连接AP,并通过DHCP来获取IP地址。

uCOS-III_SmartLink.rar

195.68 KB

smartlink_android_source.rar

4.4 MB

使用特权

评论回复
50
pixhw| | 2017-1-26 21:52 | 只看该作者
这个确实很厉害,能够跑linux了

使用特权

评论回复
51
pixhw| | 2017-1-26 21:54 | 只看该作者
有跑ucos的源代码吗

使用特权

评论回复
52
hanzixi_angel| | 2017-2-1 17:56 | 只看该作者
lin704932121 发表于 2017-1-24 16:47
这两天整理了一下代码,见帖子https://bbs.21ic.com/forum.php?mo ... 1&extra=#pid7591992 ...

谢谢楼主  太感谢了  

使用特权

评论回复
53
dzfansman| | 2017-2-1 22:57 | 只看该作者
这个在F4上能够跑linux系统吗?

使用特权

评论回复
54
lzmm| | 2017-2-1 23:02 | 只看该作者
M4的linux内核是自己移植的吗?

使用特权

评论回复
55
lin704932121|  楼主 | 2017-2-2 11:31 | 只看该作者
本帖最后由 lin704932121 于 2017-2-2 11:32 编辑
dzfansman 发表于 2017-2-1 22:57
这个在F4上能够跑linux系统吗?

F4应该是可以跑uclinux的,但一般需要外扩SRAM和FLASH。我的附件里使用的是ucos操作系统,并移植了联发科的无线网卡驱动,只使用了片内的RAM和FLASH。

使用特权

评论回复
56
lin704932121|  楼主 | 2017-2-2 11:55 | 只看该作者
本帖最后由 lin704932121 于 2017-2-2 11:57 编辑
lzmm 发表于 2017-2-1 23:02
M4的linux内核是自己移植的吗?

    我并没有移植uclinux。我附件里使用的是ucos操作系统,并移植了linux下的USB协议栈。这个USB协议栈经过裁剪和优化只占用了约4KB的内存,无线网卡的驱动也是经过优化了,大概占用64KB内存。
    我最开始的目标就是只使用STM32F407的片内FLASH和RAM来驱动这个无线网卡,而uclinux虽然使用方便,不需要自己优化无线网卡驱动代码,但是它需要外扩SRAM才能运行。

使用特权

评论回复
57
gyh974| | 2017-2-5 15:26 | 只看该作者

使用特权

评论回复
58
gyh974| | 2017-2-5 15:27 | 只看该作者
楼主威武

使用特权

评论回复
59
kmzuaz| | 2017-2-5 22:53 | 只看该作者
这个还真不知道能够运行linux系统呢

使用特权

评论回复
60
ghybbngj| | 2017-3-5 19:20 | 只看该作者
请问能否支持USB HUB?

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则