PHY
Multiple Antennas
Principles and Components of Multiple Antennas
Multi-antenna functionality primarily involves routing signals from internal antenna modules to specific IO pins, controlling external antenna switches through IO pins to select designated antennas, supporting up to 16 antennas.
The components of multiple antennas can be depicted as following picture:
___________________________________________________________________________
____|____ _________ |
|PHY |--antenna_select[0] --> | | |
___|Antenna 0|--antenna_select[1] --> | | |
/ |Module |--antenna_select[2] --> | | ____|____
/ |_________|--antenna_select[3] --> | IO MUX |--GPIO[x0] --> ant_sel_in[0]--| | --- antenna 0
RX/TX ___/ | | And |--GPIO[x1] --> ant_sel_in[1]--| Antenna | --- antenna 1
\ ____|____ | GPIO |--GPIO[x2] --> ant_sel_in[2]--| Switch | ... ...
\ |PHY |--antenna_select[0] --> | Matrix |--GPIO[x3] --> ant_sel_in[3]--|_________| --- antenna 15
\___|Antenna 1|--antenna_select[1] --> | |
|Module |--antenna_select[2] --> | |
|_________|--antenna_select[3] --> |_________|
ESP32 Multiple antennas primarily consists of three parts: the PHY Antenna Module inside the chip, IO MUX and GPIO Matrix, and external antenna switches.
PHY Antenna Module:
Both antenna modules support operation in transmit (TX) or receive (RX) mode, and can be configured via software to select a particular module for transmission or reception.
Each antenna module supports outputting up to 4 antenna selection signals
antenna_select[3:0]
, which can be configured by software and mapped to any IO pin individually.When an antenna module is in operation, the logic level of the IO pin corresponds to the configured signal value.
IO MUX and GPIO Matrix:
Routes the internal 4-way antenna signals to specific IO pins.
External Antenna Switches:
Typically multi-way selectors, they choose the working antenna based on the logic level of the
ant_sel_in[x]
pin. For example,ant_sel_in[3:0]
as0b1011
selects antenna 11.
Steps for Multi-Antenna Usage
Determine the IO pins used for controlling antenna switching based on hardware circuit design and external antenna switches.
Configure antenna selection signals to output to specified IO pins.
API
esp_phy_set_ant_gpio()
is used to configureantenna_selects[3:0]
signals to connect withGPIO[x3:x0]
. IfGPIO[x0]
is connected toantenna_select[0]
,gpio_config->gpio_cfg[x0].gpio_select
should be set to 1, and the value ofgpio_config->gpio_cfg[x0].gpio_num
should beGPIO[x0]
.
Configure internal antenna operation mode and output signals.
API
esp_phy_set_ant()
is used to configure the use of internal antenna module 0 or 1 for transmission or reception, and to configure the output signal values when antenna module 0 or 1 is in operation.ESP_PHY_ANT_MODE_AUTO
mode is currently not recommended for use.
Multi-Antenna Configuration Reference Example
Typically, the following steps can be performed to configure multi-antenna:
Configure
antenna_selects
to connect with which GPIOs. For example, if four antennas are supported and GPIO20/GPIO21 are connected toantenna_select[0]/antenna_select[1]
, the configuration is as follows:
esp_phy_ant_gpio_config_t ant_gpio_config = {
.gpio_cfg[0] = { .gpio_select = 1, .gpio_num = 20 },
.gpio_cfg[1] = { .gpio_select = 1, .gpio_num = 21 }
};
Configure which antennas are enabled and how enabled antennas are used for receiving/sending data. For example, if antennas 1 and 3 are enabled, data reception needs to automatically select the better antenna, with antenna 1 set as the default antenna, and data transmission always selecting antenna 3. The configuration is as follows:
esp_phy_ant_config_t config = {
.rx_ant_mode = ESP_PHY_ANT_MODE_AUTO,
.rx_ant_default = ESP_PHY_ANT_ANT0,
.tx_ant_mode = ESP_PHY_ANT_MODE_ANT1,
.enabled_ant0 = 1,
.enabled_ant1 = 3
};
Notes
Different antenna switches may have invalid input values for
ant_sel_in[3:0]
, meaning the number of antennas supported by ESP32 via external antenna switches may be less than 16. For example, ESP32-WROOM-DA uses RTC6603SP as the antenna switch, supporting only 2 antennas. The two antenna selection input pins are active high and are connected to two GPIOs.0b01
indicates antenna 0 is selected,0b10
indicates antenna 1 is selected. Input values0b00
and0b11
are invalid.Despite supporting up to 16 antennas, only a maximum of two antennas can be enabled simultaneously for sending and receiving data.
The use of
ESP_PHY_ANT_MODE_AUTO
mode is currently not recommended, primarily due to the following limitations:For the antenna selection algorithm based on
ESP_PHY_ANT_MODE_AUTO
type for sending data, the antenna for sending data can only be set toESP_PHY_ANT_MODE_AUTO
when the antenna mode for receiving data isESP_PHY_ANT_MODE_AUTO
.When the receiving or sending antenna mode is configured as
ESP_PHY_ANT_MODE_AUTO
, frequent antenna switching may occur if RF signal degradation is detected. Unstable RF signals can lead to frequent antenna switching, resulting in the overall RF performance not meeting expectations.
Recommended Scenarios for Using Multiple Antennas
Applications can either select specified antennas or implement their own antenna selection algorithms based on collected information, such as selecting antenna modes according to application-specific criteria. Refer to the IDF example examples/phy/antenna/README.md for designing antenna selection algorithms.
Configure antenna modes for both receiving and sending data as
ESP_PHY_ANT_MODE_ANT0
orESP_PHY_ANT_MODE_ANT1
.
Application Examples
phy/antenna demonstrates how to use multi-antenna software switching for ESP32.