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.
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.
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 to antenna_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 values 0b00
and 0b11
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.
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
or ESP_PHY_ANT_MODE_ANT1
.
phy/antenna demonstrates how to use multi-antenna software switching for ESP32.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4