Armino Wi-Fi说明
Armino Wi-Fi功能列表
兼容IEEE802.11 b/g/n/ax 2.4GHz标准
支持HT20 and HT40
支持802.11N MCS0-7
支持STA、AP and Direct Modes
支持Concurrent AP+STA
支持WPA、WPA2及WPA3等加密方式
支持AMPDU、QoS
Station模式下支持低功耗休眠
Armino Wi-Fi编程模型
Wi-Fi驱动程序作为和上层代码(如TCP/IP协议栈、Application Task等)的隔离组件,通常由用户应用程序代码负责调用Wi-Fi初始化及进行必要的配置,Wi-Fi驱动程序接收并处理API请求的数据,并将相关事件通知到应用程序处理.
Armino Wi-Fi事件描述
EVENT_WIFI_SCAN_DONE
扫描完成事件,通常由STA模式连接过程中扫描空中所有信道完成,收到此事件后,应用程序的事件回调函数可以调用bk_wifi_scan_get_result获取扫描结果.
EVENT_WIFI_STA_CONNECTED
STA已经成功连接目标AP的事件,接收到此事件后,Wi-Fi驱动程序根据应用程序响应返回结果决定是否启动DHCP服务获取IP地址或者使用静态IP地址.
EVENT_WIFI_STA_DISCONNECTED
STA与AP断开事件,接收到此事件后,一般需要通知针对基于套接字编写的客户端应用程序关闭套接字.如果此事件不是用户希望的,可以启动重连流程.
Armino Wi-Fi station模式正常连接场景示例
Wi-Fi初始化阶段
app任务调用app_wifi_init接口,初始化bk_event_init、bk_netif_init、bk_wifi_init
Wi-Fi配置阶段
进入Wi-Fi初始化阶段后,初始化workqueue、Wi-Fi MAC、PHY等
Wi-Fi启动阶段
Wi-Fi驱动执行bk_wifi_sta_start
用户可以在该函数中进行Wi-Fi初始化前的一些配置,如通信速率配置、当前模式等
初始化LwIP协议栈、初始化wpa_supplicant
Wi-Fi连接阶段
Wi-Fi驱动启动后根据最新的配置(模式、SSID、密码等),进入对应的模式,默认为STA模式
根据命令执行扫描、连接的过程
根据扫描结果,上报EVENT_WIFI_SCAN_DONE事件
连接AP成功之后,Wi-Fi驱动返回EVENT_WIFI_STA_CONNECTED事件
Wi-Fi事件回调函数将EVENT_WIFI_STA_CONNECTED发送到应用程序任务
Wi-Fi获取IP地址阶段
启动LWIP的DHCP客户端获取IP地址
获取IP地址之后,通过SM_DHCP_DONE_IND消息发送出去
应用程序收到通知后,可以创建TCP/UDP Socket进行连接服务器的操作
Wi-Fi Station连接命令示范
net sta enable
net sta scan once
net sta scan result
net sta config SSID PW //keep PW NULL when OPEN Mode
net sta connect
Armino Wi-Fi station模式断开连接场景示例
Wi-Fi Station已成功连接至AP的情况下,应用程序调用
bk_wifi_sta_disconnect
主动断开连接.当Wi-Fi因为主动断开、AP离线、RSSI弱等原因断开连接,Wi-Fi事件回调函数引发
EVENT_WIFI_STA_DISCONNECTED
应用程序接收到网络断开事件后,进行网络应用程序的清除,例如关闭TCP/UDP客户端套接字等
通常由于非期待的原因导致Wi-Fi断开,应用程序会发起重新连接
Armino Wi-Fi station模式关闭Wi-Fi场景示例
与上述station模式断开连接场景类似,不再赘述.
Armino Wi-Fi AP模式场景示例
BEKEN SoftAP应用场景可以参考API开发指导中的 bk_wifi_ap_start
,接入AP的STA信息,由 bk_wifi_ap_get_sta_list
获取.
Armino Wi-Fi失败代码原因
Armino Wi-Fi MAC地址配置
Wi-Fi MAC地址配置源码位于 bk_system\mac.c
,分为base_mac、sta_mac、ap_mac,BEKEN Wi-Fi MAC地址整体设计如下:
包含三个功能宏:CONFIG_NEW_MAC_POLICY、CONFIG_RANDOM_MAC_ADDR、CONFIG_BK_MAC_ADDR_CHECK这三个宏都是默认配置y
CONFIG_NEW_MAC_POLICY定义MAC地址默认存放在NET_Param分区的前六个字节;如该地址前6字节为空,则使用随机MAC地址
CONFIG_RANDOM_MAC_ADDR,在NET_Param前6个字节为空,且使能该宏时,随机生成MAC地址,并写入NET_Param分区的MAC地址区域,同时该随机MAC地址会符合BK_MAC_ADDR_CHECK即C8:47:8C
CONFIG_BK_MAC_ADDR_CHECK用于判断客户配置的MAC地址是否符合BEKEN规则C8:47:8C.如不需要,直接在defconfig文件中置为n
上述三个宏定义位于
middleware\soc\bk7236\bk7236.defconfig
,默认值均为y使用[MAC地址配置工具]:bk_writer烧写MAC地址到FLASH,如果全擦flash会导致MAC地址丢失,从而使用随机MAC
使用mac命令写入flash,使用方式如下:
mac c8478caabbcc