more on CSI and S3

This commit is contained in:
Bob 2025-11-21 10:53:44 -08:00
parent e7c2349c6d
commit 05ceca02ab
2 changed files with 40 additions and 15 deletions

View File

@ -5,4 +5,4 @@ cmake_minimum_required(VERSION 3.22)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
# "Trim" the build. Include the minimal set of components, main, and anything it depends on.
idf_build_set_property(MINIMAL_BUILD ON)
project(hello_world)
project(CSI)

View File

@ -206,24 +206,33 @@ bool wifi_cfg_apply_from_nvs(void) {
}
ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
// Enable WiFi 6 (802.11ax) and all protocols for best compatibility
// Configure WiFi protocols based on chip capabilities
#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6
// Dual-band chips (2.4GHz + 5GHz support)
wifi_protocols_t protocols = {
// 2.4 GHz: b/g/n/ax
// 2.4 GHz: b/g/n (no ax for CSI compatibility)
.ghz_2g = WIFI_PROTOCOL_11B |
WIFI_PROTOCOL_11G |
WIFI_PROTOCOL_11N,
// Restrict protocols so CSI can work:
// - CSI on ESP32-C5 is only supported on 2.4 GHz HT (11n), not HE (11ax)
// WIFI_PROTOCOL_11AX,
WIFI_PROTOCOL_11G |
WIFI_PROTOCOL_11N,
// 5 GHz: a/n/ac/ax
.ghz_5g = WIFI_PROTOCOL_11A |
WIFI_PROTOCOL_11N |
WIFI_PROTOCOL_11AC |
WIFI_PROTOCOL_11AX,
// .ghz_6g will be zero-initialized (not used on C5)
WIFI_PROTOCOL_11N |
WIFI_PROTOCOL_11AC |
WIFI_PROTOCOL_11AX,
};
ESP_ERROR_CHECK( esp_wifi_set_protocols(WIFI_IF_STA, &protocols) );
#else
// Single-band chips (2.4GHz only) - ESP32, ESP32-S2, ESP32-S3, ESP32-C3, etc.
// Use legacy API for 2.4GHz-only chips
uint8_t protocol_bitmap = WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N;
ESP_ERROR_CHECK( esp_wifi_set_protocol(WIFI_IF_STA, protocol_bitmap) );
// Warn if user requested 5GHz on a 2.4GHz-only chip
if (strcmp(band, "5G") == 0) {
ESP_LOGW(TAG, "5GHz requested but this chip only supports 2.4GHz - using 2.4GHz");
}
#endif
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wcfg) );
@ -237,7 +246,8 @@ bool wifi_cfg_apply_from_nvs(void) {
if (err2 != ESP_OK && err2 != ESP_ERR_INVALID_STATE) { ESP_ERROR_CHECK(err2); }
// Set bandwidth AFTER WiFi is started but BEFORE connect
// For ESP32-C5 dual-band, use esp_wifi_set_bandwidths() with struct
#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6
// Dual-band chips use struct-based API
wifi_bandwidths_t bandwidths = {
.ghz_2g = WIFI_BW_HT20,
.ghz_5g = WIFI_BW_HT20
@ -251,11 +261,26 @@ bool wifi_cfg_apply_from_nvs(void) {
ESP_LOGI(TAG, "Setting bandwidth to HT20 (20MHz) for both bands");
}
// Use dual-band API with struct pointer
err2 = esp_wifi_set_bandwidths(WIFI_IF_STA, &bandwidths);
if (err2 != ESP_OK) {
ESP_LOGW(TAG, "Failed to set bandwidths: %s", esp_err_to_name(err2));
}
#else
// Single-band chips (2.4GHz only) use legacy API
wifi_bandwidth_t bandwidth = WIFI_BW_HT20;
if (strcmp(bw, "HT40") == 0) {
bandwidth = WIFI_BW_HT40;
ESP_LOGI(TAG, "Setting bandwidth to HT40 (40MHz) for 2.4GHz");
} else {
ESP_LOGI(TAG, "Setting bandwidth to HT20 (20MHz) for 2.4GHz");
}
err2 = esp_wifi_set_bandwidth(WIFI_IF_STA, bandwidth);
if (err2 != ESP_OK) {
ESP_LOGW(TAG, "Failed to set bandwidth: %s", esp_err_to_name(err2));
}
#endif
err2 = esp_wifi_connect();
if (err2 != ESP_OK && err2 != ESP_ERR_WIFI_NOT_INIT && err2 != ESP_ERR_INVALID_STATE) { ESP_ERROR_CHECK(err2); }