用途
用于MCU的SDIO接口WiFi驱动,适用于已适配RT-Thread的MCU。
已接入RT-Thread的mmcsd设备驱动和wlan框架,与硬件无关代码。
选型的芯片SDIO外设需要接入mmcsd设备驱动,例如AT32/STM32等都已完成mmcsd的接入。
该驱动操作mmcsd实现sdio通讯,wlan框架实现wifi 命令行的支持
废话不多说,直接上代码:RT-Thread Wi-Fi Host Driver (WHD)
描述
WHD是一个独立的嵌入式Wi-Fi主机驱动程序,它提供了一组与英飞凌WLAN芯片交互的api。WHD是一个独立的固件产品,可以很容易地移植到任何嵌入式软件环境,包括流行的物联网框架,如Mbed OS和Amazon FreeRTOS。因此,WHD包含了RTOS和TCP/IP网络抽象层的钩子。
有关Wi-Fi主机驱动程序的详细信息可以在Wi-Fi主机驱动程序自述文件中找到。
发行说明详细说明了当前的发行版本。您还可以找到有关以前版本的信息。
该仓库库已经将WHD适应了RT-Thread系统,目前只支持SDIO总线协议,并使用RT-Thread的mmcsd进行SDIO总线操作。
欢迎大家PR支持更多总线接口和芯片。
使用方法
在软件包选中Wifi-Host-Driver(WHD) for RT-Thread
RT-Thread online packages ---> # 在线软件包
IoT - internet of things ---> # IOT菜单栏中
[*] Wifi-Host-Driver(WHD) for RT-Thread. ---> # 选中该软件包
软件包配置
--- Wifi-Host-Driver(WHD) for RT-Thread
Select Chips (CYW43438) ---> # 选择相应的芯片
[*] Using resources in external storage(FAL) ---> # 使用FAL组件加载资源
[ ] Using custom nvram files # 使用自定义nvram头文件
[ ] Default enable powersave mode # 默认启用低功耗模式
(8) The priority level value of WHD thread # 配置WHD线程的优先级
(5120) The stack size for WHD thread # 配置WHD线程的堆栈大小
Select the pin name or number (Number) ---> # 选择引脚名称或引脚编号
(-1) Set the WiFi_REG ON pin number # 设置模块的WL_REG_ON引脚
(-1) Set the HOST_WAKE_IRQ pin number # 设置模块的HOST_WAKE_IRQ引脚
Select HOST_WAKE_IRQ event type (falling) ---> # 选择“唤醒主机”的边沿
(2) Set the interrput priority for HOST_WAKE_IRQ pin # 设置外部中断优先级
[ ] Using thread initialization # 创建一个线程来初始化驱动
注意
SDIO驱动需要支持流传输。在RT-Thread的BSP中,大多数芯片都没适配字节流传输的功能。
Cortex-M4内核需要软件来计算CRC16并在数据后发送,参考我另一篇博客:SDIO字节流传输
对于Cortex-M7内核,修改“drv_sdio.c”文件的一处地方即可,示例如下:
/* The example is an sdio driver for the STM32H750 */
SCB_CleanInvalidateDCache();
reg_cmd |= SDMMC_CMD_CMDTRANS;
hw_sdio->mask &= ~(SDMMC_MASK_CMDRENDIE | SDMMC_MASK_CMDSENTIE);
hw_sdio->dtimer = HW_SDIO_DATATIMEOUT;
hw_sdio->dlen = data->blks * data->blksize;
hw_sdio->dctrl = (get_order(data->blksize)<<4) |
(data->flags & DATA_DIR_READ ? SDMMC_DCTRL_DTDIR : 0) | \
/* Adds detection of the DATA_STREAM flag */
((data->flags & DATA_STREAM) ? SDMMC_DCTRL_DTMODE_0 : 0);
hw_sdio->idmabase0r = (rt_uint32_t)sdio->cache_buf;
hw_sdio->idmatrlr = SDMMC_IDMA_IDMAEN;
资源下载 (该项目默认使用内部资源,可跳过这一步骤)
WiFi固件储存到代码区域中,固件会变的很大,烧录很慢,影响调试进度!
通过FAL组件外部加载固件以及CLM文件,这样MCU固件就能缩减很多,烧录也会快很多!
可以通过ymodem协议下载资源文件。驱动会使用FAL组件来加载资源文件。
资源下载功能依赖于ymodem组件,请确保打开RT_USING_RYM和WHD_RESOURCES_IN_EXTERNAL_STORAGE宏定义
- 在MSH终端上执行"whd_res_download"命令下载资源,该命令需要输入资源文件的分区名称。
- 下载资源文件的实例(使用默认分区名,根据实际情况填写):
# For example, my partition configuration
/* partition table */
/* magic_word partition name flash name offset size reserved */
#define FAL_PART_TABLE \
{ \
{ FAL_PART_MAGIC_WORD, "whd_firmware", "onchip_flash", 0, 448 * 1024, 0 }, \
{ FAL_PART_MAGIC_WORD, "whd_clm", "onchip_flash", 448 * 1024, 32 * 1024, 0 }, \
{ FAL_PART_MAGIC_WORD, "easyflash", "onchip_flash", 480 * 1024, 32 * 1024, 0 }, \
{ FAL_PART_MAGIC_WORD, "filesystem", "onchip_flash", 512 * 1024, 512 * 1024, 0 }, \
}
# Download firmware files
whd_res_download whd_firmware
# Download clm files
whd_res_download whd_clm
- ymodem工具可以使用xshell,在完成命令输入后,等待xshell启动文件传输。
msh >whd_res_download whd_firmware
Please select the whd_firmware file and use Ymodem to send.
- 此时,在xshell中右键单击鼠标,选择“文件传输”并选择“使用ymodem发送”。
- 在“whd”的“resources(wifi-host-driver/WiFi_Host_Driver/resources)”目录下,选择对应芯片的资源文件。
- 传输完成后,msh将输出如下日志。
Download whd_firmware to flash success. file size: 419799
- 下载完固件和clm资源文件后,复位重新初始化即可正常运行。
测试效果
本人已经使用GD32F470以及STM32H750测试完成
基于ART-PI开发板的测试工程:ART-PI RT-Thread WiFi-Host-Driver



上图的CYW43012性能是根据GD32F470测试
更多信息
- Wi-Fi Host Driver API Reference Manual and Porting Guide
- Wi-Fi Host Driver Release Notes
- Infineon Technologies
模组选择
该项目使用"新联鑫威(杭州)科技有限公司"的英飞凌模组进行测试,以下是模组型号和对应的芯片型号:

如需模组测试可到新联鑫威淘宝购买。
这家有TF卡转接板,可以很方便的插到开发板的TF卡槽进行测试。
联系方式&支持
- 邮箱: 1425295900@qq.com
- 微信:Evlers
- 如果驱动上有什么问题欢迎提交PR或者联系我一起交流
- 后续将继续添加蓝牙功能,敬请期待~!欢迎大家Star&PR
- 如果你觉得这个项目不错,并且能够满足您的需求,不妨请我喝杯咖啡吧~ 感谢支持!!

521

被折叠的 条评论
为什么被折叠?



