RAK439 WIFI模块学习(1)

 

一、阅读RAK439WIFI_datasheet,了解模块硬件配置情况

接口:四线SPI接口,接口速率最大达24mbps

模块最大吞吐量为6Mbps

 

 

其中spi接口:   SPI指的是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI总线可直接与各个厂家生产的多种标准外围器件相连,包括FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。

 

该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSS。

 

接口速率(interface rate)是指完成所有处理之后通过接口的总比特速率标称值。

吞吐率(Throughput),单位是 “req/s”。吞吐率特指Web服务器单位时间内处理的请求数。

 

 

WIFI特性:

支持持 WPA/WPA2-PSK TKIP/AES, WAPI-PSK 加密方式

可以一键网络配置,wps,easyconfig配置

Wps配置就是其他的设备连接路由可以通过输入随机的pin码或者直接按路由上的pbc按钮进行连接,不需要考虑其他ssid,wifi密码之类的东西。

 

Easyconfig是模块官方提供的开源apk,官方资料中有源码,相应的部分实现配置 RAKWifi 模块连接到网络的功能。包括一键配 置和 AP 配置

 

支持 TCP 服务器和客户端,

UDP 服务器和客户端类型

 

最多支持 8 个 socket,支持阻塞和非阻塞操作

 

DHCP 服务器和客户端

DNS 客户端

 

 

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

 

引脚定义。

 

二、代码学习

下载rak439的SDK库,阅读API LIB用户手册

该SDK库封装了wifi接口驱动,相关的驱动函数,网络相关的api。

 

 

API的数据结构和API的使用方法

 

找到rw_lib.h,

文件位置在sdk文件中RAK439_STM32F10x_SDK_1_0_0\common\include

 

  1. 软件库占用资源大小,wifi模块工作参数,初始化驱动,回调函数等配置

该部分源码:

typedef struct

{

bool                spi_int_enable;        

  // customer can choose enable or disenable spi int event driver   

    uint8_t             rx_queue_num;            // rx buffer queue num >=1

    uint8_t             socket_max_num;          // module support socket numbers max 8

    uint8_t             scan_max_num;            // scan result buffer numbers normal:10 if you need more can raise it

    uint8_t             tcp_retry_num;           // tcp backoff retry numbers

    char*               host_name;               // module host name ,you can see it in router clients when dhcp

    char*               country_code;            // set module country code ,CN (1-13),JS(1-14),UP(1-11)

    struct              driver_cb_ driver_cb;    // platform related driver used

    struct              app_cb_ app_cb;          // application related callback info

}rw_DriverParams_t;

 

其中bool    spi_int_enable; 选择启用或禁用SPI事件驱动。

rx_queue_num 表示RX buffer的个数,适当增加其个数可以提高模块数据传输时的吞吐率。

什么是 rx buffer?

接受缓冲区,

在每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。
write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。

socket_max_num; 

设定socket的个数,最多8个,减少个数可以减少驱动库的资源占用。

scan_max_num;

扫描到网络最大个数设置。

 

host_name;

模块主机名

 

模块无线工作的国家  中国 CN(1-13)

 

 

driver_cb_   硬件驱动函数

 

app_cb_    回调函数    不知道具体作用。

 

 

关于socket

 

百度百科:

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

可以类比打电话的操作

 

 

typedef struct {   

    uint8_t             channel;

    uint8_t             ssid_len;

    uint8_t             rssi;

    uint8_t             bssid[RW_BSSID_LEN];

    uint8_t             ssid[RW_MAX_SSID_LEN + 1];

    uint8_t             sec_mode;

    uint8_t             auth_mode;

}rw_WlanNetworkInfo_t;

 

 

 

Channel     当前网络所在的信道   1-14

ssid_len     当前网络名称,字符串的长度,最大32b

rssi       

 

…………

…………………………………………………………………………………………………………….

等等这些参数的含义在模块手册中均可查到。

 

之后还需要了解api回调函数,socket设置等等。

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_33169543/article/details/81171568