update esp32c3 iperf config

This commit is contained in:
chenjianxing
2021-04-21 11:56:45 +08:00
parent eccdf88712
commit c66b1aeda7
3 changed files with 299 additions and 79 deletions
+132 -37
View File
@@ -32,24 +32,24 @@
Wi-Fi 初始化
+++++++++++++++
请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_`[IDF_TARGET_NAME] Wi-Fi AP 一般情况`_
请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_`{IDF_TARGET_NAME} Wi-Fi AP 一般情况`_
启动/连接 Wi-Fi
++++++++++++++++++++
请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_`[IDF_TARGET_NAME] Wi-Fi AP 一般情况`_
请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_`{IDF_TARGET_NAME} Wi-Fi AP 一般情况`_
事件处理
++++++++++++++
通常,在晴好环境下编写代码难度并不大,如 `WIFI_EVENT_STA_START`_、`WIFI_EVENT_STA_CONNECTED`_ 中所述。难度在于如何在阴翳的困难环境下编写代码,如 `WIFI_EVENT_STA_DISCONNECTED`_ 中所述。能否在后者情况下完美地解决各类事件冲突,是编写一个强健的 Wi-Fi 应用程序的根本。请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_、`[IDF_TARGET_NAME] Wi-Fi AP 一般情况`_。另可参阅 ESP-IDF 中的事件处理概述 `Event Handling <https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/event-handling.html?highlight=event%20handling>`_
通常,在晴好环境下编写代码难度并不大,如 `WIFI_EVENT_STA_START`_、`WIFI_EVENT_STA_CONNECTED`_ 中所述。难度在于如何在阴翳的困难环境下编写代码,如 `WIFI_EVENT_STA_DISCONNECTED`_ 中所述。能否在后者情况下完美地解决各类事件冲突,是编写一个强健的 Wi-Fi 应用程序的根本。请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_、`{IDF_TARGET_NAME} Wi-Fi AP 一般情况`_。另可参阅 ESP-IDF 中的事件处理概述 `Event Handling <https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/event-handling.html?highlight=event%20handling>`_
编写错误恢复程序
++++++++++++++++++++++++++++++++++++++++++++++++++++
除了在能在比较差的环境下工作,错误恢复能力也对一个强健的 Wi-Fi 应用程序至关重要。请参阅 `[IDF_TARGET_NAME] Wi-Fi API 错误代码`_
除了在能在比较差的环境下工作,错误恢复能力也对一个强健的 Wi-Fi 应用程序至关重要。请参阅 `{IDF_TARGET_NAME} Wi-Fi API 错误代码`_
[IDF_TARGET_NAME] Wi-Fi API 错误代码
{IDF_TARGET_NAME} Wi-Fi API 错误代码
--------------------------------------
所有 [IDF_TARGET_NAME] Wi-Fi API 都有定义好的返回值,即错误代码。这些错误代码可分类为:
所有 {IDF_TARGET_NAME} Wi-Fi API 都有定义好的返回值,即错误代码。这些错误代码可分类为:
- 无错误,例如:返回值 ESP_OK 代表 API 成功返回
- 可恢复错误,例如:ESP_ERR_NO_MEM
@@ -66,7 +66,7 @@ Wi-Fi 初始化
在 esp_err.h 中,ESP_ERROR_CHECK 负责检查返回值。这是一个较为常见的错误处理代码,可在应用程序开发阶段作为默认的错误处理代码。但是,我们强烈建议 API 的使用者自己编写错误处理代码。
初始化 [IDF_TARGET_NAME] Wi-Fi API 参数
初始化 {IDF_TARGET_NAME} Wi-Fi API 参数
----------------------------------------------------
初始化 API 的结构参数时,应遵循以下两种方式之一:
@@ -78,9 +78,9 @@ Wi-Fi 初始化
.. _wifi-programming-model:
[IDF_TARGET_NAME] Wi-Fi 编程模型
{IDF_TARGET_NAME} Wi-Fi 编程模型
-----------------------------------------
[IDF_TARGET_NAME] Wi-Fi 编程模型如下图所示:
{IDF_TARGET_NAME} Wi-Fi 编程模型如下图所示:
.. blockdiag::
:caption: Wi-Fi 编程模型
@@ -364,7 +364,7 @@ Wi-Fi 驱动程序初始化成功后,可以进入到配置阶段。该场景
- s8.3:调用函数 :cpp:func:`esp_wifi_deinit()` 清理 Wi-Fi 驱动程序。
[IDF_TARGET_NAME] Wi-Fi AP 一般情况
{IDF_TARGET_NAME} Wi-Fi AP 一般情况
---------------------------------------------
下图为 AP 模式下的宏观场景,其中包含不同阶段的具体描述:
@@ -1151,7 +1151,7 @@ LR 兼容性
根据上表,得出以下结论:
- 对于已使能 LR 的 {IDF_TARGET_NAME} AP,由于不是以 LR 模式发送 beacon,因此与传统的 802.11 模式不兼容。
- 对于已使能 LR 且并非仅 LR 模式的 [IDF_TARGET_NAME] station,与传统 802.11 模式兼容。
- 对于已使能 LR 且并非仅 LR 模式的 {IDF_TARGET_NAME} station,与传统 802.11 模式兼容。
- 如果 station 和 AP 都是 {IDF_TARGET_NAME} 设备,并且两者都使能 LR 模式,则协商的模式支持 LR。
如果协商的 Wi-Fi 模式同时支持传统的 802.11 模式和 LR 模式,则 Wi-Fi 驱动程序会在不同的 Wi-Fi 模式下自动选择最佳数据速率,应用程序无需任何操作。
@@ -1327,23 +1327,65 @@ AP 睡眠
下表是我们在 Espressif 实验室和屏蔽箱中获得的最佳吞吐量结果。
+----------------------------+----------------+------------+---------------+----------------------+
| 类型/吞吐量 | 实验室空气状况 | 屏蔽箱 | 测试工具 | IDF 版本 (commit ID) |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包接收数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包发送数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 接收数据 | 30 MBit/s | 90 MBit/s | iperf example | 05838641 |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 发送数据 | 30 MBit/s | 60 MBit/s | iperf example | 05838641 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 接收数据 | 20 MBit/s | 50 MBit/s | iperf example | 05838641 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 发送数据 | 20 MBit/s | 50 MBit/s | iperf example | 05838641 |
+----------------------------+----------------+------------+---------------+----------------------+
.. only:: esp32
使用 iperf example 测试吞吐量时,sdkconfig 是 :idf_file:` 示例/wifi/iperf/sdkconfig.ci.99`
+----------------------------+----------------+------------+---------------+----------------------+
| 类型/吞吐量 | 实验室空气状况 | 屏蔽箱 | 测试工具 | IDF 版本 (commit ID) |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包接收数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包发送数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 接收数据 | 30 MBit/s | 85 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 发送数据 | 30 MBit/s | 75 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 接收数据 | 20 MBit/s | 65 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 发送数据 | 20 MBit/s | 75 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
使用 iperf example 测试吞吐量时,sdkconfig 是 :idf_file:` 示例/wifi/iperf/sdkconfig.defaults.esp32`
.. only:: esp32s2
+----------------------------+----------------+------------+---------------+----------------------+
| 类型/吞吐量 | 实验室空气状况 | 屏蔽箱 | 测试工具 | IDF 版本 (commit ID) |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包接收数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包发送数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 接收数据 | 30 MBit/s | 70 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 发送数据 | 30 MBit/s | 50 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 接收数据 | 20 MBit/s | 32 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 发送数据 | 20 MBit/s | 37 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
使用 iperf example 测试吞吐量时,sdkconfig 是 :idf_file:` 示例/wifi/iperf/sdkconfig.defaults.esp32s2`
.. only:: esp32c3
+----------------------------+----------------+------------+---------------+----------------------+
| 类型/吞吐量 | 实验室空气状况 | 屏蔽箱 | 测试工具 | IDF 版本 (commit ID) |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包接收数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| 原始 802.11 数据包发送数据 | N/A | 130 MBit/s | 内部工具 | N/A |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 接收数据 | 30 MBit/s | 50 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| UDP 发送数据 | 30 MBit/s | 40 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 接收数据 | 20 MBit/s | 35 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
| TCP 发送数据 | 20 MBit/s | 37 MBit/s | iperf example | 15575346 |
+----------------------------+----------------+------------+---------------+----------------------+
使用 iperf example 测试吞吐量时,sdkconfig 是 :idf_file:` 示例/wifi/iperf/sdkconfig.defaults.esp32c3`
Wi-Fi 80211 数据包发送
---------------------------
@@ -1613,12 +1655,18 @@ Wi-Fi 协议中定义了四个 AC (访问类别),每个 AC 有各自的优
Wi-Fi AMSDU
-------------------------
{IDF_TARGET_NAME} 支持接收 AMSDU,但不支持发送 AMSDU。因为 {IDF_TARGET_NAME} 已发送 AMPDU,因此无需发送 AMSDU。
{IDF_TARGET_NAME} 支持接收发送 AMSDU。
Wi-Fi 分片
-------------------------
[IDF_TARGET_NAME] 支持 Wi-Fi 接收分片,但不支持 Wi-Fi 发送分片。未来的版本将支持 Wi-Fi 传输分片。
.. only:: esp32 or esp32s2
支持 Wi-Fi 接收分片,但不支持 Wi-Fi 发送分片。
.. only:: esp32c3
ESP32C3 支持 Wi-Fi 接收和发送分片。
WPS 注册
-------------------------
@@ -1725,11 +1773,13 @@ Wi-Fi 使用的堆内存峰值是 Wi-Fi 驱动程序 **理论上消耗的最大
**通过在 IRAM 中放置代码优化吞吐量:**
- :ref:`CONFIG_ESP32_WIFI_IRAM_OPT`
如果使能该选项,一些 Wi-Fi 功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 15 kB。
.. only:: esp32 or esp32s2
- :ref:`CONFIG_ESP32_WIFI_RX_IRAM_OPT`
如果使能该选项,一些 Wi-Fi 接收数据功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 16 kB。
- :ref:`CONFIG_ESP32_WIFI_IRAM_OPT`
如果使能该选项,一些 Wi-Fi 功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 15 kB。
- :ref:`CONFIG_ESP32_WIFI_RX_IRAM_OPT`
如果使能该选项,一些 Wi-Fi 接收数据功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 16 kB。
- :ref:`CONFIG_LWIP_IRAM_OPTIMIZATION`
如果使能该选项,一些 LWIP 功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 13 kB。
@@ -1829,6 +1879,36 @@ Wi-Fi 使用的堆内存峰值是 Wi-Fi 驱动程序 **理论上消耗的最大
| UDP 接收数据吞吐量 | 78.1 | 66.7 | 65.3 | 53.8 | 28.5 |
+----------------------------+-------+--------+------+----------+-------+
.. only:: esp32c3
+----------------------------+-------+---------+---------+
| 等级 | Iperf | 默认 | 最小 |
+============================+=======+=========+=========+
| 可用内存(KB) | 59 | 160 | 180 |
+----------------------------+-------+---------+---------+
| WIFI_STATIC_RX_BUFFER_NUM | 20 | 8 | 3 |
+----------------------------+-------+---------+---------+
| WIFI_DYNAMIC_RX_BUFFER_NUM | 40 | 16 | 6 |
+----------------------------+-------+---------+---------+
| WIFI_DYNAMIC_TX_BUFFER_NUM | 40 | 16 | 6 |
+----------------------------+-------+---------+---------+
| WIFI_RX_BA_WIN | 32 | 16 | 6 |
+----------------------------+-------+---------+---------+
| TCP_SND_BUF_DEFAULT(KB) | 40 | 16 | 6 |
+----------------------------+-------+---------+---------+
| TCP_WND_DEFAULT(KB) | 40 | 16 | 6 |
+----------------------------+-------+---------+---------+
| LWIP_IRAM_OPTIMIZATION | 13 | 13 | 0 |
+----------------------------+-------+---------+---------+
| TCP 发送数据吞吐量 | 38.1 | 27.2 | 20.4 |
+----------------------------+-------+---------+---------+
| TCP 接收数据吞吐量 | 35.3 | 24.2 | 17.4 |
+----------------------------+-------+---------+---------+
| UDP 发送数据吞吐量 | 40.6 | 38.9 | 34.1 |
+----------------------------+-------+---------+---------+
| UDP 接收数据吞吐量 | 52.4 | 44.5 | 44.2 |
+----------------------------+-------+---------+---------+
.. note::
以上结果由使用华硕RT-N66U路由器,在屏蔽箱中进行单流测试得出。{IDF_TARGET_NAME} 的 CPU 为双核,频率为 240 MHzflash 为 QIO 模式,频率为 80 MHz。
@@ -1871,11 +1951,26 @@ Wi-Fi 使用的堆内存峰值是 Wi-Fi 驱动程序 **理论上消耗的最大
- **最小等级**
{IDF_TARGET_NAME} 的最小配置等级。协议栈只使用运行所需的内存。适用于对性能没有要求,而应用程序需要大量内存的场景。
使用 PSRAM
++++++++++++++++++++++++++++
.. only:: esp32c3
PSRAM 一般在应用程序占用大量内存时使用。在该模式下,:ref:`CONFIG_ESP32_WIFI_TX_BUFFER` 被强制为静态。:ref:`CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM` 表示硬件层 DMA 缓冲区数量,提高这一参数可以增强性能。
我们推荐以下 PSRAM 等级。
**等级:**
- **Iperf 等级**
{IDF_TARGET_NAME} 极端性能等级,用于测试极端性能。
- **默认等级**
IDF_TARGET_NAME} 的默认配置等级、兼顾可用内存和性能。
- **最小等级**
{IDF_TARGET_NAME} 的最小配置等级。协议栈只使用运行所需的内存。适用于对性能没有要求,而应用程序需要大量内存的场景。
.. only:: esp32 or esp32s2
使用 PSRAM
++++++++++++++++++++++++++++
PSRAM 一般在应用程序占用大量内存时使用。在该模式下,:ref:`CONFIG_ESP32_WIFI_TX_BUFFER` 被强制为静态。:ref:`CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM` 表示硬件层 DMA 缓冲区数量,提高这一参数可以增强性能。
我们推荐以下 PSRAM 等级。
.. only:: esp32