ESP32C5在espidf环境下报错5g bitmap contains only invalid channels= @xff

`5g bitmap contains only invalid channels=@xff`

是 **ESP32 Wi-Fi 驱动在启动 5 GHz 扫描(或 Soft-AP)时打印的警告**,含义:

  • 驱动准备了一张 "5 GHz 信道位图" 用来告诉硬件 **哪些 5 GHz 信道可以扫描/启用**。

  • 这张位图被全部填成了 `0xFF`(即 1111 1111b),但 **每一个比特对应的信道在法规数据库里都被标记为"无效/禁用"**。

  • 结果就等价于 **"没有任何可用的 5 GHz 信道"**,于是驱动报出这一行日志。

通常触发场景

  1. 使用了 **默认的世界监管域 (WIFI_COUNTRY_CN/WORLD)**,但 **没有加载国家代码对应的 5 GHz 信道表**。

  2. 某些 **ESP-IDF 版本** 在 C3(仅 2.4 GHz PHY)上也会打印这条信息,因为它把 5 GHz 代码编译进去了,但芯片根本不支持 5 GHz,所以所有信道都被判无效。

  3. 自己写 Soft-AP 代码把 `config.channel` 设到了 5 GHz 信道号(> 13),但当前监管域不允许。

需要做什么

  • **ESP32-C3 只有 2.4 GHz 射频**,这条日志可以**完全忽略**,不会影响任何功能。

  • 如果用的是 2.4 GHz STA/Soft-AP,确认 `wifi_config_t` 里 `.channel = 1~13` 即可。

  • 如果确实在 5 GHz 芯片(ESP32-S3、ESP32-C6 等)上遇到,给 `esp_wifi_set_country()` 设置正确的国家码,例如:

```c

wifi_country_t country = {

.cc = "CN",

.schan = 1,

.nchan = 13, // 2.4 GHz 13 信道

.policy = WIFI_COUNTRY_POLICY_MANUAL

};

ESP_ERROR_CHECK( esp_wifi_set_country(&country) );

```

总结:

  • **C3 用户直接无视这条日志**;

  • 其余芯片若需 5 GHz,请确认国家码与信道号合法。

若需 5 GHz必须先调用 esp_wifi_set_country(),再执行任何 5 GHz 相关的扫描/连接/Soft-AP 操作,否则所有 5 GHz 信道都会被监管库标记为"无效",你就会持续看到

5g bitmap contains only invalid channels=@xff的典型报错。


最小流程(以 5 GHz 合法的中国大陆信道为例)

复制代码
// 1. 设置国家码 ------ 必须在 esp_wifi_start() 之前
wifi_country_t cn = {
    .cc      = "CN",
    .schan   = 1,
    .nchan   = 13,           // 2.4 GHz 1~13
    .policy  = WIFI_COUNTRY_POLICY_MANUAL,
    /* 下面是 5 GHz 表;CN 允许 36/40/44/48/52/56/60/64 */
    .schan_5g = 36,
    .nchan_5g = 29,         // 36~64 共 8 个信道
};
ESP_ERROR_CHECK( esp_wifi_set_country(&cn) );

// 2. 打开 5 GHz 位图(扫描示例)
wifi_scan_config_t scan_cfg = {
    .channel_bitmap = {
        .ghz_2_channels = 0x1fff,   // 1~13
        .ghz_5_channels = 0x1ff,    // 36~64 共 8 个信道
    },
};
ESP_ERROR_CHECK( esp_wifi_scan_start(&scan_cfg, false) );

常见坑

问题 结果
不设置国家码 所有 5 GHz 信道无效 → 位图全 0xFF
国家码填了 "US" 但位图用了 149+ 149 在 CN 不合法 → 仍显示 invalid
芯片本身只有 2.4 GHz(C3) 怎么设都不会出现 5 GHz,可忽略

一句话:
只要打算用 5 GHz,就必须先 esp_wifi_set_country();否则就算把 0xff 写到位图,驱动也会全部判无效。