README_CN.md 11 KB

RT-Thread ESP-Hosted

中文 | English

该项目在MIT license下作为一个整体,但包含第三方代码在其他许可下。请仔细阅读以下不同许可代码的说明。

概述

该存储库已将ESP-Hosted-MCU适配于RT-Thread系统,目前仅支持SPI总线协议,并使用RT-ThreadSPI 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,这是一种独立于语言的数据序列化机制。

关于ESP-Hosted-MCU的详细信息可以在ESP-Hosted README中找到。

使用

添加这个仓库

  • 将存储库克隆到RT-Thread项目中的 packageslibraries目录。
  • 在RT-Thread项目的librariespackages文件夹中,在其Kconfig文件中包含用于ESP-HostedKconfig文件。
  • 例如,将ESP-Hosted包含在libraries目录中:

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

配置 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 or number (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菜单中,主要是关于ESP32WiFi参数配置。
WiFi AMPDU TXWiFi AMPDU RX选项建议关闭,在测试中发现开启后,Wi-Fi容易丢包,可能是由于路由器不遵循标准协议导致。

硬件连接

Signal ESP32 ESP32-C2/C3/C5/C6 ESP32-S2/S3
CLK 14 6 12
MOSI 13 7 11
MISO 12 2 13
CS 15 10 10
Handshake 26 3 17
Data Ready 4 4 5
Reset In EN EN/RST EN/RST

如果您熟悉esp-idf,您也可以尝试修改引脚
或者使用 Flash Download Tool 烧录 firmware 目录中对应芯片的固件。

构建ESP32固件

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

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

  • 执行以下命令配置项目

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

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

    $ idf.py -p <serial_port> build flash
    
  • 收集ESP固件日志使用

    $ idf.py -p <serial_port> monitor
    

检查启动

从机日志

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

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

主机日志

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

 \ | /
- RT -     Thread Operating System
 / | \     5.0.2 build Feb 15 2025 09:39:29
 2006 - 2022 Copyright by RT-Thread team
lwIP-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

固件更新

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

msh />esp_ota /flash/network_adapter.bin
esp-hosted ota update started
erasing the ota partition..
writing: [==================================================] 100%  1084496 | 100 KB/s
firmware write success!!
slave will restart after 5 sec

esp_ota命令可以支持在线下载或者本地文件作为固件升级包。
在线下载方式需要依赖webclient软件包:

msh />esp_ota https://file.server.com/network_adapter.bin
esp-hosted ota update started
erasing the ota partition..
writing: [==================================================] 100%  1084496 | 81 KB/s
firmware write success!!
slave will restart after 5 sec
msh />

芯片支持

CHIP SDIO SPI
ESP32 x *
ESP32-C6 x o
ESP32-C5 x *
ESP32-C3 x o
ESP32-C2 x o
ESP32-S3 x *
ESP32-S2 x *

'x' 表示不支持
'o' 表示已测试和支持
'*' 表示理论上支持,但未经检验的

更多信息