RF 共存

[English]

概览

ESP系列芯片最多支持三种射频收发模块: Bluetooth(BT 和 BLE), IEEE802.15.4 和 Wi-Fi, 而每款芯片只支持一路被多个射频收发模块共享的 RF,不同模块无法同时使用 RF 收发数据,因此采用时分复用的方法调节不同模块的数据包收发。

ESP32-H2 支持的共存场景

表 3 Thread (IEEE802.15.4) 和 BLE 共存支持功能

BLE

Scan

Advertising

Connecting

Connected

Thread

Scan

X

Y

Y

Y

Connecting

X

Y

Y

Y

Connected

X

Y

Y

Y

Connected (high throughput)

X

C1

C1

C1

备注

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

共存机制与策略

共存机制

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

共存机制

共存策略

共存周期和时间片

目前, 当 BLE 与 IEEE802.15.4 共存时, ESP 芯片使用的策略为 BLE 优先级始终优先于 IEEE802.15.4。

  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 共存状态下时间片划分图

动态优先级

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

如何使用共存功能

共存 API 的使用

在大多数共存情况下,ESP32-H2 会自动进行共存状态切换,无需调用 API 对其进行干预。但是对于 BLE MESH 和 Wi-Fi 的共存,ESP32-H2 对其提供了两个 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 参数错误。

设置共存编译时选项

  • 在完成共存程序编写的时候,您必须通过 menuconfig 选择 CONFIG_ESP_COEX_SW_COEXIST_ENABLE 打开软件共存配置选项,否则就无法使用上文中提到的共存功能。

  • 您可以通过修改以下 menuconfig 选项,以减小内存开销:

备注

由于共存配置选项依赖于任何两个已启用的射频收发模块的存在,请在配置任何共存功能之前,确保至少使能了两个射频收发模块。