Lines Matching full:-
1 Wi-Fi 驱动程序
5 {IDF_TARGET_NAME} Wi-Fi 功能列表
6 ------------------------------------
7 - 支持仅 station 模式、仅 AP 模式、station/AP 共存模式
8 - 支持使用 IEEE 802.11B、IEEE 802.11G、IEEE 802.11N 和 API 配置协议模式
9 - 支持 WPA/WPA2/WPA2-企业版和 WPS
10 - 支持 AMPDU、HT40、QoS 以及其它主要功能
11 - 支持 Modem-sleep
12 - 支持乐鑫专属协议,可实现 **1 km** 数据通信量
13 - 空中数据传输最高可达 20 MBit/s TCP 吞吐量和 30 MBit/s UDP 吞吐量
14 - 支持 Sniffer
15 - 支持用于 Wi-Fi 连接的 fast_crypto 算法与普通算法的切换
16 - 支持快速扫描和全信道扫描
17 - 支持多个天线
18 - 支持获取信道状态信息
20 如何编写 Wi-Fi 应用程序
21 ----------------------------------
25 一般来说,要编写自己的 Wi-Fi 应用程序,最高效的方式是先选择一个相似的应用程序示例,然后将其中可用的部分移植到自己的项目中。如果您希望编写一个强健的 Wi-Fi 应用程序,强烈建议您在开始之前…
27 本文将补充说明 Wi-Fi API 和 Wi-Fi 示例的相关信息,重点描述使用 Wi-Fi API 的原则、当前 Wi-Fi API 实现的限制以及使用 Wi-Fi 时的常见错误。同时,本文还介绍…
29 设置 Wi-Fi 编译时选项
31 请参阅 `Wi-Fi menuconfig`_。
33 Wi-Fi 初始化
35 请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_、`{IDF_TARGET_NAME} Wi-Fi AP 一般情况`_。
37 启动/连接 Wi-Fi
39 请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_、`{IDF_TARGET_NAME} Wi-Fi AP 一般情况`_。
43 …-Fi 应用程序的根本。请参阅 `{IDF_TARGET_NAME} Wi-Fi station 一般情况`_、`{IDF_TARGET_NAME} Wi-Fi AP 一般情况`_。另可参阅 ES…
47 除了在能在比较差的环境下工作,错误恢复能力也对一个强健的 Wi-Fi 应用程序至关重要。请参阅 `{IDF_TARGET_NAME} Wi-Fi API 错误代码`_。
50 {IDF_TARGET_NAME} Wi-Fi API 错误代码
51 --------------------------------------
52 所有 {IDF_TARGET_NAME} Wi-Fi API 都有定义好的返回值,即错误代码。这些错误代码可分类为:
54 - 无错误,例如:返回值 ESP_OK 代表 API 成功返回
55 - 可恢复错误,例如:ESP_ERR_NO_MEM
56 - 不可恢复的非关键性错误
57 - 不可恢复的关键性错误
61 **要使用 Wi-Fi API 编写一个强健的应用程序,根本原则便是要时刻检查错误代码并编写相应的错误处理代码。** 一般来说,错误处理代码可用于解决:
63 …- 可恢复错误,您可以编写一个可恢复错误处理代码解决该类错误。例如,当 :cpp:func:`esp_wifi_start` 返回 ESP_ERR_NO_MEM 时,调用可恢复错误处理代码 vTa…
64 - 不可恢复非关键性错误,打印错误代码可以帮助您更好地处理该类错误。
65 …- 不可恢复关键性错误,可使用 "assert" 语句处理该类错误。例如,如果 :cpp:func:`esp_wifi_set_mode` 返回 ESP_ERR_WIFI_NOT_INIT,该值意…
69 初始化 {IDF_TARGET_NAME} Wi-Fi API 参数
70 ----------------------------------------------------
74 - 设置该参数的所有字段
75 - 先使用 get API 获取当前配置,然后只设置特定于应用程序的字段
79 .. _wifi-programming-model:
81 {IDF_TARGET_NAME} Wi-Fi 编程模型
82 -----------------------------------------
83 {IDF_TARGET_NAME} Wi-Fi 编程模型如下图所示:
86 :caption: Wi-Fi 编程模型
89 blockdiag wifi-programming-model {
103 WIFI_DRV [label="Wi-Fi\n Driver", width = 120, fontsize=12];
107 TCP_STACK -> EVNT_TASK [label=event];
108 EVNT_TASK -> APPL_TASK [label="callback\n or event"];
114 EVNT_TASK <- WIFI_DRV [label=event];
121 APPL_TASK -- KNOT;
123 WIFI_DRV <- KNOT [label="API\n call"];
127 …-Fi 驱动程序可以看作是一个无法感知上层代码(如 TCP/IP 堆栈、应用程序任务、事件任务等)的黑匣子。通常,应用程序任务(代码)负责调用 :doc:`Wi-Fi 驱动程序 APIs <../…
129 …-Fi 事件处理是在 :doc:`esp_event 库 <../api-reference/system/esp_event>` 的基础上进行的。Wi-Fi 驱动程序将事件发送至 :ref:`默…
131 {IDF_TARGET_NAME} Wi-Fi 事件描述
132 -----------------------------------------
136 Wi-Fi 驱动程序永远不会生成此事件,因此,应用程序的事件回调函数可忽略此事件。在未来的版本中,此事件可能会被移除。
142 - 扫描已完成,例如:Wi-Fi 已成功找到目标 AP 或已扫描所有信道。
143 - 当前扫描因函数 :cpp:func:`esp_wifi_scan_stop()` 而终止。
144 - 在当前扫描完成之前调用了函数 :cpp:func:`esp_wifi_scan_start()`。此时,新的扫描将覆盖当前扫描过程,并生成一个扫描完成事件。
148 - 当前扫描被阻止。
149 - 当前扫描是由函数 :cpp:func:`esp_wifi_connect()` 触发的。
151 …_ap_num()` 和 :cpp:func:`esp_wifi_scan_get_ap_records()` 获取已扫描的 AP 列表,然后触发 Wi-Fi 驱动程序释放在扫描过程中占用的内存空…
152 更多详细信息,请参阅 `{IDF_TARGET_NAME} Wi-Fi 扫描`_。
156 如果调用函数 :cpp:func:`esp_wifi_start()` 后接收到返回值 ESP_OK,且当前 Wi-Fi 处于 station 或 station/AP 共存模式,则将产生此事件。接…
160 如果调用函数 :cpp:func:`esp_wifi_stop()` 后接收到返回值 ESP_OK,且当前 Wi-Fi 处于 station 或 station/AP 共存模式,则将产生此事件。接收…
164 …K,且 station 已成功连接目标 AP,则将产生此连接事件。接收到此事件后,事件任务将启动 DHCP 客户端服务并开始获取 IP 地址。此时,Wi-Fi 驱动程序已准备就绪,可发送和接收数据…
170 …- 调用了函数 :cpp:func:`esp_wifi_disconnect()`、:cpp:func:`esp_wifi_stop()` 或 :cpp:func:`esp_wifi_deinit…
171 …- 调用了函数 :cpp:func:`esp_wifi_connect()`,但 Wi-Fi 驱动程序因为某些原因未能成功连接至 AP,例如:未扫描到目标 AP、验证超时等。或存在多个 SSID …
172 - Wi-Fi 连接因为某些原因而中断,例如:station 连续多次丢失 N beacon、AP 脱离 station 连接、AP 验证模式改变等。
176 - 关闭 station 的 LwIP netif。
177 - 通知 LwIP 任务清除导致所有套接字状态错误的 UDP/TCP 连接。针对基于套接字编写的应用程序,其回调函数可以在接收到此事件时(如有必要)关闭并重新创建所有套接字。
179 …-Fi。但是,如果此事件是由函数 :cpp:func:`esp_wifi_disconnect()` 引发的,则应用程序不应调用 :cpp:func:`esp_wifi_connect()` 来重…
183 - 应用程序创建一个了 TCP 连接,以维护每 60 秒发送一次的应用程序级、保持活动状态的数据。
184 - 由于某些原因,Wi-Fi 连接被切断并引发了 `WIFI_EVENT_STA_DISCONNECTED` 事件。根据当前实现,此时所有 TCP 连接都将被移除,且保持活动的套接字将处于错误的状态…
185 - 5 秒后,因为在应用程序的事件回调函数中调用了 :cpp:func:`esp_wifi_connect()`,Wi-Fi 连接恢复。**同时,station 连接至同一个 AP 并获得与之前相同…
186 - 60 秒后,当应用程序发送具有保持活动状态的套接字的数据时,套接字将返回错误,应用程序将关闭套接字并在必要时重新创建。
188 在上述场景中,理想状态下应用程序套接字和网络层将不会受到影响,因为在此过程中 Wi-Fi 连接只是短暂地断开然后快速恢复。应用程序可通过 LwIP menuconfig 启动“IP 改变时保持 TC…
196 - DHCP 客户端无法重新获取/绑定 IPV4 地址,且 station 的 IPV4 重置为 0。
197 - DHCP 客户端重新绑定了其它地址。
198 - 静态配置的 IPV4 地址已发生改变。
212 此事件不会在 Wi-Fi 断连后立刻出现。Wi-Fi 连接断开后,首先将启动一个 IPV4 地址丢失计时器,如果 station 在该计时器超时之前成功获取了 IPV4 地址,则不会发生此事件。否则…
232 …- 应用程序通过调用函数 :cpp:func:`esp_wifi_disconnect()` 或 :cpp:func:`esp_wifi_deauth_sta()` 手动断开 station 连接。
233 …- Wi-Fi 驱动程序出于某些原因断开 station 连接,例如:AP 在过去 5 分钟(可通过函数 :cpp:func:`esp_wifi_set_inactive_time` 修改该时间)…
234 - station 断开与 AP 之间的连接。
244 {IDF_TARGET_NAME} Wi-Fi station 一般情况
245 ------------------------------------------------
249 :caption: station 模式下 Wi-Fi 事件场景示例
252 seqdiag sample-scenarios-station-mode {
265 WIFI_TASK [label = "Wi-Fi\ntask"];
268 MAIN_TASK -> LwIP_TASK [label="1.1> 创建/初始化 LwIP"];
269 MAIN_TASK -> EVENT_TASK [label="1.2> 创建/初始化事件"];
270 MAIN_TASK -> WIFI_TASK [label="1.3> 创建/初始化 Wi-Fi"];
271 MAIN_TASK -> APP_TASK [label="1.4> 创建应用程序任务"];
273 MAIN_TASK -> WIFI_TASK [label="2> 配置 Wi-Fi"];
275 MAIN_TASK -> WIFI_TASK [label="3.1> 启动 Wi-Fi"];
276 EVENT_TASK <- WIFI_TASK [label="3.2> WIFI_EVENT_STA_START"];
277 APP_TASK <- EVENT_TASK [label="3.3> WIFI_EVENT_STA_START"];
279 APP_TASK -> WIFI_TASK [label="4.1> 连接 Wi-Fi"];
280 EVENT_TASK <- WIFI_TASK [label="4.2> WIFI_EVENT_STA_CONNECTED"];
281 APP_TASK <- EVENT_TASK [label="4.3> WIFI_EVENT_STA_CONNECTED"];
283 EVENT_TASK -> LwIP_TASK [label="5.1> 启动 DHCP 客户端"];
284 EVENT_TASK <- LwIP_TASK [label="5.2> IP_EVENT_STA_GOT_IP"];
285 APP_TASK <- EVENT_TASK [label="5.3> IP_EVENT_STA_GOT_IP"];
286 APP_TASK -> APP_TASK [label="5.4> 套接字相关初始化"];
288 EVENT_TASK <- WIFI_TASK [label="6.1> WIFI_EVENT_STA_DISCONNECTED"];
289 APP_TASK <- EVENT_TASK [label="6.2> WIFI_EVENT_STA_DISCONNECTED"];
290 APP_TASK -> APP_TASK [label="6.3> 断开处理"];
292 EVENT_TASK <- LwIP_TASK [label="7.1> IP_EVENT_STA_GOT_IP"];
293 APP_TASK <- EVENT_TASK [label="7.2> IP_EVENT_STA_GOT_IP"];
294 APP_TASK -> APP_TASK [label="7.3> 套接字错误处理"];
296 APP_TASK -> WIFI_TASK [label="8.1> 断开 Wi-Fi 连接"];
297 APP_TASK -> WIFI_TASK [label="8.2> 终止 Wi-Fi"];
298 APP_TASK -> WIFI_TASK [label="8.3> 清理 Wi-Fi"];
302 1.Wi-Fi/LwIP 初始化阶段
304 - s1.1:主任务通过调用函数 :cpp:func:`esp_netif_init()` 创建一个 LwIP 核心任务,并初始化 LwIP 相关工作。
306 …- s1.2:主任务通过调用函数 :cpp:func:`esp_event_loop_create` 创建一个系统事件任务,并初始化应用程序事件的回调函数。在此情况下,该回调函数唯一的动作就是将事…
308 …- s1.3:主任务通过调用函数 :cpp:func:`esp_netif_create_default_wifi_ap()` 或 :cpp:func:`esp_netif_create_defa…
310 - s1.4:主任务通过调用函数 :cpp:func:`esp_wifi_init()` 创建 Wi-Fi 驱动程序任务,并初始化 Wi-Fi 驱动程序。
312 - s1.5:主任务通过调用 OS API 创建应用程序任务。
314 推荐按照 s1.1 ~ s1.5 的步骤顺序针对基于 Wi-Fi/LwIP 的应用程序进行初始化。但这一顺序 **并非** 强制,您可以在第 s1.1 步创建应用程序任务,然后在该应用程序任务中进行…
316 2.Wi-Fi 配置阶段
318 …-Fi 驱动程序初始化成功后,可以进入到配置阶段。该场景下,Wi-Fi 驱动程序处于 station 模式。因此,首先您需调用函数 :cpp:func:`esp_wifi_set_mode` (W…
320 …-Fi 连接之前配置 Wi-Fi 驱动程序,但这 **并非** 强制要求。也就是说,只要 Wi-Fi 驱动程序已成功初始化,您可以在任意阶段进行配置。但是,如果您的 Wi-Fi 在建立连接后不需要…
322 …-Fi NVS flash,则不论当前阶段还是后续的 Wi-Fi 配置信息都将被存储至该 flash 中。那么,当主板上电/重新启动时,就不需从头开始配置 Wi-Fi 驱动程序。您只需调用函数 e…
324 3.Wi-Fi 启动阶段
326 - s3.1:调用函数 :cpp:func:`esp_wifi_start()` 启动 Wi-Fi 驱动程序。
327 - s3.2:Wi-Fi 驱动程序将事件 `WIFI_EVENT_STA_START`_ 发布到事件任务中,然后,事件任务将执行一些正常操作并调用应用程序的事件回调函数。
328 …- s3.3:应用程序的事件回调函数将事件 `WIFI_EVENT_STA_START`_ 中继到应用程序任务中。推荐您此时调用函数 :cpp:func:`esp_wifi_connect()` …
330 4.Wi-Fi 连接阶段
332 - s4.1:调用函数 :cpp:func:`esp_wifi_connect()` 后,Wi-Fi 驱动程序将启动内部扫描/连接过程。
334 - s4.2:如果内部扫描/连接过程成功,将产生 `WIFI_EVENT_STA_CONNECTED`_ 事件。然后,事件任务将启动 DHCP 客户端服务,最终触发 DHCP 程序。
336 …- s4.3:在此情况下,应用程序的事件回调函数会将 `WIFI_EVENT_STA_CONNECTED`_ 事件中继到应用程序任务中。通常,应用程序不需进行操作,而您可以执行任何动作,例如:打印…
338 步骤 s4.2 中 Wi-Fi 连接可能会由于某些原因而失败,例如:密码错误、未找到 AP 等。这种情况下,将引发 `WIFI_EVENT_STA_DISCONNECTED`_ 事件并提示连接错误原…
340 5.Wi-Fi 获取 IP 阶段
343 - s5.1:一旦步骤 4.2 中的 DHCP 客户端初始化完成,Wi-Fi 驱动程序将进入 *获取 IP* 阶段。
344 - s5.2:如果 Wi-Fi 成功从 DHCP 服务器接收到 IP 地址,则将引发 `IP_EVENT_STA_GOT_IP`_ 事件,事件任务将执行正常处理。
345 …- s5.3:应用程序的事件回调函数将事件 `IP_EVENT_STA_GOT_IP`_ 中继到应用程序任务中。对于那些基于 LwIP 构建的应用程序,此事件较为特殊,因为它意味着应用程序已准备就…
347 6.Wi-Fi 断开阶段
349 …- s6.1:当 Wi-Fi 因为某些原因(例如:AP 掉电、RSSI 较弱等)连接中断时,将产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件。此事件也可能在上文阶段 3 …
350 …- s6.2:上述情况下,应用程序的事件回调函数会将 `WIFI_EVENT_STA_DISCONNECTED`_ 事件中继到应用程序任务中。推荐您调用函数 :cpp:func:`esp_wifi…
352 7.Wi-Fi IP 更改阶段
355 - s7.1:如果 IP 地址发生更改,将引发 `IP_EVENT_STA_GOT_IP`_ 事件,其中 "ip_change" 被置为 "true"。
356 - s7.2:**此事件对应用程序至关重要。这一事件发生时,适合关闭所有已创建的套接字并进行重新创建。**
359 8.Wi-Fi 清理阶段
362 - s8.1:调用函数 :cpp:func:`esp_wifi_disconnect()` 断开 Wi-Fi 连接。
363 - s8.2:调用函数 :cpp:func:`esp_wifi_stop()` 终止 Wi-Fi 驱动程序。
364 - s8.3:调用函数 :cpp:func:`esp_wifi_deinit()` 清理 Wi-Fi 驱动程序。
367 {IDF_TARGET_NAME} Wi-Fi AP 一般情况
368 ---------------------------------------------
372 :caption: AP 模式下 Wi-Fi 事件场景示例
375 seqdiag sample-scenarios-soft-ap-mode {
388 WIFI_TASK [label = "Wi-Fi\ntask"];
391 MAIN_TASK -> LwIP_TASK [label="1.1> 创建/初始化 LwIP"];
392 MAIN_TASK -> EVENT_TASK [label="1.2> 创建/初始化事件"];
393 MAIN_TASK -> WIFI_TASK [label="1.3> 创建/初始化 Wi-Fi"];
394 MAIN_TASK -> APP_TASK [label="1.4> 创建应用程序任务"];
396 MAIN_TASK -> WIFI_TASK [label="2> 配置 Wi-Fi"];
398 MAIN_TASK -> WIFI_TASK [label="3.1> 启动 Wi-Fi"];
399 EVENT_TASK <- WIFI_TASK [label="3.2> WIFI_EVENT_AP_START"];
400 APP_TASK <- EVENT_TASK [label="3.3> WIFI_EVENT_AP_START"];
402 EVENT_TASK <- WIFI_TASK [label="4.1> WIFI_EVENT_AP_STACONNECTED"];
403 APP_TASK <- EVENT_TASK [label="4.2> WIFI_EVENT_AP_STACONNECTED"];
405 EVENT_TASK <- WIFI_TASK [label="5.1> WIFI_EVENT_AP_STADISCONNECTED"];
406 APP_TASK <- EVENT_TASK [label="5.2> WIFI_EVENT_AP_STADISCONNECTED"];
407 APP_TASK -> APP_TASK [label="5.3> 断开处理"];
409 APP_TASK -> WIFI_TASK [label="6.1> 断开 Wi-Fi 连接"];
410 APP_TASK -> WIFI_TASK [label="6.2> 终止 Wi-Fi"];
411 APP_TASK -> WIFI_TASK [label="6.3> 清理 Wi-Fi"];
415 {IDF_TARGET_NAME} Wi-Fi 扫描
416 ----------------------------------
423 +--------------+-----------------------------------------------------------------------------------…
427 +--------------+-----------------------------------------------------------------------------------…
429 +--------------+-----------------------------------------------------------------------------------…
430 | 前端扫描 | 不发出 probe request。在 station 模式下 Wi-Fi 未连接时,可进行前端扫描。 |
431 | | Wi-Fi 驱动程序决定进行前端扫描还是后端扫描,应用程序无法配置这两种模式。 |
432 +--------------+-----------------------------------------------------------------------------------…
433 | 后端扫描 | 在 station 模式或 station/AP 共存模式下 Wi-Fi 已连接时,可进行后端扫描。 |
434 | | Wi-Fi 驱动程序决定进行前端扫描还是后端扫描,应用程序无法配置这两种模式。 |
435 +--------------+-----------------------------------------------------------------------------------…
438 +--------------+-----------------------------------------------------------------------------------…
441 +--------------+-----------------------------------------------------------------------------------…
445 - 全信道后端主动扫描
446 - 全信道后端被动扫描
447 - 全信道前端主动扫描
448 - 全信道后端被动扫描
449 - 特定信道后端主动扫描
450 - 特定信道后端被动扫描
451 - 特定信道前端主动扫描
452 - 特定信道前端被动扫描
460 +-------------+------------------------------------------------------------------------------------…
464 +-------------+------------------------------------------------------------------------------------…
466 +-------------+------------------------------------------------------------------------------------…
468 +-------------+------------------------------------------------------------------------------------…
471 +-------------+------------------------------------------------------------------------------------…
474 +-------------+------------------------------------------------------------------------------------…
482 | | - min=0, max=0:每个信道的扫描时间为 120 ms。 …
483 | | - min>0, max=0:每个信道的扫描时间为 120 ms。 …
484 | | - min=0, max>0:每个信道的扫描时间为 ``max`` ms。 …
485 | | - min>0, max>0:每个信道扫描的最短时间为 ``min`` ms。 如果在这段时间内未找到 AP,将跳转至下一个信道。如这段时间内 |
488 | | 如希望提升 Wi-Fi 扫描性能,则可修改上述两个参数。 …
489 +-------------+------------------------------------------------------------------------------------…
499 :caption: 所有 Wi-Fi 信道的前端扫描
502 seqdiag foreground-scan-all-channels {
513 WIFI_TASK [label = "Wi-Fi\ntask"];
515 APP_TASK -> WIFI_TASK [label="1.1 > 配置国家代码"];
516 APP_TASK -> WIFI_TASK [label="1.2 > 扫描配置"];
517 WIFI_TASK -> WIFI_TASK [label="2.1 > 扫描信道 1"];
518 WIFI_TASK -> WIFI_TASK [label="2.2 > 扫描信道 2"];
519 WIFI_TASK -> WIFI_TASK [label="..."];
520 WIFI_TASK -> WIFI_TASK [label="2.x > 扫描信道 N"];
521 EVENT_TASK <- WIFI_TASK [label="3.1 > WIFI_EVENT_SCAN_DONE"];
522 APP_TASK <- EVENT_TASK [label="3.2 > WIFI_EVENT_SCAN_DONE"];
526 上述场景中描述了全信道前端扫描过程。仅 station 模式支持前端扫描,该模式下 station 未连接任何 AP。前端扫描还是后端扫描完全由 Wi-Fi 驱动程序决定,应用程序无法配置这一模式。
533 - s1.1:如果默认的国家信息有误,调用函数 :cpp:func:`esp_wifi_set_country()` 进行配置。请参阅 `Wi-Fi 国家/地区代码`_。
534 …- s1.2:调用函数 :cpp:func:`esp_wifi_scan_start()` 配置扫描信息,可参阅 `扫描配置`_。该场景为全信道扫描,将 SSID/BSSID/channel 设置…
537 Wi-Fi 驱动程序内部扫描阶段
540 …- s2.1:Wi-Fi 驱动程序切换至信道 1,此时的扫描类型为 WIFI_SCAN_TYPE_ACTIVE,同时发送一个 probe request。反之,Wi-Fi 将等待接收 AP bea…
541 - s2.2:Wi-Fi 驱动程序跳转至信道 2,并重复进行 s2.1 中的步骤。
542 - s2.3:Wi-Fi 驱动程序扫描最后的信道 N,N 的具体数值由步骤 s1.1 中配置的国家代码决定。
547 - s3.1:当所有信道扫描全部完成后,将产生 `WIFI_EVENT_SCAN_DONE`_ 事件。
548 …- s3.2:应用程序的事件回调函数告知应用程序任务已接收到 `WIFI_EVENT_SCAN_DONE`_ 事件。调用函数 :cpp:func:`esp_wifi_scan_get_ap_num…
555 :caption: 所有 Wi-Fi 信道的后端扫描
558 seqdiag background-scan-all-channels {
569 WIFI_TASK [label = "Wi-Fi\ntask"];
571 APP_TASK -> WIFI_TASK [label="1.1 > 配置国家代码"];
572 APP_TASK -> WIFI_TASK [label="1.2 > 扫描配置"];
573 WIFI_TASK -> WIFI_TASK [label="2.1 > 扫描信道 1"];
574 WIFI_TASK -> WIFI_TASK [label="2.2 > 返回主信道 H"];
575 WIFI_TASK -> WIFI_TASK [label="2.3 > 扫描信道 2"];
576 WIFI_TASK -> WIFI_TASK [label="2.4 > 返回主信道 H"];
577 WIFI_TASK -> WIFI_TASK [label="..."];
578 WIFI_TASK -> WIFI_TASK [label="2.x-1 > 扫描信道 N"];
579 WIFI_TASK -> WIFI_TASK [label="2.x > 返回主信道 H"];
580 EVENT_TASK <- WIFI_TASK [label="3.1 > WIFI_EVENT_SCAN_DONE"];
581 APP_TASK <- EVENT_TASK [label="3.2 > WIFI_EVENT_SCAN_DONE"];
584 …道后端扫描。与 `在所有信道中扫描全部 AP(前端)`_ 相比,全信道后端扫描的不同之处在于:在跳至下一个信道之前,Wi-Fi 驱动程序会先返回主信道进行 30 ms 扫描,以便 Wi-Fi 连接…
591 :caption: 扫描特定的 Wi-Fi 信道
594 seqdiag scan-specific-channels {
605 WIFI_TASK [label = "Wi-Fi\ntask"];
607 APP_TASK -> WIFI_TASK [label="1.1 > 配置国家代码"];
608 APP_TASK -> WIFI_TASK [label="1.2 > 扫描配置"];
609 WIFI_TASK -> WIFI_TASK [label="2.1 > 扫描信道 C1"];
610 WIFI_TASK -> WIFI_TASK [label="2.2 > 扫描信道 C2"];
611 WIFI_TASK -> WIFI_TASK [label="..."];
612 WIFI_TASK -> WIFI_TASK [label="2.x > 扫描信道 CN,或找到 AP"];
613 EVENT_TASK <- WIFI_TASK [label="3.1 > WIFI_EVENT_SCAN_DONE"];
614 APP_TASK <- EVENT_TASK [label="3.2 > WIFI_EVENT_SCAN_DONE"];
619 - s1.1:在步骤 1.2 中,目标 AP 将配置为 SSID/BSSID。
620 …- s2.1 ~ s2.N:每当 Wi-Fi 驱动程序扫描某个 AP 时,它将检查该 AP 是否为目标 AP。如果本次扫描类型为 WIFI_FAST_SCAN,且确认已找到目标 AP,则将产生扫描…
626 在 Wi-Fi 连接模式下扫描
629 …fi_connect()` 后,Wi-Fi 驱动程序将首先尝试扫描已配置的 AP。Wi-Fi 连接模式下的扫描过程与 `在所有信道中扫描特定 AP`_ 过程相同,但连接模式下扫描结束后将不会产生扫…
638 …:`esp_wifi_scan_start()`。这两种情况都有可能会发生。**但是,Wi-Fi 驱动程序并不足以支持多个并行的扫描。因此,应避免上述并行扫描**。随着 {IDF_TARGET_N…
640 连接 Wi-Fi 时扫描
643 如果 Wi-Fi 正在连接,则调用函数 :cpp:func:`esp_wifi_scan_start()` 后扫描将立即失败,因为 Wi-Fi 连接优先级高于扫描。如果扫描是因为 Wi-Fi 连接而…
647 - 如果 station 正在连接一个不存在的 AP,或正在使用错误的密码连接一个 AP,此时将产生事件 `WIFI_EVENT_STA_DISCONNECTED`_。
648 - 接收到断开连接事件后,应用程序调用函数 :cpp:func:`esp_wifi_connect()` 进行重新连接。
649 - 而另一个应用程序任务(如,控制任务)调用了函数 :cpp:func:`esp_wifi_scan_start()` 进行扫描。这种情况下,每一次扫描都会立即失败,因为 station 一直处于正…
650 - 扫描失败后,应用程序将等待一段时间后进行重新扫描。
652 上述场景中的扫描永远不会成功,因为 Wi-Fi 一直处于正在连接过程中。因此,如果您的应用程序也可能发生相似的场景,那么就需要为其配置一个更佳的重新连接策略。例如:
654 - 应用程序可以定义一个连续重新连接次数的最大值,当重新连接的次数达到这个最大值时,立刻停止重新连接。
655 - 应用程序可以在首轮连续重新连接 N 次后立即进行重新连接,然后延时一段时间后再进行下一次重新连接。
657 可以给应用程序定义其特殊的重新连接策略,以防止扫描无法成功。请参阅 `Wi-Fi 重新连接`_。
659 {IDF_TARGET_NAME} Wi-Fi station 连接场景
660 ------------------------------------------------------------
662 该场景仅针对在扫描阶段只找到一个目标 AP 的情况,对于多个相同 SSID AP 的情况,请参阅 `找到多个 AP 时的 {IDF_TARGET_NAME} Wi-Fi station 连接`_。
669 :caption: Wi-Fi station 连接过程
672 seqdiag station-connecting-process {
682 WIFI_TASK [label = "Wi-Fi\ntask"];
686 WIFI_TASK -> WIFI_TASK [label="1.1 > 扫描"];
687 EVENT_TASK <- WIFI_TASK [label="1.2 > WIFI_EVENT_STA_DISCONNECTED"];
689 WIFI_TASK -> AP [label="2.1 > Auth request"];
690 EVENT_TASK <- WIFI_TASK [label="2.2 > WIFI_EVENT_STA_DISCONNECTED"];
691 WIFI_TASK <- AP [label="2.3 > Auth response"];
692 EVENT_TASK <- WIFI_TASK [label="2.4 > WIFI_EVENT_STA_DISCONNECTED"];
694 WIFI_TASK -> AP [label="3.1 > Assoc request"];
695 EVENT_TASK <- WIFI_TASK [label="3.2 > WIFI_EVENT_STA_DISCONNECTED"];
696 WIFI_TASK <- AP [label="3.3 > Assoc response"];
697 EVENT_TASK <- WIFI_TASK [label="3.4 > WIFI_EVENT_STA_DISCONNECTED"];
699 EVENT_TASK <- WIFI_TASK [label="4.1 > WIFI_EVENT_STA_DISCONNECTED"];
700 WIFI_TASK <- AP [label="4.2 > 1/4 EAPOL"];
701 WIFI_TASK -> AP [label="4.3 > 2/4 EAPOL"];
702 EVENT_TASK <- WIFI_TASK [label="4.4 > WIFI_EVENT_STA_DISCONNECTED"];
703 WIFI_TASK <- AP [label="4.5 > 3/4 EAPOL"];
704 WIFI_TASK -> AP [label="4.6 > 4/4 EAPOL"];
705 EVENT_TASK <- WIFI_TASK [label="4.7 > WIFI_EVENT_STA_CONNECTED"];
712 - s1.1:Wi-Fi 驱动程序开始在“Wi-Fi 连接”模式下扫描。详细信息请参阅 `在 Wi-Fi 连接模式下扫描`_。
713 …- s1.2:如果未找到目标 AP,将产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,且原因代码为 WIFI_REASON_NO_AP_FOUND。请参阅 `Wi-Fi …
718 - s2.1:发送认证请求数据包并使能认证计时器。
719 …- s1.2:如果在认证计时器超时之前未接收到认证响应数据包,将产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,且原因代码为 WIFI_REASON_AUTH_EXPIR…
720 - s2.3:接收到认证响应数据包,且认证计时器终止。
721 …- s2.4:AP 在响应中拒绝认证且产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,原因代码为 WIFI_REASON_AUTH_FAIL 或为 AP 指定的其它原因。…
726 - s3.1:发送关联请求并使能关联计时器。
727 …- s3.2:如果在关联计时器超时之前未接收到关联响应,将产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,且原因代码为 WIFI_REASON_ASSOC_EXPIRE。…
728 - s3.3:接收到关联响应,且关联计时器终止。
729 - s3.4:AP 在响应中拒绝关联且产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,原因代码将在关联响应中指定。请参阅 `Wi-Fi 原因代码`_。
735 …- s4.1:使能握手定时器,定时器终止之前未接收到 1/4 EAPOL,此时将产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,且原因代码为 WIFI_REASON_HA…
736 - s4.2:接收到 1/4 EAPOL。
737 - s4.3:station 回复 2/4 EAPOL。
738 …- s4.4:如果在握手定时器终止之前未接收到 3/4 EAPOL,将产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,且原因代码为 WIFI_REASON_HANDSHA…
739 - s4.5:接收到 3/4 EAPOL。
740 - s4.6:station 回复 4/4 EAPOL。
741 - s4.7:station 产生 `WIFI_EVENT_STA_CONNECTED`_ 事件。
744 Wi-Fi 原因代码
747 …ED* 实际应为 *WIFI_REASON_UNSPECIFIED*,以此类推。第二列为原因代码的相应数值。第三列为该原因映射到 IEEE 802.11-2012 中 8.4.1.7 段的标准值。…
750 +--------------------------+------+----------+-----------------------------------------------------…
754 +--------------------------+------+----------+-----------------------------------------------------…
759 | | | | - authentication 超时; …
760 | | | | - 从 AP 接收到该代码。 …
764 | | | | - 在过去五分钟之内,AP 未从 station 接收到任何数据包; |
765 | | | | - 由于调用了函数 :cpp:func:`esp_wifi_stop()` 导致 AP 终止; …
766 | | | | - 由于调用了函数 :cpp:func:`esp_wifi_deauth_sta()` 导致 stati…
768 +--------------------------+------+----------+-----------------------------------------------------…
773 | | | | - 从 AP 接收到该代码。 …
774 +--------------------------+------+----------+-----------------------------------------------------…
779 | | | | - 从 AP 接收到该代码。 …
783 | | | | - 在过去五分钟之内, AP 未从 station 接收到任何数据包; |
784 | | | | - 由于调用了函数 :cpp:func:`esp_wifi_stop()` 导致 AP 终止; …
785 | | | | - 由于调用了函数 :cpp:func:`esp_wifi_deauth_sta()` 导致 stati…
787 +--------------------------+------+----------+-----------------------------------------------------…
792 | | | | - 从 AP 接收到该代码。 …
796 | | | | - 与 AP 相关联的 station 数量已到达 AP 可支持的最大值。 …
797 +--------------------------+------+----------+-----------------------------------------------------…
798 | NOT_AUTHED | 6 | 6 | 从一个未认证 STA 接收到 class-2 frame。 …
802 | | | | - 从 AP 接收到该代码。 …
806 | | | | - AP 从一个未认证 station 接收到数据包。 …
807 +--------------------------+------+----------+-----------------------------------------------------…
808 | NOT_ASSOCED | 7 | 7 | 从一个未关联 STA 接收到的 class-3 frame。 …
812 | | | | - 从 AP 接收到该代码。 …
816 | | | | - AP 从未关联 station 接收到数据包。 …
817 +--------------------------+------+----------+-----------------------------------------------------…
822 | | | | - 从 AP 接收到该代码; …
823 | | | | - 由于调用 :cpp:func:`esp_wifi_disconnect()` 其它 API, …
825 +--------------------------+------+----------+-----------------------------------------------------…
830 | | | | - 从 AP 接收到该代码。 …
834 | | | | - AP 从一个已关联,但未认证的 station 接收到数据包。 …
835 +--------------------------+------+----------+-----------------------------------------------------…
841 | | | | - 从 AP 接收到该代码。 …
842 +--------------------------+------+----------+-----------------------------------------------------…
848 | | | | - 从 AP 接收到该代码。 …
849 +--------------------------+------+----------+-----------------------------------------------------…
850 | IE_INVALID | 13 | 13 | 无效元素,即内容不符合 Wi-Fi 协议中帧格式 (Frame formats) …
855 | | | | - 从 AP 接收到该代码。 …
859 | | | | - AP 解析了一个错误的 WPA 或 RSN IE。 …
860 +--------------------------+------+----------+-----------------------------------------------------…
865 | | | | - 从 AP 接收到该代码。 …
866 +--------------------------+------+----------+-----------------------------------------------------…
872 | | | | - 握手超时; …
873 | | | | - 从 AP 接收到该代码。 …
874 +--------------------------+------+----------+-----------------------------------------------------…
875 | GROUP_KEY_UPDATE_TIMEOUT | 16 | 16 | 组密钥 (Group-Key) 握手超时。 …
879 | | | | - 从 AP 接收到该代码。 …
880 +--------------------------+------+----------+-----------------------------------------------------…
881 | IE_IN_4WAY_DIFFERS | 17 | 17 | 四次握手中产生的元素与 (re-)association 后的 request/probe 以及 …
886 | | | | - 从 AP 接收到该代码; …
887 | | | | - station 发现四次握手的 IE 与 (re-)association 后的 request/p…
889 +--------------------------+------+----------+-----------------------------------------------------…
894 | | | | - 从 AP 接收到该代码。 …
895 +--------------------------+------+----------+-----------------------------------------------------…
900 | | | | - 从 AP 接收到该代码。 …
901 +--------------------------+------+----------+-----------------------------------------------------…
906 | | | | - 从 AP 接收到该代码。 …
907 +--------------------------+------+----------+-----------------------------------------------------…
912 | | | | - 从 AP 接收到该代码。 …
913 +--------------------------+------+----------+-----------------------------------------------------…
918 | | | | - 从 AP 接收到该代码。 …
919 +--------------------------+------+----------+-----------------------------------------------------…
924 | | | | - 从 AP 接收到该代码。 …
928 | | | | - IEEE 802.1X. authentication 失败。 …
929 +--------------------------+------+----------+-----------------------------------------------------…
934 | | | | - 从 AP 接收到该代码。 …
935 +--------------------------+------+----------+-----------------------------------------------------…
936 | BEACON_TIMEOUT | 200 | reserved | 乐鑫特有的 Wi-Fi 原因代码: 当 station 连续失去 N 个 beacon, …
938 +--------------------------+------+----------+-----------------------------------------------------…
939 | NO_AP_FOUND | 201 | reserved | 乐鑫特有的 Wi-Fi 原因代码: 当 station 未扫描到目标 AP 时, …
941 +--------------------------+------+----------+-----------------------------------------------------…
942 | AUTH_FAIL | 202 | reserved | 乐鑫特有的 Wi-Fi 原因代码: authentication 失败, …
944 +--------------------------+------+----------+-----------------------------------------------------…
945 | ASSOC_FAIL | 203 | reserved | 乐鑫特有的 Wi-Fi 原因代码: association 失败,但并非由 …
947 +--------------------------+------+----------+-----------------------------------------------------…
948 | HANDSHAKE_TIMEOUT | 204 | reserved | 乐鑫特有的 Wi-Fi 原因代码: 握手失败,与 …
950 +--------------------------+------+----------+-----------------------------------------------------…
951 | CONNECTION_FAIL | 205 | reserved | 乐鑫特有的 Wi-Fi 原因代码: AP 连接失败。 …
952 +--------------------------+------+----------+-----------------------------------------------------…
956 找到多个 AP 时的 {IDF_TARGET_NAME} Wi-Fi station 连接
957 ----------------------------------------------------------------------
959 该场景与 `{IDF_TARGET_NAME} Wi-Fi station 连接场景`_ 相似,不同之处在于该场景中不会产生 `WIFI_EVENT_STA_DISCONNECTED`_ 事件,除非…
962 Wi-Fi 重新连接
963 ---------------------------
969 - 如果断开连接事件是由调用函数 :cpp:func:`esp_wifi_disconnect()` 引发的,那么应用程序可能不希望进行重新连接。
970 - 如果 station 随时可能调用函数 :cpp:func:`esp_wifi_scan_start()` 开始扫描,此时就需要一个更佳的重新连接方法,请参阅 `连接 Wi-Fi 时扫描`_。
974 Wi-Fi beacon 超时
975 ---------------------------
982 {IDF_TARGET_NAME} Wi-Fi 配置
983 -------------------------------------
985 使能 Wi-Fi NVS 时,所有配置都将存储到 flash 中;反之,请参阅 `Wi-Fi NVS Flash`_。
987 Wi-Fi 模式
989 调用函数 :cpp:func:`esp_wifi_set_mode()` 设置 Wi-Fi 模式。
991 +-----------------+------------------------------------------------------------------------------+
993 +-----------------+------------------------------------------------------------------------------+
995 | | 接口不会为发送/接收 Wi-Fi 数据进行初始化。通常,此模式用于 |
997 | | Wi-Fi 驱动程序来同时停止 station 和 AP。 |
998 +-----------------+------------------------------------------------------------------------------+
1000 | | station 数据,同时 station 接口准备发送/接收 Wi-Fi 数据。调用函数 |
1002 +-----------------+------------------------------------------------------------------------------+
1004 | | 数据,同时 AP 接口准备发送/接收 Wi-Fi 数据。随后,Wi-Fi |
1006 +-----------------+------------------------------------------------------------------------------+
1010 +-----------------+------------------------------------------------------------------------------+
1018 +-------------+---------------------------------------------------------------------------+
1022 +-------------+---------------------------------------------------------------------------+
1024 +-------------+---------------------------------------------------------------------------+
1027 +-------------+---------------------------------------------------------------------------+
1031 +-------------+---------------------------------------------------------------------------+
1033 +-------------+---------------------------------------------------------------------------+
1037 +-------------+---------------------------------------------------------------------------+
1042 | | AP。第一个 AP 的信号为 -90 dBm,第二个 AP 的信号为 -30 dBm,station |
1048 +-------------+---------------------------------------------------------------------------+
1051 | | 设置为 0,则取 RSSI 的默认阈值 -127 dBm。如果 |
1053 +-------------+---------------------------------------------------------------------------+
1057 …WEP/WPA 安全模式在 IEEE802.11-2016 协议中已弃用,建议不要使用。可使用 authmode 阈值代替,通过将 threshold.authmode 设置为 WIFI_AUTH…
1064 +-----------------+--------------------------------------------------------------------------------…
1066 +-----------------+--------------------------------------------------------------------------------…
1069 +-----------------+--------------------------------------------------------------------------------…
1071 +-----------------+--------------------------------------------------------------------------------…
1074 +-----------------+--------------------------------------------------------------------------------…
1075 | channel | AP 的信道。如果信道超出范围,Wi-Fi 驱动程序将默认该信道为信道 |
1076 | | 1。所以,请确保信道在要求的范围内。有关详细信息,请参阅 `Wi-Fi 国家/地区代码`_。 |
1077 +-----------------+--------------------------------------------------------------------------------…
1078 | authmode | ESP AP 的身份验证模式。目前,ESP Wi-Fi 不支持 |
1081 +-----------------+--------------------------------------------------------------------------------…
1083 +-----------------+--------------------------------------------------------------------------------…
1084 | max_connection | 目前,ESP Wi-Fi 支持 10 个 Wi-Fi 连接。如果 |
1086 +-----------------+--------------------------------------------------------------------------------…
1089 +-----------------+--------------------------------------------------------------------------------…
1091 Wi-Fi 协议模式
1096 +--------------+-----------------------------------------------------------------------------------…
1098 +--------------+-----------------------------------------------------------------------------------…
1101 +--------------+-----------------------------------------------------------------------------------…
1104 +--------------+-----------------------------------------------------------------------------------…
1107 +--------------+-----------------------------------------------------------------------------------…
1111 +--------------+-----------------------------------------------------------------------------------…
1117 +--------------+-----------------------------------------------------------------------------------…
1122 远程 (LR) 模式是乐鑫的一项专利 Wi-Fi 模式,可达到 1 公里视线范围。与传统 802.11b 模式相比,接收灵敏度更高,抗干扰能力更强,传输距离更长。
1127 …-Fi 模式,只有 {IDF_TARGET_NAME} 设备才能传输和接收 LR 数据。也就是说,如果连接的设备不支持 LR,{IDF_TARGET_NAME} 设备则不会以 LR 数据速率传输数…
1129 下表是 Wi-Fi 模式协商:
1131 +-------+-----+----+---+-------+------+-----+----+
1134 | BGN | BGN | BG | B | BGN | BG | B | - |
1135 +-------+-----+----+---+-------+------+-----+----+
1136 | BG | BG | BG | B | BG | BG | B | - |
1137 +-------+-----+----+---+-------+------+-----+----+
1138 | B | B | B | B | B | B | B | - |
1139 +-------+-----+----+---+-------+------+-----+----+
1140 | BGNLR | - | - | - | BGNLR | BGLR | BLR | LR |
1141 +-------+-----+----+---+-------+------+-----+----+
1142 | BGLR | - | - | - | BGLR | BGLR | BLR | LR |
1143 +-------+-----+----+---+-------+------+-----+----+
1144 | BLR | - | - | - | BLR | BLR | BLR | LR |
1145 +-------+-----+----+---+-------+------+-----+----+
1146 | LR | - | - | - | LR | LR | LR | LR |
1147 +-------+-----+----+---+-------+------+-----+----+
1149 上表中,行是 AP 的 Wi-Fi 模式,列是 station 的 Wi-Fi 模式。"-" 表示 AP 和 station 的 Wi-Fi 模式不兼容。
1153 - 对于已使能 LR 的 {IDF_TARGET_NAME} AP,由于不是以 LR 模式发送 beacon,因此与传统的 802.11 模式不兼容。
1154 - 对于已使能 LR 且并非仅 LR 模式的 {IDF_TARGET_NAME} station,与传统 802.11 模式兼容。
1155 - 如果 station 和 AP 都是 {IDF_TARGET_NAME} 设备,并且两者都使能 LR 模式,则协商的模式支持 LR。
1157 如果协商的 Wi-Fi 模式同时支持传统的 802.11 模式和 LR 模式,则 Wi-Fi 驱动程序会在不同的 Wi-Fi 模式下自动选择最佳数据速率,应用程序无需任何操作。
1159 LR 对传统 Wi-Fi 设备的影响
1162 以 LR 速率进行的数据传输不会影响传统 Wi-Fi 设备,因为:
1164 - LR 模式下的 CCA 和回退过程符合 802.11 协议。
1165 - 传统的 Wi-Fi 设备可以通过 CCA 检测 LR 信号并进行回退。
1184 - AP 和 station 都是设备。
1185 - 需要长距离 Wi-Fi 连接和数据传输。
1186 - 数据吞吐量要求非常小,例如远程设备控制等。
1188 Wi-Fi 国家/地区代码
1193 +--------+-----------------------------------------------------------------------------------------…
1195 +--------+-----------------------------------------------------------------------------------------…
1198 | | ISO/IEC3166-1 中规定的国家/地区两位字母代码。第三个八位字节应是下述之一: |
1200 | | -ASCII 码空格字符,代表 station/AP 所处国家/地区的规定允许当前频段所需的所有环境。 |
1202 | | -ASCII 码 'O' 字符,代表 station/AP 所处国家/地区的规定仅允许室外环境。 |
1204 | | -ASCII 码 'I' 字符,代表 station/AP 所处国家/地区的规定仅允许室内环境。 |
1206 | | -ASCII 码 'X' 字符,代表 station/AP 位于非国家/地区实体。非国家实体的前两个八位字节是两个ASCII 码 'XX' 字符。 |
1208 | | -当前使用的操作类表编号的二进制形式。见 IEEE Std 802.11-2012 附件 E。 …
1209 +--------+-----------------------------------------------------------------------------------------…
1211 +--------+-----------------------------------------------------------------------------------------…
1213 +--------+-----------------------------------------------------------------------------------------…
1216 +--------+-----------------------------------------------------------------------------------------…
1218 默认国家/地区信息为 {.cc="CN", .schan=1, .nchan=13, policy=WIFI_COUNTRY_POLICY_AUTO},如果 Wi-Fi 模式为 AP-STA 共存模…
1219 下表描述了在不同 Wi-Fi 模式和不同国家/地区政策下使用的国家/地区信息,并描述了对主动扫描的影响。
1221 +---------------------+----------------------------+-----------------------------------------------…
1222 | Wi-Fi 模式 | 政策 | 描述 …
1223 +---------------------+----------------------------+-----------------------------------------------…
1229 | | | -如果 schan+nchan-1>11, …
1231 | | | schan+nchan-1。 …
1233 | | | -如果 schan+nchan-1<=11, …
1234 | | | 主动扫描起始信道至信道 schan+nchan-1。 …
1241 +---------------------+----------------------------+-----------------------------------------------…
1242 | Station 模式 | WIFI_COUNTRY_POLICY_MANUAL | 总是使用配置的国家/地区信息。 扫描时,主动扫描起始信道至信道 schan+nchan-1。 |
1243 +---------------------+----------------------------+-----------------------------------------------…
1245 +---------------------+----------------------------+-----------------------------------------------…
1247 +---------------------+----------------------------+-----------------------------------------------…
1251 +---------------------+----------------------------+-----------------------------------------------…
1260 Wi-Fi 供应商 IE 配置
1263 默认情况下,所有 Wi-Fi 管理帧都由 Wi-Fi 驱动程序处理,应用程序不需要任何操作。但是,某些应用程序可能需要处理 beacon、probe request、probe response 和…
1265 Wi-Fi 安全性
1266 -------------------------------
1268 …统的安全保障方法 (WEP/WPA-TKIP/WPA2-CCMP),{IDF_TARGET_NAME} Wi-Fi 如今还支持最先进的安全协议,即基于 802.11w 标准的“受保护的管理帧” (…
1273 在 Wi-Fi 中,非 AP station 使用 beacon、探测器、(de)authentication、(dis)association 等管理帧来扫描和连接 AP。与数据帧不同,这些帧发送…
1276 - 在攻击者范围内对一个或所有 client 进行 DOS 攻击。
1277 - 通过发送关联请求取消 AP 端的现有关联。
1278 - 如果 PSK 遭到破坏,强制 client 再次执行 4 次握手,以获得 PTK。
1279 - 从关联请求获取隐藏网络的 SSID。
1280 - 强制 client 从合法 AP 中 (de)authentication,并关联到流氓 AP,发起中间人攻击。
1286 - 不支持 PMF:此模式下,{IDF_TARGET_NAME} 向 AP 表示在关联过程中不能支持管理保护。实际上,此模式下的安全性与传统模式相同。
1287 - 支持但未要求使用 PMF:此模式下,{IDF_TARGET_NAME} 向AP表示能够支持 PMF。如果 AP 授权 PMF 或至少能支持 PMF,将使用管理保护。
1288 - 支持且需要 PMF:此模式下,如果 AP 支持 PMF,{IDF_TARGET_NAME} 将仅连接该 AP。如果不支持,{IDF_TARGET_NAME} 将拒绝连接该 AP。
1293 WPA3-Personal
1296 …-Fi Protected Access-3 (WPA3) 是一套增强 Wi-Fi 接入安全性的措施,旨在取代目前的 WPA2 标准。为了提供更强健的认证方式,WPA3 采用了等值同时认证 (SA…
1298 …-Personal,请在 menuconfig 中选择 "Enable WPA3-Personal"。使能后,如果 AP 支持,{IDF_TARGET_NAME} 会使用 SAE 进行身份认证。由…
1300 {IDF_TARGET_NAME} Wi-Fi 节能模式
1301 -----------------------------------------
1306 …-Fi 支持 Modem-sleep 模式,该模式是 IEEE 802.11 协议中的传统节能模式。仅 Station 模式支持该模式,station 必须先连接到 AP。如果使能了 Modem-…
1308 Modem-sleep 模式包括最小和最大节能模式。在最小节能模式下,每个 DTIM 间隔,station 都将唤醒以接收 beacon。广播数据在 DTIM 之后传输,因此不会丢失。但是,由于 D…
1312 …能 Modem-sleep 最小节能模式。调用 ``esp_wifi_set_ps(WIFI_PS_MAX_MODEM)`` 可使能 Modem-sleep 最大节能模式。station 连接到 …
1314 …-sleep 模式。禁用会增大功耗,但可以最大限度减少实时接收 Wi-Fi 数据的延迟。使能 Modem-sleep 时,接收 Wi-Fi 数据的延迟时间可能与 DTIM 周期(最小节能模式)或监…
1316 默认的 Modem-sleep 模式是 WIFI_PS_MIN_MODEM。
1321 目前,{IDF_TARGET_NAME} AP 不支持 Wi-Fi 协议中定义的所有节能功能。具体来说,AP 只缓存所连 station 单播数据,不缓存组播数据。如果 {IDF_TARGET_NA…
1325 {IDF_TARGET_NAME} Wi-Fi 吞吐量
1326 -----------------------------------
1332 …+----------------------------+----------------+------------+---------------+----------------------+
1334 …+----------------------------+----------------+------------+---------------+----------------------+
1336 …+----------------------------+----------------+------------+---------------+----------------------+
1338 …+----------------------------+----------------+------------+---------------+----------------------+
1340 …+----------------------------+----------------+------------+---------------+----------------------+
1342 …+----------------------------+----------------+------------+---------------+----------------------+
1344 …+----------------------------+----------------+------------+---------------+----------------------+
1346 …+----------------------------+----------------+------------+---------------+----------------------+
1352 …+----------------------------+----------------+------------+---------------+----------------------+
1354 …+----------------------------+----------------+------------+---------------+----------------------+
1356 …+----------------------------+----------------+------------+---------------+----------------------+
1358 …+----------------------------+----------------+------------+---------------+----------------------+
1360 …+----------------------------+----------------+------------+---------------+----------------------+
1362 …+----------------------------+----------------+------------+---------------+----------------------+
1364 …+----------------------------+----------------+------------+---------------+----------------------+
1366 …+----------------------------+----------------+------------+---------------+----------------------+
1372 …+----------------------------+----------------+------------+---------------+----------------------+
1374 …+----------------------------+----------------+------------+---------------+----------------------+
1376 …+----------------------------+----------------+------------+---------------+----------------------+
1378 …+----------------------------+----------------+------------+---------------+----------------------+
1380 …+----------------------------+----------------+------------+---------------+----------------------+
1382 …+----------------------------+----------------+------------+---------------+----------------------+
1384 …+----------------------------+----------------+------------+---------------+----------------------+
1386 …+----------------------------+----------------+------------+---------------+----------------------+
1392 .. list-table::
1393 :header-rows: 1
1396 * - 类型/吞吐量
1397 - 实验室空气状况
1398 - 屏蔽箱
1399 - 测试工具
1400 - IDF 版本 (commit ID)
1401 * - 原始 802.11 数据包接收数据
1402 - N/A
1403 - **130 MBit/s**
1404 - 内部工具
1405 - N/A
1406 * - 原始 802.11 数据包发送数据
1407 - N/A
1408 - **130 MBit/s**
1409 - 内部工具
1410 - N/A
1411 * - UDP 接收数据
1412 - 30 MBit/s
1413 - 88 MBit/s
1414 - iperf example
1415 - 15575346
1416 * - UDP 发送数据
1417 - 30 MBit/s
1418 - 98 MBit/s
1419 - iperf example
1420 - 15575346
1421 * - TCP 接收数据
1422 - 20 MBit/s
1423 - 73 MBit/s
1424 - iperf example
1425 - 15575346
1426 * - TCP 发送数据
1427 - 20 MBit/s
1428 - 83 MBit/s
1429 - iperf example
1430 - 15575346
1434 Wi-Fi 80211 数据包发送
1435 ---------------------------
1441 - 发送 beacon、probe request、probe response 和 action 帧。
1442 - 发送非 QoS 数据帧。
1449 - Wi-Fi 模式为 Station 模式, AP 模式,或 Station/AP 共存模式。
1450 …- API esp_wifi_set_promiscuous(true) 或 :cpp:func:`esp_wifi_start()`,或者二者都返回 ESP_OK。这是为确保调用函数 :cpp:…
1451 - 提供正确的 :cpp:func:`esp_wifi_80211_tx` 参数。
1456 - 如果没有 Wi-Fi 连接,传输速率为 1 Mbps。
1457 - 如果有 WiFi 连接,且数据包是从 station 到 AP 或从 AP 到 station,则传输速率与 Wi-Fi 连接相同。否则,传输速率为 1 Mbps。
1462 理论上,如果不考虑 API 对 Wi-Fi 驱动程序或其他 station 或 AP 的副作用,可以通过空中发送一个原始的 802.11 数据包,包括任何目的地址的 MAC、任何源地址的 MAC、任…
1464 +---------------+----------------------------------------------------------------------------------…
1466 +---------------+----------------------------------------------------------------------------------…
1467 | 无 Wi-Fi 连接 | 在这种情况下,因为没有 Wi-Fi 连接,Wi-Fi 驱动程序不会受到副作用影响。如果 |
1468 | | en_sys_seq==true,则 Wi-Fi 驱动程序负责序列控制。如果 |
1475 | | 并非 AP 接口的 MAC。而且,还有 另一个 AP(我们称之为 "other-AP")的 bssid 是 |
1476 | | mac_x。因此,连接到 "other-AP" 的 station 无法分辨 beacon 来自 "other-AP" 还是 |
1481 | | -如果在 Station 模式下调用函数 :cpp:func:`esp_wifi_80211_tx`,第一个 MAC 应该是组播 |
1485 | | -如果在 AP 模式下调用函数 esp_wifi_80211_tx,第一个 MAC 应该是组播 MAC 或是目标设备的 |
1490 +---------------+----------------------------------------------------------------------------------…
1491 | 有 Wi-Fi 连接 | 当 Wi-Fi 已连接,且序列由应用程序控制,应用程序可能会影响整个 Wi-Fi |
1494 | | “无 Wi-Fi 连接” 情况下的 MAC 地址建议也适用于此情况。如果 Wi-Fi |
1496 | | 2 是 station 接口的 MAC,那么就称数据包是从 station 发送到 AP。另一方面,如果 Wi-Fi |
1499 | | Wi-Fi 连接冲突,可采用以下检查方法: |
1501 | | -如果数据包类型是数据,且是从 station 发送到 AP,IEEE 802.11 |
1503 | | Frame control 字段中的 ToDS 位应该为 1,FromDS 位为 0,否则,Wi-Fi |
1507 | | -如果数据包类型是数据,且是从 AP 发送到 station,IEEE 802.11 |
1509 | | Frame control 字段中的 ToDS 位应该为 0,FromDS 位为 1,否则,Wi-Fi |
1513 | | -如果数据包是从 station 发送到 AP,或从 AP 到 station,Power Management、More |
1515 | | Data 和 Re-Transmission 位应该为 0,否则,Wi-Fi 驱动程序不接受该数据包。 |
1518 +---------------+----------------------------------------------------------------------------------…
1520 Wi-Fi Sniffer 模式
1521 ---------------------------
1523 Wi-Fi Sniffer 模式可以通过 :cpp:func:`esp_wifi_set_promiscuous()` 使能。如果使能 Sniffer 模式, **可以**
1526 - 802.11 管理帧
1527 - 802.11 数据帧,包括 MPDU、AMPDU、AMSDU 等
1528 - 802.11 MIMO 帧,Sniffer 模式仅转储 MIMO 帧的长度。
1529 - 802.11 控制帧
1533 - 802.11 错误帧,如有 CRC 错误的帧等。
1537 …i-Fi 模式下使能 Wi-Fi Sniffer 模式。也就是说,当 station 连接到 AP,或者 AP 有 Wi-Fi 连接时,就可以使能。请注意,Sniffer 模式对 station/…
1539 该模式下还应注意回调函数 wifi_promiscuous_cb_t 的使用。该回调将直接在 Wi-Fi 驱动程序任务中进行,所以如果应用程序需处理大量过滤的数据包,建议在回调中向应用程序任务发布一…
1541 Wi-Fi 多根天线
1542 --------------------------
1543 下图描述 Wi-Fi 多根天线的选择过程::
1548 … |__________| \\ GPIO[0] <----> antenna_select[0] ---| | --- antenna 0
1549 …RX/TX ___ \\____\ GPIO[1] <----> antenna_select[1] ---| Antenna | --- antenna 1
1550 \ __________ // / GPIO[2] <----> antenna_select[2] ---| Switch | ... ...
1551 … \ ___|Enabled | // GPIO[3] <----> antenna_select[3] ---|_________| --- antenna 15
1556 {IDF_TARGET_NAME} 通过外部天线开关,最多支持 16 根天线。天线开关最多可由四个地址管脚控制 - antenna_select[0:3]。向 antenna_select[0:3]…
1558 …些 GPIO。如果 GPIO[x] 连接到 antenna_select[x],gpio_config->gpio_cfg[x].gpio_select 应设置为 1,且要提供 gpio_conf…
1562 …MODE_ANT0,使能的天线 0 用于接收/发送数据。如果天线模式为 WIFI_ANT_MODE_ANT1,使能天线 1 用于接收/发送数据。否则,Wi-Fi 会自动选择使能天线中信号较好的天线。
1564 如果接收数据的天线模式为 WIFI_ANT_MODE_AUTO,还需要设置默认天线模式。只有在满足某些条件时,接收数据天线才会切换,例如,如果 RSSI 低于 -65 dBm,或另一根天线信号更好。…
1568 …- 因为发送数据天线基于 WIFI_ANT_MODE_AUTO 类型的接收数据天线选择算法,只有接收数据的天线模式为 WIFI_ANT_MODE_AUTO 时,发送数据天线才能设置为 WIFI_A…
1569 - 目前,Bluetooth® 不支持多根天线功能,请不要使用与多根天线有关的 API。
1570 - 目前不支持 Bluetooth/Bluetooth LE SoftAP 共存模式。
1574 - Wi-Fi 模式 WIFI_MODE_STA 下,接收/发送数据的天线模式均配置为 WIFI_ANT_MODE_AUTO。Wi-Fi 驱动程序自动选择更好的接收/发送数据天线。
1575 …- 接收数据天线模式配置为 WIFI_ANT_MODE_AUTO。发送数据的天线模式配置为 WIFI_ANT_MODE_ANT0 或 WIFI_ANT_MODE_ANT1。应用程序可以始终选择指定…
1576 - 接收/发送数据的天线模式均配置为 WIFI_ANT_MODE_ANT0 或 WIFI_ANT_MODE_ANT1。
1579 Wi-Fi 多根天线配置
1584 …- 配置 antenna_selects 连接哪些 GPIOs,例如,如果支持四根天线,且 GPIO20/GPIO21 连接到 antenna_select[0]/antenna_select[1…
1590 …- 配置使能哪些天线、以及接收/发送数据如何使用使能的天线,例如,如果使能了天线 1 和天线 3,接收数据需要自动选择较好的天线,并将天线 1 作为默认天线,发送数据始终选择天线 3。配置如下所示…
1600 Wi-Fi 信道状态信息
1601 ------------------------------------
1603 …-Fi 连接的信道信息。{IDF_TARGET_NAME} 中,该信息由子载波的信道频率响应组成,并在从发送端接收数据包时进行估计。每个子载波信道频率响由两个字节的签名字符记录,第一个字节是虚部,…
1605 …------------+-------------+-----------------------------------------+-----------------------------…
1607 …------------+-------------+-------------+---------------------------+---------+-------------------…
1609 …-------------+-------------+---------------------------+---------+---------------+----------------…
1611 …-------------+-------------+-------------+-------------+---------+--------+------+-------------+--…
1613 …------------+-------------+-------------+-------------+-------------+---------+--------+------+---…
1614 …~31,-32~-1 | 0~31,-32~-1 | 0~31,-32~-1 | 0~63 | 0~63 | 0~63 | 0~63 | 0~63 | -6…
1615 …-------------+-------------+-------------+-------------+---------+--------+------+-------------+--…
1616 …-LTF | — | 0~31,-32~-1 | 0~31,-32~-1 | — | 0~63 | 0~62 | 0~63,-64~-1 | 0~60…
1617 …-------------+-------------+-------------+-------------+---------+--------+------+-------------+--…
1618 …-HT-LTF | — | — | 0~31,-32~-1 | — | — | 0~62 | — | 0~60,-…
1619 …------------+-------------+-------------+-------------+-------------+---------+--------+------+---…
1621 …--------------------------+-------------+-------------+-------------+---------+--------+------+---…
1625 - 辅助信道指 rx_ctrl 字段的 secondary_channel 字段。
1626 - 数据包的信号模式指 rx_ctrl 字段的 sig_mode 字段。
1627 - 信道带宽指 rx_ctrl 字段中的 cwb 字段。
1628 - STBC 指 rx_ctrl 字段的 stbc 字段。
1629 - 总字节数指 len 字段。
1630 …- 每个长训练字段 (LTF) 类型对应的CSI数据存储在从 buf 字段开始的缓冲区中。每个项目以两个字节的形式存储:虚部和实部。每个项目的顺序与表中的子载波相同。LTF 的顺序是 LLTF、H…
1631 - 如果 wifi_csi_info_t 的 first_word_invalid 字段为 true,表示由于 {IDF_TARGET_NAME} 的硬件限制,CSI 数据的前四个字节无效。
1632 - 更多信息,如RSSI,射频的噪声底,接收时间和天线 rx_ctrl 领域。
1636 …- 对于 STBC 数据包,每个空时流都提供了 CSI,不会出现 CSD(循环移位延迟)。由于附加链上的每一次循环移位为 -200 ns,因为子载波 0 中没有信道频率响应,在 HT-LTF 和 …
1638 …- 如果调用 API :cpp:func:`esp_wifi_set_csi_config` 没有使能 LLTF、HT-LTF 或 STBC-HT-LTF,则 CSI 数据的总字节数会比表中的少。…
1640 Wi-Fi 信道状态信息配置
1641 -------------------------------------------
1643 要使用 Wi-Fi CSI,需要执行以下步骤。
1645 - 在菜单配置中选择 Wi-Fi CSI。方法是“菜单配置 - > 组件配置 -- > Wi-Fi -- > WiFi CSI(信道状态信息)”。
1646 - 调用 API :cpp:func:`esp_wifi_set_csi_rx_cb` 设置 CSI 接收回调函数。
1647 - 调用 API :cpp:func:`esp_wifi_set_csi_config` 配置 CSI。
1648 - 调用 API :cpp:func:`esp_wifi_set_csi` 使能 CSI。
1650 CSI 接收回调函数从 Wi-Fi 任务中运行。因此,不要在回调函数中进行冗长的操作。但是需要将必要的数据发布到队列中,并从一个较低优先级的任务中处理。由于 station 在断开连接时不会收到任何…
1652 Wi-Fi HT20/40
1653 -------------------------
1655 {IDF_TARGET_NAME} 支持 Wi-Fi 带宽 HT20 或 HT40,不支持 HT20/40 共存,调用函数 :cpp:func:`esp_wifi_set_bandwidth` 可改…
1657 Station 模式下,实际带宽首先在 Wi-Fi 连接时协商。只有当 station 和所连 AP 都支持 HT40 时,带宽才为 HT40,否则为 HT20。如果所连的 AP 的带宽发生变化,则…
1663 …数据速率为 150Mbps,而 HT20 为 72Mbps。但是,如果设备在某些特殊环境中使用,例如,{IDF_TARGET_NAME} 周围其他 Wi-Fi 设备过多,HT40 的性能可能会降低…
1665 Wi-Fi QoS
1666 -------------------------
1668 {IDF_TARGET_NAME} 支持 WFA Wi-Fi QoS 认证所要求的所有必备功能。
1670 Wi-Fi 协议中定义了四个 AC (访问类别),每个 AC 有各自的优先级访问 Wi-Fi 信道。此外,还定义了映射规则以映射其他协议的 QoS 优先级,例如 802.11D 或 TCP/IP 到…
1672 下表描述 {IDF_TARGET_NAME} 中 IP 优先级如何映射到 Wi-Fi AC,还指明此 AC 是否支持 AMPDU。该表按优先级降序排列,即 AC_VO 拥有最高优先级。
1674 +-----------+---------------------+----------------+
1675 | IP 优先级 | Wi-Fi AC | 是否支持 AMPDU |
1678 +-----------+---------------------+----------------+
1680 +-----------+---------------------+----------------+
1682 +-----------+---------------------+----------------+
1684 +-----------+---------------------+----------------+
1693 理论上,高优先级的 AC 比低优先级 AC 具有更好的性能,但并非总是如此,下面是一些关于如何使用 Wi-Fi QoS 的建议:
1695 …- 可以把一些真正重要的应用程序流量放到 AC_VO 队列中。避免通过 AC_VO 队列发送大流量。一方面,AC_VO 队列不支持 AMPDU,如果流量很大,性能不会优于其他队列。另一方面,可能会…
1696 …- 避免使用 AMPDU 支持的、两个以上的不同优先级,比如 socket A 使用优先级 0,socket B 使用优先级 1,socket C 使用优先级 2。因为可能需要更多的内存,不是好的…
1699 Wi-Fi AMSDU
1700 -------------------------
1704 Wi-Fi 分片
1705 -------------------------
1709 支持 Wi-Fi 接收分片,但不支持 Wi-Fi 发送分片。
1713 {IDF_TARGET_NAME} 支持 Wi-Fi 接收和发送分片。
1716 -------------------------
1718 在 Wi-Fi 模式 WIFI_MODE_STA 或 WIFI_MODE_APSTA 下,{IDF_TARGET_NAME} 支持 WPS注册功能。目前,{IDF_TARGET_NAME} 支持的 …
1720 .. _wifi-buffer-usage:
1722 Wi-Fi 缓冲区使用情况
1723 --------------------------
1732 - {IDF_TARGET_NAME} 的可用内存有限。
1733 …- 目前,LwIP 和 Wi-Fi 驱动程序中默认的缓冲区类型是“动态”,**意味着 LwIP 和 Wi-Fi 都与应用程序共享内存**。程序员应该时刻牢记这一点,否则将面临如“堆内存耗尽”等的内…
1734 - “堆耗尽”情况非常危险,会导致 {IDF_TARGET_NAME} 出现“未定义行为”。因此,应该为应用程序预留足够的堆内存,防止耗尽。
1735 - Wi-Fi 的吞吐量很大程度上取决于与内存相关的配置,如 TCP 窗口大小、Wi-Fi 接收/发送数据动态缓冲区数量等。
1736 - {IDF_TARGET_NAME} LwIP/Wi-Fi 可能使用的堆内存峰值取决于许多因素,例如应用程序可能拥有的最大 TCP/UDP 连接等。
1737 - 在考虑内存配置时,应用程序所需的总内存也是一个重要因素。
1744 Wi-Fi 驱动程序中默认的缓存类型是“动态”。大多数情况下,动态缓冲区可以极大地节省内存。但是因为应用程序需要考虑 Wi-Fi 的内存使用情况,会给应用程序编程造成一定的难度。
1746 …使用和性能部分 <https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/lwip.html#minim…
1748 Wi-Fi 动态缓冲区峰值
1751 Wi-Fi 驱动程序支持多种类型的缓冲区(参考 `Wi-Fi 缓冲区配置`_ )。但本节只介绍 Wi-Fi 动态缓冲的使用方法
1752 Wi-Fi 使用的堆内存峰值是 Wi-Fi 驱动程序 **理论上消耗的最大内存**。通常,该内存峰值取决于:
1754 - 配置的动态接收数据缓冲区数:wifi_rx_dynamic_buf_num
1755 - 配置的动态发送数据缓冲区数:wifi_tx_dynamic_buf_num
1756 - Wi-Fi 驱动程序可以接收的最大数据包:wifi_rx_pkt_size_max
1757 - Wi-Fi 驱动程序可以发送的最大数据包:wifi_tx_pkt_size_max
1759 因此,Wi-Fi 驱动程序消耗的内存峰值可以用下面的公式计算:
1765 .. _How-to-improve-Wi-Fi-performance:
1767 如何提高 Wi-Fi 性能
1768 ----------------------------------
1770 {IDF_TARGET_NAME} Wi-Fi 的性能收到许多参数的影响,各参数之间存在相互制约。如果配置地合理,不仅可以提高性能,还可以增加应用程序的可用内存,提高稳定性。
1772 在本节中,我们将简单介绍 Wi-Fi/LWIP 协议栈的工作模式,并说明各个参数的作用。我们将推荐几种配置等级,您可以根据使用场景选择合适的等级。
1777 .. figure:: ../../_static/api-guides-WiFi-driver-how-to-improve-WiFi-performance.png
1782 {IDF_TARGET_NAME} 协议栈分为四层,分别为应用层、LWIP 层、Wi-Fi 层和硬件层。
1784 …- 在接收过程中,硬件将接收到的数据包放入 DMA 缓冲区,然后依次传送到 Wi-Fi 的接收数据缓冲区、LWIP 的接收数据缓冲区进行相关协议处理,最后传送到应用层。Wi-Fi 的接收数据缓冲区…
1786 - 在发送过程中,应用程序首先将要发送的消息复制到 LWIP 层的发送数据缓冲区,进行 TCP/IP 封装。然后将消息发送到 Wi-Fi 层的发送数据缓冲区进行 MAC 封装,最后等待发送。
1791 适当增加上述缓冲区的大小或数量,可以提高 Wi-Fi 性能,但同时,会减少应用程序的可用内存。下面我们将介绍您需要配置的参数:
1795 - :ref:`CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM`
1796 该参数表示硬件层的 DMA 缓冲区数量。提高该参数将增加发送方的一次性接收吞吐量,从而提高 Wi-Fi 协议栈处理突发流量的能力。
1798 - :ref:`CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM`
1799 该参数表示 Wi-Fi 层中接收数据缓冲区的数量。提高该参数可以增强数据包的接收性能。该参数需要与 LWIP 层的接收数据缓冲区大小相匹配。
1801 - :ref:`CONFIG_ESP32_WIFI_RX_BA_WIN`
1804 - :ref:`CONFIG_LWIP_TCP_WND_DEFAULT`
1809 - :ref:`CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM`
1812 - :ref:`CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM`
1813 该参数表示 Wi-Fi 层发送数据缓冲区数量。提高该参数可以增强数据包发送的性能。该参数值需要与 LWIP 层的发送数据缓冲区大小相匹配。
1815 - :ref:`CONFIG_LWIP_TCP_SND_BUF_DEFAULT`
1822 - :ref:`CONFIG_ESP32_WIFI_IRAM_OPT`
1823 如果使能该选项,一些 Wi-Fi 功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 15 kB。
1825 - :ref:`CONFIG_ESP32_WIFI_RX_IRAM_OPT`
1826 如果使能该选项,一些 Wi-Fi 接收数据功能将被移至 IRAM,从而提高吞吐量,IRAM 使用量将增加 16 kB。
1828 - :ref:`CONFIG_LWIP_IRAM_OPTIMIZATION`
1835 - :ref:`CONFIG_ESP32S2_INSTRUCTION_CACHE_SIZE`
1838 - :ref:`CONFIG_ESP32S2_INSTRUCTION_CACHE_LINE_SIZE`
1845 - :ref:`CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE`
1848 - :ref:`CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE`
1851 - :ref:`CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS`
1854 - :ref:`CONFIG_ESP32S3_DATA_CACHE_SIZE`
1857 - :ref:`CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE`
1860 - :ref:`CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS`
1877 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1881 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1883 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1885 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1887 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1889 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1891 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1893 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1895 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1897 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1899 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1901 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1903 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1905 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1907 …+----------------------------+-------+--------------+--------+--------------+--------+----------+-…
1912 +----------------------------+-------+--------+------+----------+-------+
1916 +----------------------------+-------+--------+------+----------+-------+
1918 +----------------------------+-------+--------+------+----------+-------+
1920 +----------------------------+-------+--------+------+----------+-------+
1922 +----------------------------+-------+--------+------+----------+-------+
1924 +----------------------------+-------+--------+------+----------+-------+
1926 +----------------------------+-------+--------+------+----------+-------+
1928 +----------------------------+-------+--------+------+----------+-------+
1930 +----------------------------+-------+--------+------+----------+-------+
1932 +----------------------------+-------+--------+------+----------+-------+
1934 +----------------------------+-------+--------+------+----------+-------+
1936 +----------------------------+-------+--------+------+----------+-------+
1938 +----------------------------+-------+--------+------+----------+-------+
1940 +----------------------------+-------+--------+------+----------+-------+
1942 +----------------------------+-------+--------+------+----------+-------+
1944 +----------------------------+-------+--------+------+----------+-------+
1946 +----------------------------+-------+--------+------+----------+-------+
1950 +----------------------------+-------+---------+---------+
1954 +----------------------------+-------+---------+---------+
1956 +----------------------------+-------+---------+---------+
1958 +----------------------------+-------+---------+---------+
1960 +----------------------------+-------+---------+---------+
1962 +----------------------------+-------+---------+---------+
1964 +----------------------------+-------+---------+---------+
1966 +----------------------------+-------+---------+---------+
1968 +----------------------------+-------+---------+---------+
1970 +----------------------------+-------+---------+---------+
1972 +----------------------------+-------+---------+---------+
1974 +----------------------------+-------+---------+---------+
1976 +----------------------------+-------+---------+---------+
1980 +----------------------------+-------+---------+---------+
1984 +----------------------------+-------+---------+---------+
1986 +----------------------------+-------+---------+---------+
1988 +----------------------------+-------+---------+---------+
1990 +----------------------------+-------+---------+---------+
1992 +----------------------------+-------+---------+---------+
1994 +----------------------------+-------+---------+---------+
1996 +----------------------------+-------+---------+---------+
1998 +----------------------------+-------+---------+---------+
2000 +----------------------------+-------+---------+---------+
2002 +----------------------------+-------+---------+---------+
2004 +----------------------------+-------+---------+---------+
2006 +----------------------------+-------+---------+---------+
2008 +----------------------------+-------+---------+---------+
2010 +----------------------------+-------+---------+---------+
2012 +----------------------------+-------+---------+---------+
2014 +----------------------------+-------+---------+---------+
2016 +----------------------------+-------+---------+---------+
2021 …以上结果使用华硕RT-N66U路由器,在屏蔽箱中进行单流测试得出。{IDF_TARGET_NAME} 的 CPU 为双核,频率为 240 MHz,flash 为 QIO 模式,频率为 80 MHz。
2026 …以上结果使用华硕RT-N66U路由器,在屏蔽箱中进行单流测试得出。{IDF_TARGET_NAME} 的 CPU 为单核,频率为 240 MHz,flash 为 QIO 模式,频率为 80 MHz。
2031 …以上结果使用华硕RT-N66U路由器,在屏蔽箱中进行单流测试得出。{IDF_TARGET_NAME} 的 CPU 为单核,频率为 160 MHz,flash 为 QIO 模式,频率为 80 MHz。
2037 - **Iperf 等级**
2040 - **高性能等级**
2043 - **默认等级**
2046 - **节省内存等级**
2049 - **最小等级**
2056 - **Iperf 等级**
2059 - **高性能等级**
2062 - **默认等级**
2065 - **节省内存等级**
2068 - **最小等级**
2075 - **Iperf 等级**
2078 - **默认等级**
2081 - **最小等级**
2094 +----------------------------+-------+-------+----------+-------+
2098 +----------------------------+-------+-------+----------+-------+
2100 +----------------------------+-------+-------+----------+-------+
2102 +----------------------------+-------+-------+----------+-------+
2104 +----------------------------+-------+-------+----------+-------+
2106 +----------------------------+-------+-------+----------+-------+
2108 +----------------------------+-------+-------+----------+-------+
2110 +----------------------------+-------+-------+----------+-------+
2112 +----------------------------+-------+-------+----------+-------+
2114 +----------------------------+-------+-------+----------+-------+
2116 +----------------------------+-------+-------+----------+-------+
2118 +----------------------------+-------+-------+----------+-------+
2120 +----------------------------+-------+-------+----------+-------+
2122 +----------------------------+-------+-------+----------+-------+
2124 +----------------------------+-------+-------+----------+-------+
2128 +----------------------------+-------+------+----------+-------+
2132 +----------------------------+-------+------+----------+-------+
2134 +----------------------------+-------+------+----------+-------+
2136 +----------------------------+-------+------+----------+-------+
2138 +----------------------------+-------+------+----------+-------+
2140 +----------------------------+-------+------+----------+-------+
2142 +----------------------------+-------+------+----------+-------+
2144 +----------------------------+-------+------+----------+-------+
2146 +----------------------------+-------+------+----------+-------+
2148 +----------------------------+-------+------+----------+-------+
2150 +----------------------------+-------+------+----------+-------+
2152 +----------------------------+-------+------+----------+-------+
2154 +----------------------------+-------+------+----------+-------+
2156 +----------------------------+-------+------+----------+-------+
2158 +----------------------------+-------+------+----------+-------+
2160 +----------------------------+-------+------+----------+-------+
2162 +----------------------------+-------+------+----------+-------+
2164 +----------------------------+-------+------+----------+-------+
2166 +----------------------------+-------+------+----------+-------+
2172 +----------------------------+-------+------+----------+-------+
2176 +----------------------------+-------+------+----------+-------+
2178 +----------------------------+-------+------+----------+-------+
2180 +----------------------------+-------+------+----------+-------+
2182 +----------------------------+-------+------+----------+-------+
2184 +----------------------------+-------+------+----------+-------+
2186 +----------------------------+-------+------+----------+-------+
2188 +----------------------------+-------+------+----------+-------+
2190 +----------------------------+-------+------+----------+-------+
2192 +----------------------------+-------+------+----------+-------+
2194 +----------------------------+-------+------+----------+-------+
2196 +----------------------------+-------+------+----------+-------+
2198 +----------------------------+-------+------+----------+-------+
2200 +----------------------------+-------+------+----------+-------+
2202 +----------------------------+-------+------+----------+-------+
2204 +----------------------------+-------+------+----------+-------+
2206 +----------------------------+-------+------+----------+-------+
2208 +----------------------------+-------+------+----------+-------+
2210 +----------------------------+-------+------+----------+-------+
2212 +----------------------------+-------+------+----------+-------+
2214 +----------------------------+-------+------+----------+-------+
2216 +----------------------------+-------+------+----------+-------+
2220 +----------------------------+-------+------+----------+-------+
2224 +----------------------------+-------+------+----------+-------+
2226 +----------------------------+-------+------+----------+-------+
2228 +----------------------------+-------+------+----------+-------+
2230 +----------------------------+-------+------+----------+-------+
2232 +----------------------------+-------+------+----------+-------+
2234 +----------------------------+-------+------+----------+-------+
2236 +----------------------------+-------+------+----------+-------+
2238 +----------------------------+-------+------+----------+-------+
2240 +----------------------------+-------+------+----------+-------+
2242 +----------------------------+-------+------+----------+-------+
2244 +----------------------------+-------+------+----------+-------+
2246 +----------------------------+-------+------+----------+-------+
2248 +----------------------------+-------+------+----------+-------+
2250 +----------------------------+-------+------+----------+-------+
2252 +----------------------------+-------+------+----------+-------+
2254 +----------------------------+-------+------+----------+-------+
2256 +----------------------------+-------+------+----------+-------+
2258 +----------------------------+-------+------+----------+-------+
2260 +----------------------------+-------+------+----------+-------+
2262 +----------------------------+-------+------+----------+-------+
2264 +----------------------------+-------+------+----------+-------+
2266 Wi-Fi Menuconfig
2267 -----------------------
2269 Wi-Fi 缓冲区配置
2290 WIFI_TASK [label="Wi-Fi\n task", fontsize=12];
2298 APPL_TASK -> LwIP_TASK -> WIFI_TASK
2299 APPL_DESC -> LwIP_DESC -> WIFI_DESC [style=none]
2305 - 应用程序分配需要发送的数据。
2306 - 应用程序调用 TCPIP 或套接字相关的 API 发送用户数据。这些 API 会分配一个在 LwIP 中使用的 PBUF,并复制用户数据。
2307 - 当 LwIP 调用 Wi-Fi API 发送 PBUF 时,Wi-Fi API 会分配一个“动态发送数据缓冲区”或“静态发送数据缓冲区”,并复制 LwIP PBUF,最后发送数据。
2327 WIFI_TASK [label="Wi-Fi\n task", fontsize=12];
2328 WIFI_INTR [label="Wi-Fi\n interrupt", fontsize=12];
2337 APPL_TASK <- LwIP_TASK <- WIFI_TASK <- WIFI_INTR
2338 APPL_DESC <- LwIP_DESC <- WIFI_DESC <- INTR_DESC [style=none]
2343 - Wi-Fi 硬件在空中接收到数据包后,将数据包内容放到“静态接收数据缓冲区”,也就是“接收数据 DMA 缓冲区”。
2344 - Wi-Fi 驱动程序分配一个“动态接收数据缓冲区”、复制“静态接收数据缓冲区”,并将“静态接收数据缓冲区”返回给硬件。
2345 - Wi-Fi 驱动程序将数据包传送到上层 (LwIP),并分配一个 PBUF 用于存放“动态接收数据缓冲区”。
2346 - 应用程序从 LwIP 接收数据。
2348 下表是 Wi-Fi 内部缓冲区的配置情况。
2350 +------------------------+----------+-----------------+------------+-------------------------------…
2356 | | | | | 该帧写入缓冲区,并向 CPU 发起一个中断。然后,Wi-Fi…
2358 | | | | | 希望减少 Wi-Fi 静态分配的内存,可以将该值从 10 减…
2361 +------------------------+----------+-----------------+------------+-------------------------------…
2362 | 动态接收数据缓冲区 | 动态 | 32 | 是 | 缓冲区的长度可变,取决于所接收帧的长度。当 Wi-Fi 驱动程序 |
2366 +------------------------+----------+-----------------+------------+-------------------------------…
2367 | 动态发送数据缓冲区 | 动态 | 32 | 是 | 这是一种DMA内存,位于堆内存中。当上层 (LwIP) 向 Wi-Fi …
2371 +------------------------+----------+-----------------+------------+-------------------------------…
2374 | | | | | 当上层 (LwIP) 向 Wi-Fi 驱动程序发送数据包时,…
2379 +------------------------+----------+-----------------+------------+-------------------------------…
2380 | 管理短缓冲区 | 动态 | 8 | 否 | Wi-Fi 驱动程序的内部缓冲区。 …
2381 +------------------------+----------+-----------------+------------+-------------------------------…
2382 | 管理长缓冲区 | 动态 | 32 | 否 | Wi-Fi 驱动程序的内部缓冲区。 …
2383 +------------------------+----------+-----------------+------------+-------------------------------…
2384 | 管理超长缓冲区 | 动态 | 32 | 否 | Wi-Fi 驱动程序的内部缓冲区。 …
2385 +------------------------+----------+-----------------+------------+-------------------------------…
2389 Wi-Fi NVS Flash
2391 如果使能 Wi-Fi NVS flash,所有通过 Wi-Fi API 设置的 Wi-Fi 配置都会被存储到 flash 中,Wi-Fi 驱动程序在下次开机或重启时将自动加载这些配置。但是,应用程序…
2393 Wi-Fi AMPDU
2396 {IDF_TARGET_NAME} 同时支持接收和发送 AMPDU,AMPDU 可以大大提高 Wi-Fi 的吞吐量。
2401 ---------------
2403 请见 :doc:`wireshark-user-guide`。
2408 wireshark-user-guide