用SPI玩转WiFi,RT-Thread ESP-Hosted驱动深度适配指南 | 技术集结

描述

还在为MCU的WiFi连接方案发愁?RT-Thread社区开源ESP-Hosted驱动,通过标准SPI接口即可实现,并且该仓库已整理成RT-Thread软件包。RT-Thread ESP-Hosted项目在 MIT license下作为一个整体,但包含第三方代码在其他许可下。请仔细阅读以下不同许可代码的说明。

目录


 

用途


 

概述


 

使用


 

硬件连接


 

构建ESP32固件


 

检查启动


 

固件更新


 

芯片支持

1

用途


 

用于MCU的spi接口WiFi驱动,适用于已适配RT-Thread的MCU。

已接入RT-Thread的spi设备驱动和wlan框架,与硬件无关代码。

该驱动使用rt-thread标准的spi设备通讯,wlan框架实现wifi命令行的支持

提供esp-idf命令一样的WiFi API调用

上代码:rt-thread_esp-hosted(https://github.com/Evlers/rt-thread_esp-hosted)


 

2

概述


 

该存储库已将 ESP-Hosted-MCU适配于 RT-Thread 系统,⽬前仅⽀持SPI总线协议,并使⽤ RT-Thread 的 SPI Device 进⾏SPI总线操作。


 

这个版本的ESP-Hosted提供:

⼀个标准的802.3⽹络接⼝,⽤于发送和接收802.3帧

⽀持蓝⽛/BLE的标准HCI接⼝

ESP32芯⽚配置和控制Wi-Fi的控制接⼝

⽤于升级ESP固件的OTA接⼝

ESP-Hosted-MCU解决⽅案利⽤主机现有的 TCP/IP 和 蓝牙/BLE 协议栈 和 SPI/SDIO/UART 等硬件外设 连接到ESP固件,软件层非常薄。


 

虽然这个项目没有为主机提供标准的802.11接口,但它提供了⼀种简单的方法,既Remote Procedure Calls(RPCs)用于配置Wi-Fi。对于主机和ESP板之间的RPC,ESP-Hosted-MCU使用了Protobuf (https://developers.google.com/protocol-buffers),这是⼀种独立于语⾔的数据序列化机制。


 

关于ESP-Hosted-MCU的详细信息可以在ESP-Hosted README (https://github.com/Evlers/rt-thread_es

p-hosted/blob/master/esp-hosted/README.md)中找到。


 

3

使用


 

1添加这个仓库

将存储库克隆到RT-Thread项目中的 packages 或 libraries 目录。

在RT-Thread项目的 libraries 或 packages 文件夹中,在其Kconfig文件中包含用于ESP-Hosted 的 Kconfig 文件。

例如,将 ESP-Hosted 包含在 libraries 目录中:

  •  
  •  
  •  

menu "External Libraries"  source "$RTT_DIR/../libraries/rt-thread_esp-hosted/Kconfig"endmenu

2配置 ESP-Hosted

 env 窗口中使用 menuconfig 命令

选中 Using esp-hosted for espressif

  •  
  •  

→ External Libraries   [*] Using esp-hosted for espressif  --->

进入Using esp-hosted for espressif 菜单,配置esp-hosted:

  •  
  •  

--- Using esp-hosted for espressif  ESP-Hosted Configure  --->                                      # ESP-Hosted 配置Select the transport interface(SPI)  --->                  # 选择传输接口      Slave chipset to be used(Slave as ESP32C6)  --->           # 选择从机芯片      [ ] Enable raw throughput transport  ----                   # 启用原始吞吐量传输      [ ] Enable Transport level packet statistics                # 启用传输级别数据包统计(8) The maximum number of simultaneous sync rpc requests    # 同步RPC请求的最大数量(8) The maximum number of simultaneous async rpc requests   # 异步RPC请求的最大数量(20) The priority of the esp-hosted rpc thread              # RPC线程的优先级(5120) The stack size of the esp-hosted rpc thread          # RPC线程的堆栈大小(20) The priority of the esp-hosted transport thread        # 传输线程的优先级(1024) The stack size of the esp-hosted SPI thread          # SPI线程的堆栈大小(8) The number for esp-hosted SPI queue                     # SPI传输队列的数量(esp-hosted) Set the spi device name                        # SPI设备名称(spi1) Set the spi bus name                                 # SPI总线名称(30000000) Set the maximum spi frequency(Hz)                # SPI传输的最大频率          Select the pin name ornumber(Name)  --->              # 选择引脚名称或编号(PE.7) Set the SPI CS pin name                              # SPI CS引脚名称(PE.5) Set the data ready pin name                          # 数据就绪引脚名称(PE.6) Set the handshake pin name                           # 握手引脚名称(PE.4) Set the reset pin name                               # 复位引脚名称      [*] Use thread initialization                               # 使用线程初始化(2048) The stack size of the init thread                    # 初始化线程的堆栈大小(20)  The priority of the init thread                       # 初始化线程的优先级  [*] Enable Bluetooth  --->                                      # 启用蓝牙/BLE HCI接口      Select hci interface(Using vhci device drivers)  --->      # 选择HCI接口(vhci) The vhci device name                                 # vhci设备名称  Wi-Fi Configure  --->                                           # Wi-Fi 配置(40) Max number of WiFi static RX buffers                   # 静态RX缓冲区最大数量(60) Max number of WiFi dynamic RX buffers                  # 动态RX缓冲区最大数量      Type of WiFi TX buffers(Dynamic)  --->                     # WiFi TX缓冲区类型(16) Max number of WiFi cache TX buffers                    # WiFi TX缓存最大数量(40) Max number of WiFi dynamic TX buffers                  # TX动态缓冲区最大数量      [ ] WiFi CSI(Channel State Information)                     # Wi-Fi CSI      [ ] WiFi AMPDU TX                                           # AMPDU TX(数据聚合)      [ ] WiFi AMPDU RX                                           # AMPDU RX(数据聚合)(752) Max length of WiFi SoftAP Beacon                      # SoftAP Beacon最大长度(32) WiFi mgmt short buffer number                          # WiFi mgmt short buffer数量      [*] Enable WPA3-Personal                                    # WPA3-Personal      [ ] WiFi FTM                                                # WiFi FTM      [*] Power Management for station at disconnected            # Wi-Fi PM      [ ] WiFi GCMP Support(GCMP128 and GCMP256)                  # Wi-Fi GCMP      [ ] WiFi GMAC Support(GMAC128 and GMAC256)                  # Wi-Fi GMAC(7) Maximum espnow encrypt peers number                     # espnow加密对等数量      [ ] Enable 802.11R(Fast Transition) Support                # 802.11R

ESP-Hosted Configure 菜单中,主要是 传输接口 从机芯片 以及 传输以为的引脚 配置,其他的默认即可。


 

Select hci interface 选项用于选择使用 vhci设备驱动 或者 NimBLE hci 驱动 的HCI接口。


 

选择 vhci设备驱动 将创建一个 字符类型 设备,该设备将模拟蓝牙HCI接口。


 

选择 NimBLE hci 驱动 将直接接入 NimBLE 协议栈。

Wi-Fi Configure 菜单中,主要是关于 ESP32  WiFi 参数配置。


 

WiFi AMPDU TX 和 WiFi AMPDU RX 选项建议关闭,在测试中发现开启后,Wi-Fi容易丢包,可能是由于路由器不遵循标准协议导致。


 

4

硬件连接


 

驱动

如果您熟悉esp-idf,您也可以尝试修改引脚

或者使⽤ Flash Download Tool (https://dl.espressif.com/public/flash_download_tool.zip) 烧录 firmware  目录中对应芯片的固件。


 

5

构建ESP32固件


 

  •  
  •  
  •  

$ cd esp-hosted/slave$ rm -rf sdkconfig build$ idf.py set-target

其中 可以是 “esp32”, “esp32s2”, “esp32s3”, “esp32c2”, “esp32c3”, “esp32c5”, “esp32c6”

执行以下命令配置项目

  •  

$ idf.py menuconfig

这将打开项目配置窗口。 要选择SPI传输接口,导航到 ESP-Hosted Configuration -> Transport layer -> SPI interface -> select 然后退出菜单配置。

要构建并烧录应用程序到ESP设备,请运行

  •  

$ idf.py -p build flash

收集ESP固件日志使用

  •  

$ idf.py -p monitor


 

6

检查启动


 

1从机日志

在成功烧录后,您应该在ESP日志中看到以下信息:

  •  
  •  
  •  
  •  

I (412) NETWORK_ADAPTER: *********************************************************************I (422) NETWORK_ADAPTER:                 ESP-Hosted-MCU Slave FW version :: 1.0.0I (432) NETWORK_ADAPTER:                 Transport used :: SPI onlyI(442) NETWORK_ADAPTER: *********************************************************************

2主机日志

您应该在主机日志中看到以下信息:

 

 \ | /- RT -     Thread Operating System / | \     5.0.2 build Feb 15202509:39:292006 - 2022 Copyright by RT-Thread teamlwIP-2.1.2 initialized![4] I/SFUD: Found a Winbond flash chip. Size is 16777216 bytes.[9] I/SFUD: norflash flash device initialized successfully.[14] I/SFUD: Probe SPI flash norflash by SPI device spiflash success.[I/FAL] RT-Thread Flash Abstraction Layer initialize success.[39] I/sal.skt: Socket Abstraction Layer initialize success.[I/FAL] The FAL block device(filesystem) created successfully[154] I/SDIO: SD card capacity 31166976 KB.found part[0], begin: 2097152, size: 29.738GB[167] I/filesystem: sd card mount to '/sdcard'[1265] I/transport: Features supported are:[1266] I/transport:        - WLAN over SPI[1269] I/transport:        - HCI over SPI[1273] I/transport:        - BLE only[1276] I/transport: Chip is: ESP32c6[1279] I/vhci.dev: Host BT Support: Enabled[1283] I/vhci.dev: BT Transport Type: vhci devices[2387] I/WLAN.dev: wlan init success[2424] I/WLAN.lwip: eth device init ok name:w0[2426] I/WLAN.dev: wlan init success[2444] I/WLAN.lwip: eth device init ok name:w1


 

7

固件更新


 

ESP-Hosted 支持通过传输接口升级 ESP32 固件,升级过程如下:

  •  
  •  

msh />esp_ota /flash/network_adapter.binesp-hosted ota update startederasing the ota partition..writing: [==================================================] 100%  1084496 | 100 KB/sfirmware write success!!slave will restart after 5 sec

esp_ota 命令可以支持 在线下载 或者 本地文件 作为固件升级包。

在线下载 方式需要依赖 webclient 软件包:

  •  
  •  
  •  
  •  
  •  
  •  
  •  

msh />esp_ota https://file.server.com/network_adapter.binesp-hosted ota update startederasing the ota partition..writing: [==================================================] 100%  1084496 | 81 KB/sfirmware write success!!slave will restart after 5 secmsh />


 

8

芯片支持


 


 

驱动

‘x’ 表示不支持

‘o’ 表示已测试和支持

‘*’ 表示理论上支持,但未经检验的


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分