`5g bitmap contains only invalid channels=@xff`
是 **ESP32 Wi-Fi 驱动在启动 5 GHz 扫描(或 Soft-AP)时打印的警告**,含义:
-
驱动准备了一张 "5 GHz 信道位图" 用来告诉硬件 **哪些 5 GHz 信道可以扫描/启用**。
-
这张位图被全部填成了 `0xFF`(即 1111 1111b),但 **每一个比特对应的信道在法规数据库里都被标记为"无效/禁用"**。
-
结果就等价于 **"没有任何可用的 5 GHz 信道"**,于是驱动报出这一行日志。
通常触发场景
-
使用了 **默认的世界监管域 (WIFI_COUNTRY_CN/WORLD)**,但 **没有加载国家代码对应的 5 GHz 信道表**。
-
某些 **ESP-IDF 版本** 在 C3(仅 2.4 GHz PHY)上也会打印这条信息,因为它把 5 GHz 代码编译进去了,但芯片根本不支持 5 GHz,所以所有信道都被判无效。
-
自己写 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
写到位图,驱动也会全部判无效。