国家码
国家码配置表
Ameba 提供了一份国家码配置表,每个国家码对应特定的信道表与发射功率,以适应不同国家的无线管制法规。
用户可在此文件中查看与修改: component/soc/usrcfg/amebaxxx/ameba_wifi_country_code_table_usrcfg.c
第一列为国家码,由 2 个 ASCII 字符组成;
第二列为信道规划,详细介绍请参考 使用说明 ;
第三列为发射功率,详细介绍请参考 概述 ;
const struct rtw_country_code_table country_code_table[] = {
{{'A', 'R'}, 0x4d, TXPWR_LMT_FCC}, /* 0000 Argentina */
{{'B', 'O'}, 0x11, TXPWR_LMT_FCC}, /* 0001 Bolivia */
{{'B', 'R'}, 0x62, TXPWR_LMT_FCC}, /* 0002 Brazil */
{{'C', 'L'}, 0x76, TXPWR_LMT_CHILE}, /* 0003 Chile */
{{'M', 'X'}, 0x4d, TXPWR_LMT_MEXICO}, /* 0010 Mexico */
{{'U', 'S'}, 0x1b, TXPWR_LMT_FCC}, /* 0015 USA */
...
...
};
有很多国家法规规定了相同的发射功率和信道表,我们将这些国家分为 3 组:
country_code_FCC
const struct country country_code_FCC[] = { {{'C', 'O'}}, /* 0004 Colombia */ {{'C', 'R'}}, /* 0005 Costa Rica */ {{'E', 'C'}}, /* 0006 Ecuador */ ... ... };country_code_ETSI
const struct country country_code_ETSI[] = { {{'A', 'T'}}, /* 0020 Austria */ {{'B', 'E'}}, /* 0021 Belgium */ {{'C', 'Y'}}, /* 0022 Cyprus */ ... ... };country_code_ETSI2
const struct country country_code_ETSI2[] = { {{'S', 'N'}}, /* 0077 Senegal */ {{'M', 'E'}}, /* 0079 Montenegro */ {{'Y', 'E'}}, /* 0084 Yemen */ ... ... };它们的信道表与发射功率分别如下:
const struct country_code_table_common_t country_code_table_common[] = { /*Most country have the same power limit and channel plan*/ {country_code_FCC, 0x76, TXPWR_LMT_FCC, sizeof(country_code_FCC) / sizeof(country_code_FCC[0])}, {country_code_ETSI, 0x5e, TXPWR_LMT_ETSI, sizeof(country_code_ETSI) / sizeof(country_code_ETSI[0])}, {country_code_ETSI2, 0x3a, TXPWR_LMT_ETSI, sizeof(country_code_ETSI2) / sizeof(country_code_ETSI2[0])}, };
备注
国家码按 ISO 3166-1 进行编码
上述配置表为 Realtek 根据各国法规得出的推荐值,用户可按需自行修改
可按需求增加自定义国家码和配置,只要不和现有国家码重名即可
字符'0''0'为特殊值,表示 World Wide, 即全球通用,其信道表为所有国家信道表的交集,其发射功率为所有国家发射功率的最小值。
{{'0', '0'}, 0x17, TXPWR_LMT_WW}, /* 0238 World Wide */
国家码设置接口
SDK 目前提供了 4 种国家码设置接口:
一般在量产产线上设置。
国家码占用 efuse 的
0x13B和0x13C栏位,使用 ASCII 字符编码.示例 1: 设置国家码为中国
iwpriv config_set wmap,13B,434E /* 'C'=0x43, 'N'=0x4E */示例 2: 设置国家码为 Worldwide
iwpriv config_set wmap,13B,3030 /* '0'=0x30 */
检查是否设置成功:
iwpriv efuse_get rmap,13B,2
路径: component/soc/usrcfg/amebaxxx/ameba_wificfg.c
默认配置:使用 Efuse 里的值
wifi_user_config.country_code[0] = 0; wifi_user_config.country_code[1] = 0;
示例 1: 设置国家码为中国
wifi_user_config.country_code[0] = 'C'; wifi_user_config.country_code[1] = 'N';
示例 2: 设置国家码为 Worldwide
wifi_user_config.country_code[0] = '0'; wifi_user_config.country_code[1] = '0';
一般用在需要在 Wi-Fi 初始化后再动态修改国家码的情况。
示例: 设置国家码为中国
u8 country_code[2] = {'C','N'}; wifi_set_countrycode(country_code);
根据 802.11d 协议自动选择国家码,请参考 802.11d
备注
Wi-Fi 配置文件的方式优先级高于 Efuse,若 wifi_user_config.country_code 不为无效值(0x0000),则以开发者配置文件为准
API 与 802.11d 会动态修改国家码,优先级高于 Wi-Fi 配置文件与 Efuse 配置
802.11d
802.11d 默认处于关闭状态,在 Wi-Fi 配置文件(component/soc/usrcfg/amebaxxx/ameba_wificfg.c) 中开启:
wifi_user_config.rtw_802_11d_en = 1; /* 1=Enable, 0=Disable */
启用后,设备通过解析环境中 AP 广播的国家信息元素,自动选择出现频次最高的国家码作为自身配置,从而动态适配不同国家的无线电法规。
不同 Wi-Fi 工作状态对应的国家码来源如下表:
Wi-Fi状态 |
国家码来源 |
|---|---|
初始化完成 |
Efuse芯片固化值/配置文件预设值/API设定值(参考 国家码设置接口 ) |
扫描完成 |
扫描到的AP广播国家码中出现频率最高的国家码 |
连线成功 |
当前连接AP广播的国家码 |
断线 |
扫描到的AP广播国家码中出现频率最高的国家码 |
调试命令
可执行 AT+WLDBG=regu 获取当前的国家码、信道表、发射功率等信息:
#AT+WLDBG=regu [WLDBG]: _AT_WLAN_IWPRIV_ [WLAN-A] [iwpriv_command] cmd name: regu [WLAN-A] Country code: 00 [WLAN-A] Channel plan: 17 [WLAN-A] Regulation: WW[WW disable] [WLAN-A] Country code Version: R45 [WLAN-A] Channel plan Version: R70 [WLAN-A] Power limit: on
信道规划
使用说明
Realtek 维护了一份信道规划表(由 FAE/AE Release): WS-xxdate-Willis-Efuse_Channel_Plan_new_define-Rxx.xlsx
其中定义了不同编码对应的信道列表以及主动或被动扫描等信息。
以 USA 为例,其国家码配置表默认值如下:
{'U', 'S'}, 0x1b, TXPWR_LMT_FCC}, /* 0015 USA */
其中信道规划为 0x1b ,在信道规划表中搜索 1Bh,可以得到 2G 和 5G 信道的整体信息:
根据 2G 信道编码 2G_02 ,可以得到 2G 信道的完整信息:
根据 5G 信道编码 5G_52 ,可以得到 5G 信道的完整信息:
备注
请忽略 “2G Regulation” 和 “5G Regulation” 栏位,Ameba 系列不使用这两列的信息,只是用来兼容旧版本
常见问题
如何修改信道规划?
还是以 USA 为例,若想要禁用信道 12、13 (2G) 和 169、173、177 (5G)。
查阅信道规划表,可见 0x25 是满足需求的:
修改国家码配置表中的信道规划栏位,将 0x1b 改为 0x25
{'U', 'S'}, 0x25, TXPWR_LMT_FCC}, /* 0015 USA */
现有信道规划中找不到满足需求的?
目前不支持用户自定义信道规划。
常见的解决方法是在调用扫描、连线、启动 SoftAP 的 API 时指定工作信道。
若仍无法满足需求,可以联系 Realtek 讨论新增信道规划。
如何获取信道规划表的版本?
参考调试命令,获取当前 Wi-Fi 驱动使用的信道规划表版本: 调试命令
发射功率
概述
Realtek 提供了两种发射功率表:
Power by rate :各速率在满足 EVM 等性能要求下,所能达到的最大发射功率
Power by limit :为满足法规要求而限制的发射功率
整理在同一份文件中(由 FAE/AE 发布): WR-TX_Power by Rate&Limit Table-RTLxxx_Rxx.xls
Power by Rate
在 WR-TX_Power by Rate&Limit Table-RTLxxx_Rxx.xls 中可以找到 Realtek 提供的 Power by Rate 表:
默认数据基于 EVB 测试,单位为 0.25dB , 用户可直接更改表格中的数据,并参考 加载 Power by rate & limit 表 更新至固件,以满足实际产品的需求。
警告
不要修改除发射功率数据外的其他内容,可能会导致数据更新出错
Power by Limit
常用法规
默认提供了 5 种常用法规的数据:
以 FCC 为例,默认数据如下图:
同样的,用户可直接更改表格中的数据, 并参考 加载 Power by rate & limit 表 更新至固件
警告
不要修改除发射功率数据外的其他内容,可能会导致数据更新出错
选择哪张 Power by limit 表?
Power by limit 表的选择跟随国家码, 可参考 国家码配置表
以 USA 为例,Power by limit 默认使用 FCC 法规:
{'U', 'S'}, 0x1b, TXPWR_LMT_FCC}, /* 0015 USA */
若需要将 Power by limit 改成 ETSI,则:
{'U', 'S'}, 0x1b, TXPWR_LMT_ETSI}, /* 0015 USA */
增加其他法规
目前支持新增以下几种法规:
enum rtw_txpwr_lmt { TXPWR_LMT_FCC = 0, /**< Federal Communications Commission (USA). */ TXPWR_LMT_MKK = 1, /**< Japan */ TXPWR_LMT_ETSI = 2, /**< European Telecommunications Standards Institute (CE).*/ TXPWR_LMT_IC = 3, /**< Canada */ TXPWR_LMT_KCC = 4, /**< South Korea */ TXPWR_LMT_ACMA = 5, /**< Australia */ TXPWR_LMT_CHILE = 6, /**< Chile */ TXPWR_LMT_MEXICO = 7, /**< Mexico */ TXPWR_LMT_WW = 8, /**< Worldwide, The mininum of all */ TXPWR_LMT_GL = 9, /**< Global */ TXPWR_LMT_UKRAINE = 10, /**< Ukraine */ TXPWR_LMT_CN = 11, /**< China */ TXPWR_LMT_QATAR = 12, /**< Qatar */ TXPWR_LMT_UK = 13, /**< Great Britain (United Kingdom; England) */ TXPWR_LMT_NCC = 14, /**< Taiwan */ TXPWR_LMT_EXT = 15, /**< Customer Customization */ /* ===== Add new power limit above this line. ===== */ TXPWR_LMT_CONST_MAX /**< unchanging part define max */ };
参考步骤:
备注
请忽略
TXPWR_LMT_GL,此选项保留只是为了兼容旧版本
增加自定义法规
TBD
加载 Power by rate & limit 表
Ameba 提供了 GenTxPowerTool,用来将 excel 中的数据转换成.c 文件,其操作步骤如下:
Power by rate & limit 使能设置
一般在量产产线上设置。
Power by rate & limit 占用 efuse 的 0x131[2:0] 栏位,不同值对应的含义如下:
0x131[2:0] |
描述 |
|---|---|
0 |
仅使用 Power by rate 功率表 |
1 |
同时使用 Power by rate 和 Power by limit 功率表,发射功率取两者的较小值 |
2 |
两张功率表都不使用 |
开发者配置文件为: component/soc/usrcfg/amebaxxx/ameba_wificfg.c
Power by rate & limit 配置栏位为:
wifi_user_config.tx_pwr_table_selection
取值 |
描述 |
|---|---|
0 |
仅使用 Power by rate 功率表 |
1 |
同时使用 Power by rate 和 Power by limit 功率表,发射功率取两者的较小值 |
2 |
使用 Efuse 里的值(默认配置) |
备注
Wi-Fi 配置文件优先级高于 Efuse,若
tx_pwr_table_selection ≠ 2,则以 Wi-Fi 配置文件为准
其他发射功率配置接口
API |
描述 |
|---|---|
强制设置所有速率的发射功率为固定值 |
|
获取指定速率的发射功率 |
Adaptivity 测试
概述
标准
Adaptivity 是一种自动信道接入机制,通过该机制,设备可以在检测到信道中已有传输的情况下,自动避免在该信道上进行传输。任何设备若其声明的最大射频输出功率水平超过 10 dBm e.i.r.p.,都要求实施 Adaptivity 协议。
自 2017 年 12 月 31 日起,ETSI 开始要求 Adaptivity 认证。相关标准包括适用于 2.4GHz 频段的 ETSI EN 300 328 V2.2.2,以及适用于 5GHz 频段的 ETSI EN 301 893 V2.1.1。
ETSI 规定了 Adaptivity 测试过程如下:
建立 DUT(待测设备)与陪测设备的连接,并开始数据传输。
添加干扰信号。在 2G 测试中,还需加入超出带宽长度的阻塞信号。
检查 DUT 是否停止数据传输。
在此期间,DUT 仅允许向陪测设备发送 ACK 包,其他类型的包均不允许发送。
确认测试是否通过。
2G 测试通过标准:在 50ms 内,Tx 占空比不得超过 10%。如果满足,通过;否则失败
5G 测试通过标准:在 50ms 内,Tx 占空比不得超过 5%。如果满足,通过;否则失败
在不同的信道、带宽和 802.11 模式下重复以上步骤。
干扰功率
ETSI 规定的能量侦测公式如下:
2G: TL = -70dBm/MHz + 10*log10(100mW/Pout)
5G: TL = -75dBm/MHz
备注
Pout 为 DUT 的最大发送功率。干扰信号的带宽必须大于 DUT 的带宽,且具有 100%的占空比。
Realtek 在实验室内以最严苛的条件进行测试。
2G: TL = -70dBm/MHz
5G: TL = -75dBm/MHz
下表展示了不同频率和带宽下的干扰功率阈值。当干扰功率超出阈值时,MAC 层将暂停数据传输。
项目 |
2G |
5G |
||||
|---|---|---|---|---|---|---|
20MHZ |
40MHZ |
20MHZ |
40MHZ |
80MHZ |
160MHZ |
|
干扰功率(dBm) |
-57 |
-54 |
-62 |
-59 |
-56 |
-53 |
以下章节会详细阐述软件配置和调试的标准操作程序,这对于成功通过 Adaptivity 测试至关重要。
软件配置
EDCCA 模式
Ameba 支持多种 EDCCA 模式,详见配置参数 rtw_edcca_mode。对于法规测试,则需要根据相应法规的测试需求配置为与之对应的 EDCCA 模式:
静态配置
文件路径:
component/soc/usrcfg/amebadplus/ameba_wificfg.c文件路径:
component/soc/usrcfg/amebalite/ameba_wificfg.c文件路径:
component/soc/usrcfg/amebalite/ameba_wificfg.c文件路径:
component/soc/usrcfg/amebalite/ameba_wificfg.c文件路径:
component/soc/usrcfg/amebasmart/ameba_wificfg.c
函数名:
wifi_set_user_config()
对于 ETSI Adaptivity 测试,将 EDCCA 模式配置为 RTW_EDCCA_ADAPT
wifi_user_config.rtw_edcca_mode = RTW_EDCCA_ADAPT;对于 Carrier Sense 测试,将 EDCCA 模式配置为 RTW_EDCCA_CS
wifi_user_config.rtw_edcca_mode = RTW_EDCCA_CS;该配置将于 Wi-Fi 初始化过程中生效。
动态配置
不支持。
静态配置
文件路径:
firmware/component/wifi/whc/whc_host_linux/fullmac/ipc/ameba_wificfg.c函数名:
wifi_set_user_config()对于 ETSI Adaptivity 测试,将 EDCCA 模式配置为 RTW_EDCCA_ADAPT
wifi_user_config.rtw_edcca_mode = RTW_EDCCA_ADAPT;
对于 Carrier Sense 测试,将 EDCCA 模式配置为 RTW_EDCCA_CS
wifi_user_config.rtw_edcca_mode = RTW_EDCCA_CS;
该配置将于 Wi-Fi 初始化过程中生效。
动态配置
EDCCA 模式已经集成在路径
/proc/net/whc_fullmac/wlan0/edcca_mode。使用以下命令读取或修改此设置:echo n > /proc/net/whc_fullmac/wlan0/edcca_mode cat /proc/net/whc_fullmac/wlan0/edcca_mode
备注
n 的取值范围是 [0, 1, 2, 9]。
端口可能不是
wlan0,请根据实际应用的端口号来设定。
示例:
/ # echo 1 > /proc/net/whc_fullmac/wlan0/edcca_mode / # cat /proc/net/whc_fullmac/wlan0/edcca_mode 1
EDCCA 门限
在与 AP 建立连接后,使用以下命令获取当前的 EDCCA 阈值:
AT+WLDBG=get_edcca_th
在大多数场景中,默认配置足以满足 Adaptivity 测试的要求。如需进行调整,请通过以下命令来修改 EDCCA 阈值:
AT+WLDBG=fix_edcca_th <value>
备注
该值的单位是 dBm,范围是 [-60, -80],最小调整步长为 1。
示例:
AT+WLDBG=get_edcca_th
[WLDBG]: _AT_WLAN_IWPRIV_
[WLAN-A] [iwpriv_command] cmd name: get_edcca_th
[WLAN-A] edcca thre=-60 dbm
AT+WLDBG=fix_edcca_th -62
[WLDBG]: _AT_WLAN_IWPRIV_
[WLAN-A] [iwpriv_command] cmd name: fix_edcca_th
目前无 ATWZ 命令可用于设置或获取 EDCCA 阈值。客户可通过编译如下代码后使用。
获取当前 EDCCA 阈值
ATWZ get_edcca_th
设置 EDCCA 阈值
ATWZ fix_edcca_th <value>
备注
该值的单位是 dBm, 范围是 [-60, -80], 最小调整步长为 1。
客户可以参考 https://github.com/Ameba-AIoT/ameba-linux-development/tree/ameba-6.6.y/wifi/ATWZ 在 Linux 操作系统中添加 ATWZ 命令, 并根据具体需求进行适配。
在与 AP 建立连接后,使用以下命令获取当前的 EDCCA 阈值:
ATWZ get_edcca_th
在大多数场景中,默认配置足以满足 Adaptivity 测试的要求。如需进行调整,请通过以下命令来修改 EDCCA 阈值:
ATWZ fix_edcca_th <value>
备注
该值的单位是 dBm,范围是 [-60, -80],最小调整步长为 1。
示例:
/ # ATWZ get_edcca_th
[WLDBG]: _AT_WLAN_IWPRIV_
[WLAN-A] [iwpriv_command] cmd name: get_edcca_th
[WLAN-A] edcca thre=-60 dbm
/ # ATWZ fix_edcca_th -61
[WLAN-A] [iwpriv_command] cmd name: fix_edcca_th
/ # ATWZ get_edcca_th
[WLDBG]: _AT_WLAN_IWPRIV_
[WLAN-A] [iwpriv_command] cmd name: get_edcca_th
[WLAN-A] edcca thre=-61 dbm
调试 SOP
检查项 |
注意点 |
|---|---|
测试 SDK |
|
测试环境 |
|
调整 EDCCA 阈值 |
使用 |
DFS
DFS Slave
SDK 默认支持 DFS slave, STA 会自动处理 AP beacon 和 action 中的 CSA IE。
虽然不同国家不同法规对 DFS 的要求在细节上有差异,但主要影响的是 DFS Master,对 DFS Slave 来说,只要能满足以下要求,一般就可以通过法规测试:
按 AP 指示,决定是否在当前信道停止 Wi-Fi 传输
按 AP 指示,准时切换到新的信道
DFS Master
暂不支持
Wi-Fi Logo 认证
如何获取 Wi-Fi logo 证书?
获取 Wi-Fi logo 证书的流程如下图所示:
Wi-Fi 联盟(Wi-Fi Alliance,简称 WFA)的会员须通过在线“认证系统”(官网之上)申请认证。然后选取授权测试实验室(Authorized Test Laboratory, 简称 ATL),询问报价,安排测试时间事宜。
客户联系瑞昱相关人员,寻求过认证的技术支持。
客户根据自己的产品,确认认证类型(灵活认证、快速认证或衍生认证,参考 三种认证对比)。
客户向 WFA 提交测试申请,得到一个认证识别码(Certification ID, 简称 CID)。
客户与 ATL 协调测试日期、安排财务相关事宜并提供设备。
ATL 执行测试,并向客户和 WFA 发布测试报告。
如果产品未通过测试,客户与瑞昱一起解问题,再重新测试(可能需要支付额外费用给 ATL)。
WFA 工作人员审核测试结果,如果结果核实有效并成功通过测试,且没有发现其他原因导致不能核准该认证,就会为该产品授予认证证书。
备注
Wi-Fi 联盟官网为:https://www.cert.wi-fi.org/。
我们已经搭建与 ATL 环境一样的实验室,可以作为预测与认证过程中遇到的问题分析与调试。
三种认证方式
在 Wi-Fi 联盟的认证体系中,三种认证途径分别是灵活认证(FlexTrack)、快速认证(QuickTrack)和衍生认证(Derivative Certification)。这三种途径针对不同产品开发模式,在测试范围、周期和成本上提供差异化选择,同时确保认证的严谨性。以下是具体说明:
三种认证对比 认证途径
灵活认证
快速认证
衍生认证
适用产品类型
定制化、创新型产品
基于合格解决方案的改进型产品
完全复用已认证设计的产品
测试要求
全功能测试
部分功能测试
无需测试
测试地点
ATL
ATL 或企业实验室
无
周期
长(4-8 周)
中(2-4 周)
短(1-2 周)
成本
高
中
低(仅行政费)
典型应用
新的芯片组
基于某芯片的产品,继承芯片的证书
改型,某芯片组内的芯片子型号
我们芯片的认证情况
- 以下为我们的芯片获取证书的情况:
RTL8721DGx
CID: RTL8721DG
认证项目:
CERTIFIED 11n 20M/40M
PMF
KRACK
FFD
WPA2-Personal
WPA3-Personal
Forward Compatibility
证书类型:可继承的快速认证证书
证书链接:在网址 https://www.wi-fi.org/product-finder,搜索“RTL8721DG”查询证书。
RTL8721DCx
CID: RTL8721DC
认证项目:
CERTIFIED 11n 20M/40M
PMF
KRACK
FFD
WPA2-Personal
WPA3-Personal
Forward Compatibility
证书类型:可继承的快速认证证书
证书链接:在网址 https://www.wi-fi.org/product-finder,搜索“RTL8721DC”查询证书。
CID: RTL8730E
认证项目:
CERTIFIED 11n
CERTIFIED 11ac 5G
PMF
KRACK
FFD
WPA2-Personal
WPA3-Personal
Forward Compatibility
WIFI6 2.4G
WIFI6 5G
MBO
证书类型:可继承的快速认证证书
证书链接:在网址 https://www.wi-fi.org/product-finder,搜索“RTL8730E”查询证书。
目前公司尚未使用该芯片单独过认证,但是有客户使用该型号芯片的产品拿到过证书。
所过认证项目:
CERTIFIED 11n
PMF
KRACK
FFD
WPA2-Personal
WPA3-Personal
Forward Compatibility
WIFI6 2.4G
MBO