RT-Thread论坛
直播中

ouxiaolong

10年用户 464经验值
擅长:嵌入式技术 光电显示
私信 关注
[经验]

【Vision Board创客营连载体验】RW007 WIFI模块联网

开发环境:

RT-Thread Studio:v2.2.7

开发板:RA8D1 Vision Board开发板

MCU:R7FA8D1BHEC337AS02

1 RW007简介

RW007 是由上海睿赛德电子科技有限公司开发的高速 WiFi 模块,模块基于 Realtek RTL8710BN(Ameba Z 系列) WIFI SOC,使用 SPI/UART 与主机通信 ,支持 IEEE 802.11b/g/n 网络、 WEP/WPA/WPA2 加密方式和 STA 和 AP 模式。

主要特性

1.Cortex-M4 高性能 MCU

2.可自由选择的 AT SPI 双模式,工作模式可由主机配置

3.SPI 时钟高达 30Mbps,UART 波特率高达 6Mbps。

4.SPI 模式下有效以太网带宽高达上传 1MBytes/s,下载 1MBytes/s

5.内置 Bootloader,支持固件升级、安全固件功能。

6.支持快速连接、airkiss 配网

7.支持存储多达 5 条连接信息

关于WiFi的更多信息,请参看官方手册:

WiFi:https://www.rt-thread.org/document/site/programming-manual/device/wlan/wlan/

2 RW007硬件连接

RW007与MCU的电路连接示意图如下:

1.png

RW007与MCU具体IO连线如下:

2.png

3.png

从上图可以看出WiFi的接口是SPI,具体的IO接口如下。

MCU****引脚名 功能
P412 CLK
P410 MISO
P411 MOSI
P413 CS
P800 INT
P504 RESET
----------------------- -------------
P412 CLK
P410 MISO
P411 MOSI
P413 CS
P800 INT
P504 RESET

3 WiFi 模块配置

接下来配置Wifi相关的配置,只需要简单配置就可使用。双击工程中的 RA Smart Configurator 图标,第一次打开需要配置正确的 FSP 安装路径。

4.png

5.png

  • FSP配置 SPI

配置中断引脚P800。

6.png

还需要配置中断的通道,回调函数等参数。

依次点击 “Stacks” -> “New Stack” -> “Input” -> “External IRQ (r_icu)” 来配置IRQ模块。 如下图所示。

7.png

参数如下所示。

8.png

接下来配置SPI的接口。

9.png

然后配置SPI的接口参数。

10.png

参数如下:

11.png

需要在RT-Thread Studio中打开SPI总线。

12.png

配置 RW007 软件包,RT-Thread 通过软件包的形式,对 RW007 模块提供配套驱动支持,系统默认选项不包含软件包,用户需手动开启:

RT-Thread online packages —> 、IoT - internet of things —>、Wi-Fi —>,勾选 rw007: SPI WIFI rw007 driver —> 选项

13.png

开启 WiFi 框架,RW007 驱动使用了 WLAN 相关的接口,按以下选项路径打开 WiFi 框架:

RT-Thread Components —>、Device Drivers —>、Using WiFi —>,勾选 Using Wi-Fi framework:

14.png

保存即可配置完成。

4 WiFi联网开发

关于WiFi的底层驱动已经封装了,这部分内容也很多,主要是协议栈内容多,但是大体的流程和其他驱动一样的。核心代码如下:

#include <rtthread.h>
#include <rtdbg.h>
#ifdef BSP_USING_RW007
#include <rtdevice.h>
#include <drv_spi.h>
#include <board.h>
#include <spi_wifi_rw007.h>

#define BSP_USING_RW007
#define RA_RW007_SPI_BUS_NAME "spi1"
#define RA_RW007_CS_PIN 0x040D
#define RA_RW007_BOOT0_PIN 0x040C
#define RA_RW007_BOOT1_PIN 0x040D
#define RA_RW007_INT_BUSY_PIN 0x0800
#define RA_RW007_RST_PIN 0x0504

extern void spi_wifi_isr(int vector);

static void rw007_gpio_init(void)
{
    /* Configure IO */
    rt_pin_mode(RA_RW007_RST_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(RA_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLDOWN);

    /* Reset rw007 and config mode */
    rt_pin_write(RA_RW007_RST_PIN, PIN_LOW);
    rt_thread_delay(rt_tick_from_millisecond(100));
    rt_pin_write(RA_RW007_RST_PIN, PIN_HIGH);

    /* Wait rw007 ready(exit busy stat) */
    while (!rt_pin_read(RA_RW007_INT_BUSY_PIN))
    {
        rt_thread_delay(5);
    }

    rt_thread_delay(rt_tick_from_millisecond(200));
    rt_pin_mode(RA_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLUP);
}

int wifi_spi_device_init(void)
{
    char sn_version[32];
    uint32_t cs_pin = RA_RW007_CS_PIN;

    rw007_gpio_init();
    rt_hw_spi_device_attach(RA_RW007_SPI_BUS_NAME, "wspi", cs_pin);
    rt_hw_wifi_init("wspi");

    rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);
    rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP);

    rw007_sn_get(sn_version);
    rt_kprintf("\nrw007  sn: [%s]\n", sn_version);
    rw007_version_get(sn_version);
    rt_kprintf("rw007 ver: [%s]\n\n", sn_version);

    return 0;
}
INIT_APP_EXPORT(wifi_spi_device_init);

static void int_wifi_irq(void *p)
{
    ((void)p);
    spi_wifi_isr(0);
}

void spi_wifi_hw_init(void)
{
    rt_pin_attach_irq(RA_RW007_INT_BUSY_PIN, PIN_IRQ_MODE_FALLING, int_wifi_irq, 0);
    rt_pin_irq_enable(RA_RW007_INT_BUSY_PIN, RT_TRUE);
}

#endif /* BSP_USING_RW007 */

5 WiFi联网测试

一切完成后,编译,下载,打开终端。

15.png

这里通过wifi命令来联网。

先对周围的无线网络进行扫描,如果你知道Wii信息可以跳过该步骤:

wifi scan

16.png

连接网络:

wifi join ssid passwd

17.png

联网成功后会显示IP,接下来可以使用下WiFi相关的的其他命令。

18.png

有WiFi信息不代表联网成功,接下来ping下IP。

ping ip/域名

19.png

更多回帖

发帖
×
20
完善资料,
赚取积分