欢迎光临散文网 会员登陆 & 注册

STM32 - 无线模块 88W8801 基础主机驱动

2023-08-09 07:31 作者:山路旁的辉翎  | 我要投稿

Marvell 88W8801 是一款支持 2.4 GHz、IEEE 802.11n 协议的无线模块,其内部仅集成了 CPU、SRAM、MAC、Baseband 等必要组件,相比于其他高度集成的无线模块而言透明度更高,灵活性更好。该模块支持 USB 2.0 和 SDIO 2.0 接口,简单应用场景下速率表现还不错;在 STM32 等单片机上工作时,通常考虑设计 SDIO 驱动。

为什么不选择更常见的 nRF24L01、ESP8266 或者 ESP32 等无线模块呢?好问题,这里分开来说。nRF24L01 在传输大量数据时速率实在是个问题,ESP8266 的 NonOS SDK 不再更新,ESP32 虽然有 SDIO 驱动,但是没找到无操作系统的方案,这部分的官方文档也少得可怜。

除了这些因素,集成度太高和独立开发环境(点名表扬 ESP-IDF)两大问题才是重中之重。集成度太高隐藏了过多细节,调整也麻烦;独立开发环境本身就让人头痛,感觉......不如 Qt(

开始之前,请务必阅读大佬的文章,里面详细介绍了 88W8801 驱动的实现过程:https://wlink.blog.csdn.net/article/details/103786004

在此基础上,这里做了一些微不足道的改进,供各位参考:https://github.com/glifeather/marvell_wlan_host_driver

阅读下方内容时,建议同时参考上述链接(Github 上的 README 偏向使用方法,这里重在简述代码逻辑)。

首先选择单片机型号。STM32F1 系列虽然有 SDIO 接口,但系统主频较低,内存也较小,因此选择的是 STM32F407。调试信息输出到 SPI2 上的 TFT-LCD,屏幕大小为 128*160(在头文件中定义),驱动芯片为 ST7735S。通过修改 debug.c,也可输出到串口或其他设备上。

为什么从 SPI2 开始呢?因为开发板的板载 Flash 连接到了 SPI1 上(ˉ▽ˉ;)。由于无线模块内置 ROM 空间较小,上电时要求主机将固件发送到 SRAM 中运行。如果直接将固件保存到 const 变量,将极大延长烧录时间,不妨第一次就将固件写入 Flash,之后每次读取 16-1024 字节(由模块给定),通过 SDIO 接口发送出去。在 AC6 编译器下,这将导致无法切换 Ready 状态或校验 CRC 出错,将优化等级改为 -Oz 即可,原因不明。

88w8801_flash.c 负责操作 W25Q16DV

如果看到这里——别急,请先阅读一下代码吧(写了一晚上,让咱先补个觉......

STM32 - 无线模块 88W8801 基础主机驱动的评论 (共 条)

分享到微博请遵守国家法律