全志XR806芯片Wi-Fi测试:自定义发送802.11帧(Beacon篇)
[复制链接]
XR806是一款使用ARMv8-M的Wi-Fi BLE Combo MCU。本文使用XR806开发板以及基于FreeRTOS的XR806 SDK实现了自定义发送802.11 Beacon帧,并进行了无线抓包分析以及扫描测试来验证帧的发送结果。
环境配置过程
环境搭建可以参考官方文档开发环境搭建。本测试中使用的开发环境为Ubuntu 22.04。需要注意的是,在下载ARM Toolchain时,由于网站更新,文档中链接已不可用,当前可用的下载链接为https://developer.arm.com/downloads/-/gnu-rm,在其中找到对应的gcc-arm-none-eabi-8-2019-q3-update版本下载即可。
配置好环境后选取某个Demo或者Example进行编译,在Ubuntu下,使用的烧录工具为SDK中tools 目录下的phoenixMC 可执行程序,示例的烧录命令为
其他参数信息可以使用-h 获取。烧录好后可以连接串口查看输出,控制台输出可能会出现换行不对齐的情况,此时需要进行换行修正。在本次测试中使用的串口工具为picocom ,需要将输出的\n 转为\r\n 示例的连接串口命令为
在烧录时需要让开发板进入升级模式,如果当前程序支持upgrade 命令,可以直接发送upgrade 命令。若不支持,需要短接开发板上的两个触点或者使用Windows下的烧录工具,在工具上勾选硬件复位烧写模式。
测试过程
通过浏览XR806的SDK可以发现,在wlan.h 中提供有APIint wlan_send_raw_frame(struct netif *netif, int type, uint8_t *buffer, int len); 。该API可以支持发送自定义的802.11帧,只需要提供网络接口,帧类型,数据帧和长度即可。受 启发,在本测试中基于该API发送自定义的Beacon帧,达到同时存在多个AP的假象。在IBSS网络架构中,AP每隔一段时间就会向外界发出一个Beacon帧用来宣告自己802.11网络的存在。平时Wi-Fi的被动扫描也是基于Beacon帧进行。
使用API构造BEACON
进一步浏览SDK可以发现,SDK中提供了wlan_construct_beacon 的API,这简化了我们构造Beacon的过程。只要提供beacon的部分字段信息即可,如SA,DA,BSSID,Channel等。具体代码如下:
代码的基本逻辑为:首先预定义好需要发送的SSID及其对应的BSSID,然后在主函数中先初始化AP模式,然后每100ms发送一次所有的Beacon。发送Beacon前需要填充好Beacon帧的内容。
测试效果如下:
在代码中我们使用的SSID列表为
上电后程序启动,使用手机扫描Wi-Fi便可以查看到这些AP信息
EEWORLDLINKTK2
其中AP-XRADIO为默认的AP名称。
不使用API构造BEACON
我们也可以不使用相关API,而直接填充内容。为了演示,在这里将参考项目的实现迁移过来,具体代码如下:
测试效果如下:
使用Netspot工具获取无线AP列表
可以看到我们定义的SSID列表(Never gonna give you up),同时和默认的AP名称AP-XRADIO。
对XR806的Beacon进行无线抓包分析,如图所示
可以看出XR806所支持的速率和其他特性。
|