Broadcast frame data rates (esp_wifi_config_80211_tx_rate question)
Posted: Mon Jul 11, 2022 7:17 pm
Hello all,
I'm evaluating the ESP32 for a project, so I am new to the device (and Espressif). I've run the iperf test and things look fine for UDP unicast frames (40Mb/s+). When I send broadcast UDP frame (192.168.1.255) from the ESP32, the performance drops to less than 1Mb/s (no surprise). What I'd like to do is raise the minimum output data rate on the broadcast frames. I tried using:
esp_wifi_config_80211_tx_rate(WIFI_IF_AP, WIFI_PHY_RATE_54M));
but nothing seemed to change (and I'm not even sure it would do something for a frame not send with esp_wifi_80211_tx which seems to have a maximum length assigned to it).
So, is there a way to raise the base transmission rate for broadcast frame (total frame length 1514 bytes) from the ESP32? Or is esp_wifi_config_80211_tx_rate it and I'm missing something important?
Thanks!
My initialization code:
I'm evaluating the ESP32 for a project, so I am new to the device (and Espressif). I've run the iperf test and things look fine for UDP unicast frames (40Mb/s+). When I send broadcast UDP frame (192.168.1.255) from the ESP32, the performance drops to less than 1Mb/s (no surprise). What I'd like to do is raise the minimum output data rate on the broadcast frames. I tried using:
esp_wifi_config_80211_tx_rate(WIFI_IF_AP, WIFI_PHY_RATE_54M));
but nothing seemed to change (and I'm not even sure it would do something for a frame not send with esp_wifi_80211_tx which seems to have a maximum length assigned to it).
So, is there a way to raise the base transmission rate for broadcast frame (total frame length 1514 bytes) from the ESP32? Or is esp_wifi_config_80211_tx_rate it and I'm missing something important?
Thanks!
My initialization code:
Code: Select all
void wifi_init_softap(void)
{
// Initialize the IP stack
ESP_ERROR_CHECK(esp_netif_init());
// Creates a "loop handler" that basically is used to register routines that
// respond to events from the WIFI module. Note that it is possible to create
// other loop handlers for different components.
ESP_ERROR_CHECK(esp_event_loop_create_default());
// Creates default WIFI AP. Also returns a pointer the esp-netif instance of
// type esp_netif that we don't need here.
esp_netif_create_default_wifi_ap();
// The macro WIFI_INIT_CONFIG_DEFAULT is a set of default configuration values.
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
// Initialize WiFi Allocate resource for WiFi driver, such as WiFi control structure,
// RX/TX buffer, WiFi NVS structure etc. This WiFi also starts WiFi task.
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
// Register "wifi_event_handler" to handle any event that comes from the WiFi.
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifi_event_handler,
NULL,
NULL));
// Data structure to handle Wifi identity setup
wifi_config_t wifi_config = {
.ap = {
.ssid = TEST_ESP_WIFI_SSID,
.ssid_len = strlen(TEST_ESP_WIFI_SSID),
.channel = TEST_ESP_WIFI_CHANNEL,
.password = TEST_ESP_WIFI_PASS,
.max_connection = TEST_MAX_STA_CONN,
.authmode = WIFI_AUTH_WPA_WPA2_PSK
},
};
// If no password is set, force the authenication to OPEN.
if (strlen(TEST_ESP_WIFI_PASS) == 0) {
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
}
// Set sleep mode to none...
esp_wifi_set_ps(WIFI_PS_NONE);
// Use SRAM for packet storage
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM) );
// Set the Wifi mode to AP
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
esp_wifi_config_80211_tx_rate(WIFI_IF_AP, WIFI_PHY_RATE_54M);
// Configure the WiFi.
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
// And start 'er up
ESP_ERROR_CHECK(esp_wifi_start());
// And log a status message
ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s channel:%d",
TEST_ESP_WIFI_SSID, TEST_ESP_WIFI_PASS, TEST_ESP_WIFI_CHANNEL);
}