警告

This document is not updated for ESP32C6 yet, so some of the content may not be correct.

This warning was automatically inserted due to the source file being in the add_warnings_pages list.

RF 共存

[English]

概览

ESP32-C6 只支持一路 RF,Bluetooth (BT 和 BLE)和 Wi-Fi 共享这一路 RF,无法同时收发数据,因此采用时分复用的方法进行收发数据包。

ESP32-C6 支持的共存场景

备注

Y:支持且性能稳定。 C1:不能保证性能处于稳定状态。 X:不支持。 S:在STA模式下支持且性能稳定,否则不支持。

共存机制与策略

共存机制

基于优先级抢占的 RF 资源分配机制,如下图所示,Bluetooth 模块和 Wi-Fi 模块向共存模块申请 RF 资源,共存模块根据二者的优先级高低裁决 RF 归谁使用。

共存机制

共存策略

共存周期和时间片

  1. CONNECTED 状态:共存周期以目标信标传输时间 (Target Beacon Transmission Time, TBTT) 点为起始点,周期大于 100 ms。

  2. SCAN 状态:Wi-Fi 时间片以及共存周期都比在 CONNECTED 状态下的长。为了确保蓝牙的性能,蓝牙的时间片也会做相应的调整。

  3. CONNECTING 状态:Wi-Fi 时间片比在 CONNECTED 状态下的长。为了确保蓝牙的性能,蓝牙的时间片也会做相应的调整。

共存逻辑会根据当前 Wi-Fi 和 Bluetooth 的使用场景来选取不同的共存周期和共存时间片的划分策略。对应一个使用场景的共存策略,我们称之为“共存模板”。比如,Wi-Fi CONNECTED 与 BLE CONNECTED 的场景,就对应有一个共存模板。在这个共存模板中,一个共存周期内 Wi-Fi 和 BLE 的时间片各占 50%,时间分配如下图所示:

Wi-Fi CONNECTED 和 BLE CONNECTED 状态下时间片划分图

Wi-Fi CONNECTED 和 BLE CONNECTED 共存状态下时间片划分图

动态优先级

共存模块对 Wi-Fi 和 Bluetooth 不同的状态赋予其不同的优先级。每种状态下的优先级并不是一成不变的,例如每 N 个广播事件 (Advertising event) 中会有一个广播事件使用高优先级。如果高优先级的广播事件发生在 Wi-Fi 时间片内,RF 的使用权可能会被 BLE 抢占。

Wi-Fi 非连接模块的共存

在一定程度上,某些 Wi-Fi 非连接模块功耗参数 Window 与 Interval 的组合会导致共存模块在 Wi-Fi 时间片外申请共存优先级。这是为了按设定的功耗参数在共存时获取 RF 资源,但这会影响既定的蓝牙性能。

如果 Wi-Fi 非连接模块功耗参数为默认值时,上述动作不会发生,共存模块会按照性能稳定的模式运行。因此,除非您对特定非连接功耗参数下的共存性能有足够的测试,请在共存场景下将 Wi-Fi 非连接模块功耗参数配置为默认参数。

请参考 非连接模块功耗管理 获取更多信息。

如何使用共存功能

共存 API 的使用

在大多数共存情况下,ESP32-C6 会自动进行共存状态切换,无需调用 API 对其进行干预。但是对于 BLE MESH 和 Wi-Fi 的共存,ESP32-C6 对其提供了两个 API。当 BLE MESH 的状态发生变化时,应先调用 esp_coex_status_bit_clear 对上一个状态进行清除,然后调用 esp_coex_status_bit_set 设置当前状态。

BLE MESH 共存状态描述

由于 Wi-Fi 和 Bluetooth 固件无法获知当前的上层应用的场景,一些共存模板需要应用代码调用共存的 API 才能生效。BLE MESH 的工作状态就需要由应用层通知给共存模块,用于选择共存模板。

  • ESP_COEX_BLE_ST_MESH_CONFIG:正在组网。

  • ESP_COEX_BLE_ST_MESH_TRAFFIC:正在传输数据。

  • ESP_COEX_BLE_ST_MESH_STANDBY:处于空闲状态,无大量数据交互。

共存 API 错误代码

所有共存 API 都有自定义的返回值,即错误代码。这些代码可分类为:

  • 无错误,例如:返回值为 ESP_OK 代表 API 成功返回。

  • 可恢复错误,例如: 返回值为 ESP_ERR_INVALID_ARG 代表 API 参数错误。

设置共存编译时选项

备注

由于共存配置选项依赖于蓝牙配置选项,所以请先打开蓝牙配置选项,然后在 Wi-Fi 配置选项中打开共存配置选项。