WIFI国家码设置的影响

记录下工作中关于国家码设置对WIFI的影响,以SKYLAB的SKW99和SDZ202模组为例进行说明。对应到日常,就是我们经常提及手机是“美版”“港版”等,它们的wifi国家码是不同的,各版本在wifi使用中遇到的各种情况与下面所述是吻合的。

现象一:客户使用SKW99的STA功能去连接某个热点,出现热点搜索不到的情况;

分析原因:SKW99为高通方案,默认国家码为美国(US),对应2.4G的的信道范围为1-11,而需要连接的热点,工作在13信道,所以无法搜索到;

解决方法:在web界面修改国家码,设置为我国国家码(CN),或者156对应CN,即可让工作信道范围变为1-13,再次搜索,可以搜到对应热点;

现象二:搜不到SDZ202的5G热点;

分析原因:SDZ202是高通(QCA9531+QCA9886)方案,高通SDK打包固件默认的信道为auto,国家码默认US,在交互终端看到启动默认工作信道为5.5GHZ,对应信道为100,这个信道正好不在我国范围的5G范围内,而我们使用的手机是国内版的,所以搜不到这个热点;

解决方法:在web界面测试,将信道改为44信道,热点即可搜索到,或者将国家码改为156,channel范围也会变为我国允许的范围,同样可以搜索到。

改信道:

改国家码:

下面链接是WIFI 2.4G和WIFI 5G各个国家对应支持的范围

WIFI 国家码和信道划分 - 肉滚滚和代码 - 博客园 (cnblogs.com)

### 嵌入式设备中EEPROM存储WiFi国家的位置与方式 在嵌入式设备中,EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种非易失性存储器,通常用于存储配置参数、校准数据和用户设置等信息。WiFi国家作为一种关键的配置参数,也可能存储在EEPROM中。 #### EEPROM中存储WiFi国家的方式 1. **固定地址分配** 在设计阶段,开发者会为WiFi国家分配一个固定的EEPROM地址范围。例如,假设EEPROM的前两个字节用于存储国家,则可能使用以下格式: - 地址`0x00`:存储国家的第一个字符(如“US”中的“U”)。 - 地址`0x01`:存储国家的第二个字符(如“US”中的“S”)。 这种方式简单直接,便于读取和写入[^1]。 2. **结构化存储** 更复杂的系统可能会将WiFi国家作为配置结构的一部分存储。例如,定义一个结构体来组织所有无线网络相关的参数: ```c typedef struct { uint8_t wifiCountryCode[2]; // WiFi国家 uint8_t channel; // 默认信道 uint8_t powerLevel; // 发射功率级别 // 其他配置参数... } WirelessConfig; ``` 在这种情况下,`wifiCountryCode`字段会被存储在EEPROM的特定位置,通常通过偏移量访问。 3. **加密存储** 为了防止未经授权的修改,某些设备会对EEPROM中的数据进行加密。WiFi国家可能会与其他敏感信息一起被加密后存储。解密过程通常在设备启动时完成,确保只有授权的固件能够访问这些数据[^2]。 4. **动态更新机制** 设备可以通过用户界面或远程管理接口动态更新EEPROM中的WiFi国家。例如,通过HTTP POST请求将新的国家发送到设备,并由固件负责将其写入EEPROM。以下是一个示例代片段,展示如何更新EEPROM中的国家: ```c void updateWiFiCountryCode(const char *newCode) { if (strlen(newCode) != 2) { Serial.println("Invalid country code length"); return; } EEPROM.write(0x00, newCode[0]); // 写入第一个字符 EEPROM.write(0x01, newCode[1]); // 写入第二个字符 EEPROM.commit(); // 确保数据写入EEPROM Serial.println("Country code updated successfully"); } ``` #### 示例:ESP32中EEPROM存储WiFi国家 以ESP32为例,其内置的Preferences库可以用来简化EEPROM操作。以下代展示了如何将WiFi国家存储到EEPROM中: ```cpp #include <Preferences.h> void saveWiFiCountryCode(const char *code) { Preferences preferences; preferences.begin("wifi", false); // 打开名为"wifi"的命名空间 preferences.putString("country", code); // 存储国家 preferences.end(); } const char* loadWiFiCountryCode() { Preferences preferences; preferences.begin("wifi", false); const char *code = preferences.getString("country", "US").c_str(); // 默认值为"US" preferences.end(); return code; } ``` 上述代中,`saveWiFiCountryCode`函数将国家保存到名为`wifi`的命名空间中,而`loadWiFiCountryCode`函数则用于读取存储的国家[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值