产测与射频测试工具
本文档介绍 AC792N SDK 中面向生产制造环节的产测(Production Test)与射频(RF)测试工具链,涵盖 RF_FCC 测试模式、Wi-Fi/蓝牙射频测试指令、上位机通信协议、第三方产测设备接入以及 JL 自研产测流程(SPK/ANC/ENC/按键)。
Purpose and Scope
本页面覆盖以下内容:
- RF_FCC 测试工具(
sdk/apps/common/rf_fcc_tool与sdk/apps/common/ext_rf_fcc_tool):射频测试模式的触发机制、配置宏、上位机串口通信协议、Wi-Fi/蓝牙射频测试接口; - 产测配置体系(音频产测、Speaker EQ 校准、ANC 产测、ENC 麦克风阵列校准、按键产测),包括第三方产测设备(兆华/美格信/指南测控)与 JL 自研产测(配合 JL 产测串口板与 JL π-HAT 上位机)。
以下主题属于其他页面,本页只做交叉指引,不展开叙述:
- 音频流节点(SpeakerEQ、BitWidth Convert、DAC 节点)的详细配置,见音频配置相关页面;
- 测试盒串口升级流程,见升级配置相关页面;
- 蓝牙音量同步(经典蓝牙音量同步),见蓝牙配置相关页面。
Overview
AC792N SDK 面向耳机/音箱类产品,产线需要在不运行完整应用逻辑的前提下验证射频指标(Wi-Fi/蓝牙收发功率、信道、速率、晶振校准)与音频声学指标(MIC 频响、Speaker EQ、ANC/ENC 性能)。为此 SDK 提供两条测试链路:
RF_FCC 测试模式:通过 IO 检测、脉冲检测、串口指令或上电自启等方式进入专用射频测试模式,由上位机(通常是 FCC 测试工装/产测盒)通过 UART 下发命令,控制芯片进行 Wi-Fi TX/RX、蓝牙 TX 等射频收发测试,并回传 PASS/FAIL 结果。
产测流程(音频/声学):产测设备(第三方如兆华、美格信、指南测控,或 JL 自研 π-HAT 上位机)通过蓝牙 SPP 或串口与产品通信,下发音效 bypass、MIC 频响测试、Speaker EQ 校准、ANC/ENC 校准、按键检测等指令,产品端执行对应测试流程并上报结果。
两种链路共享同一思想:产线设备驱动、产品端执行、结果上报,从而把测试逻辑从应用代码中隔离出来,保证量产一致性。
Architecture
下图展示了产测与射频测试工具的整体架构,包括两条主要测试链路(RF_FCC 射频测试链路与音频/声学产测链路)及其共享的底层驱动:
flowchart TD
subgraph sg_PC["产线设备(上位机)"]
FCCBox["FCC测试工装/产测盒"]
PiHat["JL π-HAT 上位机"]
ThirdParty["第三方设备(兆华/美格信/指南测控)"]
end
subgraph sg_Comm["通信通道"]
UART["UART 串口 (uart0/uart1/uart2)"]
BT_SPP["蓝牙 SPP"]
end
subgraph sg_SDK["AC792N SDK 产品端"]
subgraph sg_RF["RF_FCC 测试工具"]
RfFccMain["rf_fcc_main.c<br/>命令解析/执行"]
RfFccHdr["rf_fcc_main.h<br/>触发模式配置"]
WifiModule["wifi_moudle.c<br/>MP测试状态管理"]
end
subgraph sg_PT["产测流程"]
AudioPT["音频/通话产测"]
SpkEQ["Speaker EQ 校准"]
AncPT["ANC 调试/产测"]
EncPT["ENC 麦克风阵列校准"]
KeyPT["按键产测 (app_key_dut.c)"]
end
subgraph sg_HW["底层硬件驱动"]
Gpio["GPIO (IO触发)"]
Gpcnt["GPCNT 脉冲计数"]
WifiMac["Wi-Fi MAC/PHY"]
BtMac["蓝牙控制器"]
AdcDac["ADC/DAC 音频通路"]
end
end
FCCBox -->|"FCC协议帧"| UART
PiHat -->|"产测指令"| BT_SPP
PiHat -->|"产测指令"| UART
ThirdParty -->|"SPP/串口指令"| BT_SPP
ThirdParty -->|"SPP/串口指令"| UART
UART --> RfFccMain
BT_SPP --> AudioPT
UART --> AudioPT
RfFccMain --> RfFccHdr
RfFccMain --> WifiModule
RfFccMain --> WifiMac
RfFccMain --> BtMac
AudioPT --> SpkEQ
AudioPT --> AncPT
AudioPT --> EncPT
AudioPT --> KeyPT
AncPT --> AdcDac
EncPT --> AdcDac
SpkEQ --> AdcDac
架构要点:
- RF_FCC 测试链路:
rf_fcc_main.c是命令中枢,解析来自 UART 的 FCC 协议帧,调用 Wi-Fi 射频接口(wf_tx_sine_test、wifi_get_mac等)与蓝牙接口执行测试;wifi_moudle.c维护 MP 测试状态(mp_test_status),用于在测试中随时打断 TX 循环。 - 音频产测链路:蓝牙 SPP/串口接入
AudioPT(音频/通话产测),派生出 Speaker EQ 校准、ANC/ENC 测试与按键产测,全部落到 ADC/DAC 音频通路上。 - 触发机制:产品端通过 GPIO 电平检测或 GPCNT 脉冲计数(10kHz 附近频率)识别产测工装接入,从而进入 RF_FCC 模式,避免误触。
RF_FCC 测试工具详解
RF_FCC 测试工具位于 sdk/apps/common/rf_fcc_tool/(并存在一套扩展版 sdk/apps/common/ext_rf_fcc_tool/),其编译由以下两个配置宏控制:
#if TCFG_RF_FCC_TEST_ENABLE || TCFG_RF_PRODUCT_TEST_ENABLE
Source: rf_fcc_main.c
即只有工程使能了 TCFG_RF_FCC_TEST_ENABLE(RF FCC 测试)或 TCFG_RF_PRODUCT_TEST_ENABLE(射频产测)时,该模块才被编译进固件,避免在正式出货固件中残留测试代码,减小固件体积并降低误入测试模式的风险。
触发模式(进入 RF_FCC 测试的方式)
rf_fcc_main.h 定义了 5 种触发模式,通过 CONFIG_RF_FCC_TRIGGER_MODE 宏选择:
| 宏 | 值 | 含义 |
|---|---|---|
IO_TRIGGER_MODE | 0 | IO 检测触发:产测工装拉高/拉低指定 IO |
GPCNT_TRIGGER_MODE | 1 | 脉冲检测触发:GPCNT 计数检测指定频率脉冲 |
UART_CMD_MODE | 2 | 串口指令触发:上位机发指令进入 |
USER_DEF_MODE | 3 | 用户定义触发:重写 fcc_enter_user_def() 定制 |
AUTO_STARTUP_MODE | 4 | 上电自动进入 RF_FCC 测试模式 |
#define IO_TRIGGER_MODE (0) //"IO检测"方式触发进入RF_FCC测试模式
#define GPCNT_TRIGGER_MODE (1) //"脉冲检测"方式触发进入RF_FCC测试模式
#define UART_CMD_MODE (2) //"串口指令"方式触发进入RF_FCC测试模式
#define USER_DEF_MODE (3) //"用户定义"方式触发进入RF_FCC测试模式
#define AUTO_STARTUP_MODE (4) //上电进入RF_FCC测试模式
#define CONFIG_RF_FCC_TRIGGER_MODE AUTO_STARTUP_MODE //RF_FCC触发方式配置
#define CONFIG_RF_FCC_TRIGGER_IO_PORT IO_PORTC_01 //RF_FCC"IO检测"IO配置
#define CONFIG_RF_FCC_TRIGGER_IO_STATE (1) //RF_FCC"IO检测"IO的状态配置,0:低电平触发,1:高电平触发
#define CONFIG_RF_FCC_TRIGGER_IO_CNT (10) //RF_FCC"IO检测"IO的检测次数
#define CONFIG_RF_FCC_GPCNT_TRIGGER_FREQ_H (11000) //RF_FCC"脉冲检测"频率上限,单位Hz
#define CONFIG_RF_FCC_GPCNT_TRIGGER_FREQ_L (9000) //RF_FCC"脉冲检测"频率下限,单位Hz
#define CONFIG_RF_FCC_GPCNT_TRIGGER_CNT (10) //RF_FCC"脉冲检测"次数
#define CONFIG_RF_FCC_TRIGGER_GPCNT_PORT IO_PORTC_01//RF_FCC"脉冲检测"IO
Source: rf_fcc_main.h
设计意图:
- IO 检测:产线工装通过排针直接拉高/拉低某个 IO,连续检测
CONFIG_RF_FCC_TRIGGER_IO_CNT(10)次有效才进入,用多次采样防止抖动误触发。 - GPCNT 脉冲检测:工装输出 10kHz 附近的脉冲信号(频率上下限 9k~11kHz),利用 GPCNT 硬件计数器检测,频率匹配且计数满 10 次才进入——这是为了防止音频播放等随机信号误触发,只有特定工装才产生该特征频率。
- AUTO_STARTUP_MODE:上电直接进入测试模式,适合把测试固件单独烧录的场景,简化产线操作。
当选择 GPCNT_TRIGGER_MODE 时还会自动打开 TCFG_GPCNT_ENABLE:
#if (CONFIG_RF_FCC_TRIGGER_MODE == GPCNT_TRIGGER_MODE)
#define TCFG_GPCNT_ENABLE
#endif
Source: rf_fcc_main.h
与上位机的通信协议
RF_FCC 测试通过 UART 与上位机(FCC 测试工装)通信,通信串口由 rf_fcc_get_uart() 返回(默认实现可被外部同名函数覆盖,返回 "uart0"/"uart1"/"uart2")。协议帧为定长数组,帧头 0x04 0x0E 为 HCI 风格的事件包,0x01 0xA1 为自定义命令包,最后一个字节为子命令码:
static const u8 FCC_RSP_ARRAY[7] = {0x04, 0x0E, 0x01, 0x01, 0xA1, 0xA2, 0x00};
static const u8 FCC_RSP_FAIL_ARRAY[7] = {0x04, 0x0E, 0x01, 0x01, 0xA1, 0xA2, 0x01};
static const u8 FCC_READY_RSP_ARRAY[7] = {0x04, 0x0E, 0x01, 0x01, 0xA1, 0xA2, 0x02};
static u8 FCC_HEART_RSP_ARRAY[10] = {0x04, 0x0E, 0x04, 0x01, 0xA1, 0xA3, 0x00, 0x00, 0x00, 0x00};
static const u8 FCC_WIFI_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x01};
static const u8 FCC_BT_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x02};
static const u8 FCC_RESET_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x03};
static const u8 FCC_RES_SUCC_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x04};
static const u8 FCC_RES_FAIL_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x05};
static const u8 FCC_BT_DUT_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
static const u8 FCC_BT_BQB_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07};
static const u8 FCC_EXIT_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08};
static const u8 FCC_SET_BT_WIFI_MAC_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x09};
static const u8 FCC_GET_BT_WIFI_MAC_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0A};
static const u8 FCC_SET_BLE_MAC_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0B};
static const u8 FCC_GET_BLE_MAC_ARRAY[10] = {0x01, 0xA1, 0xA2, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0C};
Source: rf_fcc_main.c
协议子命令码含义:
| 子命令码 | 命令 | 方向 |
|---|---|---|
| 0x00 | 测试 PASS 应答 | 产品 → 上位机 |
| 0x01 | 测试 FAIL 应答 | 产品 → 上位机 |
| 0x02 | READY(就绪)应答 | 产品 → 上位机 |
| 0x03 | RESET 复位 | 上位机 → 产品 |
| 0x04 | 结果成功上报 | 产品 → 上位机 |
| 0x05 | 结果失败上报 | 产品 → 上位机 |
| 0x06 | 进入 BT DUT 模式 | 上位机 → 产品 |
| 0x07 | 进入 BT BQB 模式 | 上位机 → 产品 |
| 0x08 | EXIT 退出测试模式 | 上位机 → 产品 |
| 0x09/0x0A | 设置/读取 BT+Wi-Fi MAC | 上位机 → 产品 |
| 0x0B/0x0C | 设置/读取 BLE MAC | 上位机 → 产品 |
此外 FCC_HEART_ARRAY/FCC_READY_ARRAY 构成心跳/就绪握手:0x01 0xA1 0xA3 ... 0x00 为心跳命令,... 0x01 为 READY,用于上位机确认产品端测试固件已就绪。
核心数据结构
struct ctl_params 是 RF_FCC 测试的全局控制块,集中管理通信句柄、发送/接收参数、信号信息和并发同步原语:
struct ctl_params {
int usb_id;
int tx_pid;
u32 rand_num;
u32 total_rx_cnt;
void *uart_hdl;
struct FCC_TX tx_params;
struct FCC_RX rx_params;
struct list_head head;
OS_SEM conn_sem;
OS_SEM cdc_sem;
OS_MUTEX list_mutex;
struct WIFI_SIGN_INFO g_sign_info;
struct rate_info tx_rate_tab[20];
u8 online_flag;
u8 tx_stop_flag;
char sign_ssid[33], sign_pwd[65];
u8 wifi_send_pkg[1564] __attribute__((aligned(4)));
u8 uart_circlebuf[1024] __attribute__((aligned(4)));
char fcc_str[3][8];
s8 ana_pw;
u8 test_mode;
u8 signalling_mode;
} *__THIS;
Source: rf_fcc_main.c
关键字段设计意图:
tx_params/rx_params(FCC_TX/FCC_RX):封装信道、功率、速率、发包数等射频参数,供 Wi-Fi TX/RX 测试使用;conn_sem/cdc_sem/list_mutex:并发原语。conn_sem用于等待连接建立,list_mutex保护发送任务链表,tx_stop_flag用于停止持续发送(npackets=0 时);wifi_send_pkg[1564]:预分配的对齐发送缓冲区,最大支持 1513 字节数据 + 头部,避免测试中动态内存分配导致的不确定时序;uart_circlebuf[1024]:UART 环形缓冲区,用于异步接收上位机命令;signalling_mode:信令模式标志,配合WIFI_SIGN_INFO结构实现 Wi-Fi 信令测试(连接 SSID 后测吞吐)。
rate_info 结构将速率字符串映射为 PHY/MCS 编码,用于 tx_rate_tab[20] 速率表:
struct rate_info {
const char string[6];
u8 phy;
u8 mcs;
};
Source: rf_fcc_main.c
MP 测试状态管理(wifi_moudle.c)
扩展版工具 ext_rf_fcc_tool/wifi_moudle.c 维护一个全局 mp_test_status 状态,Wi-Fi 事件回调通过 WIFI_EVENT_MP_TEST_START/WIFI_EVENT_MP_TEST_STOP 感知 MP 测试的启停:
static u8 mp_test_status;
static void *wifi_dev = NULL;
Source: wifi_moudle.c
case WIFI_EVENT_MP_TEST_START:
puts("|network_user_callback->WIFI_EVENT_MP_TEST_START\n");
case WIFI_EVENT_MP_TEST_STOP:
puts("|network_user_callback->WIFI_EVENT_MP_TEST_STOP\n");
Source: wifi_moudle.c
设计意图:mp_test_status 被 Wi-Fi 发送循环(TX 测试)周期检查,一旦上位机下发停止(wifi_set_mp_test_status(0))就立即退出发送循环;同样地,进入 MP 测试(wifi_set_mp_test_status(1))时 Wi-Fi 驱动会暂停正常的连接管理逻辑,保证射频测试不被协议栈打断——这是量产射频测试稳定性的关键:
void wifi_set_mp_test_status(u8 status)
{
mp_test_status = status;
}
Source: wifi_moudle.c
产测流程(音频/声学)
通用产测(第三方设备)
SDK 支持市面主流第三方产测设备:兆华、美格信、指南测控,通过蓝牙 SPP 或产测串口板接入。产测配置入口位于 SDK 的产测配置页(音频配置 -> 产测配置):
- 音频/通话产测:测试 MIC 频响、算法输出频响等,支持蓝牙 SPP 产测(需要产测设备支持对应指令);
- 音频 bypass 模式:bypass 蓝牙音乐各类音效处理,用于 SpeakerEQ 校准(需要产测设备支持对应指令);
- 麦克风阵列校准:校准双麦 ENC MIC 幅度一致性,需配合音频/通话产测配置使用。
Speaker EQ 校准
由于生产样机喇叭存在一致性差异,需要通过 Speaker EQ 校准喇叭频响。节点添加规则:在 BitWidth Convert 节点之前添加 SpeakerEQ 节点;若流程中没有 BitWidth Convert 节点,则在 DAC 节点之前添加。
注意:自研产测通常会下发音效 bypass 指令,因此需要在产测模式下也添加
SpeakerEQ节点,否则 SpeakerEQ 测试无效。
ANC 调试/产测
- 蓝牙调试/产测(
音频配置 -> ANC配置 -> 蓝牙调试/产测):支持 ANC_DESIGNER、第三方设备蓝牙 SPP 调试/产测; - 串口调试/产测(
音频配置 -> ANC配置 -> 串口调试/产测):支持 ANC_DESIGNER、第三方产测串口板调试/产测。
自研产测(JL π-HAT)
JL 自主研发的产测流程需配合 JL 产测串口板 以及 JL π-HAT 上位机,已支持:SPK 测试及校准(Speaker EQ)、ANC 测试及校准、ENC 测试及校准(麦克风阵列校准)、按键产测。
自研产测必选配置(当前仅支持有 ANC 功能的方案):
音频配置 -> ANC配置 -> 串口调试/产测:用于基础通讯;音频配置 -> 产测配置 -> 音频/通话产测:用于部分命令交互;升级配置 -> 升级选择 -> 测试盒串口升级:复用测试盒相关命令交互;蓝牙配置 -> 经典蓝牙 -> 音量同步:用于控制小机音量。
ENC 产测:支持 ANC MIC 频响测试、双/三麦通话(MIC 频响 + 通话算法输出)、单麦通话(仅 MIC 频响,暂不支持通话算法)。麦克风阵列校准用于校准麦克风与金机的幅度差,支持单/双/三麦校准。
ANC 产测:支持 FF/FB/HYBRID ANC 性能测试及校准,目前与 Speaker EQ 绑定测试。AC700N 仅支持 FF 方案;JL701N 支持 FF、FB、HYBRID 方案。
按键产测:检测逻辑为——获取小机按键表获取产品按键信息,再检测待测样机的按键事件响应来判断按键功能是否正常。按键配置路径为 apps/earphone/tools/app_key_dut.c,可自定义产测按键值与按键表。
核心流程
RF_FCC 射频测试时序
以下序列图展示上位机与产品端在 RF_FCC 测试模式下的典型交互:
sequenceDiagram
participant U as 上位机(产测盒)
participant D as 产品端(rf_fcc_main.c)
participant W as Wi-Fi/蓝牙控制器
Note over U,D: 触发阶段(IO/脉冲/上电)
D->>D: 触发条件满足,进入RF_FCC模式
D-->>U: FCC_READY_RSP (0x04 0x0E ... 0x02)
loop 心跳保持
U->>D: FCC_HEART (0x01 0xA1 0xA3 ...)
D-->>U: FCC_HEART_RSP
end
U->>D: FCC_WIFI (子命令0x01) 进入WiFi测试
D->>W: wifi_fcc_moudle_init / wifi_set_mp_test_status(1)
U->>D: 下发信道/功率/速率参数
D->>W: wifi_tx_data_test(channel, power, rate, ...)
W-->>D: 持续/定次发送完成
D-->>U: FCC_RES_SUCC (0x01 ... 0x04) 或 FCC_RES_FAIL (0x05)
U->>D: FCC_EXIT (子命令0x08) 退出测试
D->>W: wifi_set_mp_test_status(0)
D-->>U: FCC_RSP (PASS)
产测设备交互流程
flowchart TD
Start([产线开始]) --> Trigger{"进入产测模式?"}
Trigger -->|"蓝牙SPP"| SPP["产测设备连SPP"]
Trigger -->|"串口板"| UART["JL产测串口板连接"]
SPP --> Init["初始化产测会话<br/>音量同步/命令交互"]
UART --> Init
Init --> Case{"产测类型?"}
Case -->|"SPK"| SPK["下发音效bypass指令<br/>SpeakerEQ节点生效"]
Case -->|"ANC"| ANC["ANC性能测试及校准<br/>FF/FB/HYBRID"]
Case -->|"ENC"| ENC["MIC频响测试<br/>麦克风阵列校准"]
Case -->|"按键"| Key["读取按键表<br/>检测按键事件响应"]
SPK --> Res{"测试结果?"}
ANC --> Res
ENC --> Res
Key --> Res
Res -->|"PASS"| Pass["记录良品数据"]
Res -->|"FAIL"| Fail["标记不良品"]
Pass --> End([产线下一台])
Fail --> End
使用示例
示例一:Wi-Fi TX 数据测试接口
wifi_tx_data_test() 是 RF_FCC 最核心的发送测试接口,支持指定信道、数字增益、速率、数据内容、发送次数与间隔;npackets=0 表示持续发送直到被停止:
/**
* @brief wifi_tx_data_test,WIFI发送数据测试
*
* @param
* u8 channel :信道(1-13)
* u8 power :数字增益(0-128)
* u8 rate :速率
* u8 *packet :需发送的数据
* u32 packet_len :需发送的数据长度(1-1513)
* u32 npackets :发送次数;设为0,则一直发送
* u32 tx_interval:发送间隔
*
* @note
*/
void wifi_tx_data_test(u8 channel, u8 power, u8 rate, u8 *packet, u32 packet_len, u32 npackets, u32 tx_interval);
Source: rf_fcc_main.h
设计意图:该接口设计为纯参数化调用,上位机只需下发 7 个参数即可完成任意配置的发射测试;npackets=0 的持续发送模式配合 tx_stop_flag/mp_test_status 形成"发-停"机制,用于频谱仪长时间观测或产线快速停止。
示例二:RF_FCC 初始化接口
rf_fcc_test_init() 为测试模块入口,返回初始化结果:
/**
* @brief rf_fcc_test_init,RF_FCC测试初始化
*
* @param
*
* @note
*/
u8 rf_fcc_test_init(void);
Source: rf_fcc_main.h
示例三:自定义扩展钩子
RF_FCC 模块提供三个可被外部同名函数覆盖的钩子,用于适配不同产品的产测流程:
/**
* @brief rf_fcc_get_uart,获取RF_FCC测试的上位机通信串口号
* @note 可在外部定义同名函数,修改返回的通信串口号("uart0"/"uart1"/"uart2")
*/
const char *rf_fcc_get_uart(void);
/**
* @brief fcc_enter_user_def,开机检测是否进入RF_FCC测试
* @note 可在外部定义同名函数,修改触发方式
*/
u8 fcc_enter_user_def(void);
/**
* @brief fcc_res_handler,RF_FCC测试结果处理
* @param res == true, 测试PASS;res == false, 测试FAIL
* @note 可在外部定义同名函数,根据测试结果添加自定义操作
*/
void fcc_res_handler(u8 res);
Source: rf_fcc_main.h
示例四:MP 测试状态查询
Wi-Fi 驱动层通过状态查询接口在发送循环中响应停止指令:
u8 wifi_get_mp_test_status(void)
{
return mp_test_status;
}
Source: wifi_moudle.c
配置选项
RF_FCC 测试配置(rf_fcc_main.h)
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
TCFG_RF_FCC_TEST_ENABLE | bool | 工程配置 | RF_FCC 测试功能总开关 |
TCFG_RF_PRODUCT_TEST_ENABLE | bool | 工程配置 | 射频产测功能总开关 |
CONFIG_RF_FCC_TRIGGER_MODE | enum | AUTO_STARTUP_MODE(4) | 进入测试模式的触发方式(IO/脉冲/串口/用户/上电) |
CONFIG_RF_FCC_TRIGGER_IO_PORT | IO | IO_PORTC_01 | IO 触发方式使用的 IO 口 |
CONFIG_RF_FCC_TRIGGER_IO_STATE | u8 | 1 | IO 触发电平(0:低电平,1:高电平) |
CONFIG_RF_FCC_TRIGGER_IO_CNT | u8 | 10 | IO 触发连续检测次数(防抖动) |
CONFIG_RF_FCC_GPCNT_TRIGGER_FREQ_H | u32 | 11000 | 脉冲触发频率上限(Hz) |
CONFIG_RF_FCC_GPCNT_TRIGGER_FREQ_L | u32 | 9000 | 脉冲触发频率下限(Hz) |
CONFIG_RF_FCC_GPCNT_TRIGGER_CNT | u8 | 10 | 脉冲触发检测次数 |
CONFIG_RF_FCC_TRIGGER_GPCNT_PORT | IO | IO_PORTC_01 | 脉冲检测 IO |
TCFG_GPCNT_ENABLE | bool | 随模式自动使能 | GPCNT 硬件计数使能(仅脉冲模式) |
CONFIG_FCC_BT_ADJ_ENABLE | bool | 开 | 蓝牙功率校准使能 |
RF_FCC_IN_NORNAL_WORK | macro | 开 | 允许在正常工作模式下进行 RF_FCC 测试 |
RF_FCC_MODE_KEEP | macro | 关 | 保持 RF_FCC 模式(注释掉则关闭) |
FCC_USB_COMM | macro | 关 | 使用 USB 与上位机通信(注释掉则关闭) |
产测流程配置
| 配置项 | 入口 | 说明 |
|---|---|---|
| 音频/通话产测 | 音频配置 -> 产测配置 | MIC 频响、算法输出频响测试,支持蓝牙 SPP |
| 麦克风阵列校准 | 音频配置 -> 产测配置 | 双麦 ENC MIC 幅度一致性校准 |
| ANC 蓝牙调试/产测 | 音频配置 -> ANC配置 | ANC_DESIGNER/第三方蓝牙 SPP |
| ANC 串口调试/产测 | 音频配置 -> ANC配置 | ANC_DESIGNER/产测串口板 |
| JL 自研 ANC 产测 | 音频配置 -> 产测配置 | FF/FB/HYBRID 性能测试及校准(与 Speaker EQ 绑定) |
| JL 自研 ENC 产测 | 音频配置 -> 产测配置 | ANC MIC/双三麦/单麦频响测试 |
| 按键产测 | 音频配置 -> 产测配置 | 按键表 + 按键事件响应检测 |
| 测试盒串口升级 | 升级配置 -> 升级选择 | 复用测试盒命令交互(自研产测必选) |
| 音量同步 | 蓝牙配置 -> 经典蓝牙 | 控制小机音量(自研产测必选) |
API 参考
u8 rf_fcc_test_init(void)
RF_FCC 测试初始化入口,在测试模式触发后调用,完成 UART 通信、FCC 协议帧注册与射频模块初始化。
Returns: u8 初始化结果(0 成功/非 0 失败)。
void wifi_tx_data_test(u8 channel, u8 power, u8 rate, u8 *packet, u32 packet_len, u32 npackets, u32 tx_interval)
Wi-Fi 发射测试接口。
Parameters:
channel(u8): 信道,范围 1-13;power(u8): 数字增益,范围 0-128(MAX_DGAIN=128/MIN_DGAIN=0);rate(u8): 发送速率(对应tx_rate_tab[20]速率表索引);packet(u8*): 待发送数据缓冲;packet_len(u32): 数据长度,1-1513;npackets(u32): 发送次数,0 表示持续发送;tx_interval(u32): 发送间隔。
注意: 晶振微调参数 xosc 范围为 0-15(MAX_XOSC/MIN_XOSC),通过 wf_read_xosc/wf_write_xosc 读写。
const char *rf_fcc_get_uart(void)
获取上位机通信串口号。可在外部定义同名函数覆盖,返回 "uart0"/"uart1"/"uart2"。
u8 fcc_enter_user_def(void)
开机检测是否进入 RF_FCC 测试。可在外部定义同名函数修改触发逻辑(USER_DEF_MODE 时使用)。
void fcc_res_handler(u8 res)
测试结果处理回调。res==true 表示 PASS,res==false 表示 FAIL;可在外部定义同名函数添加自定义操作(如点亮产测指示灯、上报产测盒)。
void wifi_set_mp_test_status(u8 status) / u8 wifi_get_mp_test_status(void)
设置/获取 MP 测试状态。进入测试置 1,退出清 0;Wi-Fi 发送循环据此决定是否停止。
失败模式与边界情况
- 触发误判:IO 触发使用 10 次连续采样防抖;脉冲触发用 9k~11kHz 频带 + 10 次计数双重约束,避免音乐播放等随机信号误入测试模式。若现场频繁误触发,应检查
CONFIG_RF_FCC_TRIGGER_IO_STATE电平极性是否与工装一致。 - 持续发送无法停止:
npackets=0持续发送模式下,上位机必须通过FCC_EXIT命令(子命令 0x08)或 Wi-Fi 事件WIFI_EVENT_MP_TEST_STOP置位mp_test_status来打断;若发送循环未检查该标志(如阻塞在硬件发送),需要复位芯片。 - 通信串口不一致:
rf_fcc_get_uart()返回的串口与工装接线必须匹配;不同方案默认串口可能不同,需在外部覆盖实现。 - 协议帧校验:FCC 帧为固定长度定长数组,若上位机发送的帧长度/子命令码不匹配,模块无法识别,不会响应。
struct fcc_info中保留了crc字段(配合asm/crc16.h),用于结果上报时的 CRC 校验。 - 自研产测限制:当前自研产测仅支持有 ANC 功能的方案;单麦通话仅支持 MIC 频响测试,不支持通话算法测试;
AC700N仅支持 FF ANC 方案。 - SpeakerEQ 测试失效:若产测模式下音频流未添加
SpeakerEQ节点(需在产测模式而非仅音乐模式添加),下发音效 bypass 指令后 SpeakerEQ 测试无效。
并发与一致性考虑
struct ctl_params通过OS_SEM conn_sem、OS_SEM cdc_sem与OS_MUTEX list_mutex协调测试任务与命令解析任务,避免并发访问发送任务链表;tx_stop_flag与mp_test_status为跨任务共享标志,发送循环在每个发送间隔内轮询,保证停止命令的响应延迟不超过一个发送间隔;- 发送缓冲区
wifi_send_pkg[1564]静态预分配且 4 字节对齐,避免运行期 malloc 带来的时序抖动,保证射频测试的频谱纯净度。
性能与运维注意事项
- 测试速度:IO/脉冲触发在开机阶段即判定,不阻塞正常启动流程(除
AUTO_STARTUP_MODE);测试帧为定长 7~13 字节,UART 9600/115200 波特率下握手开销极小; - 固件体积:整个 RF_FCC 模块受
TCFG_RF_FCC_TEST_ENABLE || TCFG_RF_PRODUCT_TEST_ENABLE编译开关保护,量产固件关闭后不占用代码空间; - 产线维护:测试结果通过
FCC_RES_SUCC/FCC_RES_FAIL与fcc_res_handler()双重上报,产线系统可据此统计直通率;晶振(xosc)与功率(dgain)校准值建议每台写入 syscfg(syscfg_id.h),保证一致性。
扩展点
- 自定义触发方式:实现
fcc_enter_user_def()并选择USER_DEF_MODE,可接入产线 MES 系统的特定信号; - 自定义通信串口:覆盖
rf_fcc_get_uart()适配不同硬件排线; - 自定义结果处理:覆盖
fcc_res_handler()接入条码打印、不良品标记等产线动作; - 自定义按键产测:编辑
apps/earphone/tools/app_key_dut.c的按键表定义产测按键值与按键名(字符串不超过 14 字符); - 新增射频测试命令:参照
FCC_*_ARRAY协议帧模式扩展子命令码(当前已用到 0x0C,后续子命令从 0x0D 起)。
Related Links
- 产测配置文档(SDK 内置)
- RF_FCC 主实现 rf_fcc_main.c
- RF_FCC 配置与接口 rf_fcc_main.h
- 扩展版 RF_FCC 工具(Wi-Fi 模块)
- 扩展版 RF_FCC 主实现
- 音频 DUT 测试流程(ADC→I2S、I2S→DAC、ADDA 回环):见音频流程相关页面
- 测试盒串口升级:见升级配置相关页面
- 经典蓝牙音量同步:见蓝牙配置相关页面