RT-Thread Wi-Fi Host Driver (WHD)

该文章已生成可运行项目,

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

用途

用于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测试

更多信息

模组选择

该项目使用"新联鑫威(杭州)科技有限公司"的英飞凌模组进行测试,以下是模组型号和对应的芯片型号:

如需模组测试可到新联鑫威淘宝购买。

这家有TF卡转接板,可以很方便的插到开发板的TF卡槽进行测试。

联系方式&支持

  • 邮箱: 1425295900@qq.com
  • 微信:Evlers
  • 如果驱动上有什么问题欢迎提交PR或者联系我一起交流
  • 后续将继续添加蓝牙功能,敬请期待~!欢迎大家Star&PR
  • 如果你觉得这个项目不错,并且能够满足您的需求,不妨请我喝杯咖啡吧~ 感谢支持!!

本文章已经生成可运行项目

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值