杰理 SDK 文档中心
首页
首页
  • SDK 概述与入门

    • SDK 总览
    • 支持芯片与蓝牙认证
    • 工程结构导航
  • 开发环境与构建

    • 环境搭建与工具链安装
    • 编译指南与工程选择
    • 烧录与生产工具
  • BLE 透传/数传应用

    • 透传应用框架与处理模块
    • 透传与数传示例
    • 多连接与自定义服务示例
    • FindMy 与查找网络示例
  • HID 人机交互应用

    • 键盘与按键设备示例
    • 鼠标设备示例
    • 遥控器示例
    • HID 蓝牙应用模块
  • 公共 BSP 模块

    • 按键、编码器与红外输入
    • 传感器驱动
    • LED 与显示控制
    • 串口与 USB 通信
    • 存储、参数与时钟
    • 电源与温度管理
    • 消息、内存与系统配置
    • OTA 升级框架
  • 蓝牙协议栈与库

    • BLE 控制器与协议栈适配
    • 经典蓝牙 BR/EDR 支持
    • 第三方蓝牙协议
    • 设备管理框架
    • DUT 测试与射频认证
  • 构建系统与开发工具

    • Makefile 构建系统
    • 固件后处理与配置工具
    • 辅助脚本与库合并
  • 文档与硬件资料

    • AT 命令参考
    • 硬件参考资料
    • SDK 文档与在线资源

DUT 测试与射频认证

本页介绍 fw-AW33N_BLE_SDK 中用于设备测试(DUT,Device Under Test)与射频认证(BQB / FCC / 定频 / 性能测试)的完整机制:测试模式配置、BLE/BREDR DUT 控制 API、定频测试流程以及配套的产测信息上报接口。

Purpose and Scope

本文档覆盖该 SDK 中与射频测试与认证相关的全部软件机制:

  • 经典蓝牙(BREDR)与低功耗蓝牙(BLE)的 DUT(Device Under Test)测试模式
  • 实验室射频认证模式:BQB、FCC、定频(FRE)、性能(PER)测试
  • BLE DUT 测试模块的操作接口(ble_dut_ops_t)与控制类型(BLE_DUT_CTRL_TYPE)
  • 量产产测辅助接口:测试盒信息上报、RX 批量切换、LMP 特性请求等

以下内容属于其他页面范畴,不在本页展开:协议栈运行模式(Controller/Stack 任务调度,参见 btctrler_task.h 的 Task 机制)、音频链路与 TWS 快速连接、普通蓝牙连接的建立与断开流程。

Overview

射频认证(Radio Frequency Certification)是蓝牙产品量产前必须通过的实验室测试,涵盖 BQB(Bluetooth Qualification Body,蓝牙资格认证)、FCC(美国联邦通信委员会认证)、CE 等标准。测试仪器(如 R&S、Anritsu 的蓝牙综测仪)要求被测设备(DUT)进入特殊的测试模式:设备不再执行正常的连接流程,而是响应仪器的测试指令——例如定频发射、接收误码率统计等。

该 SDK 通过 btcontroller_mode.h 中的编译期测试模式宏(BT_NORMAL / BT_BQB / BT_FCC / BT_FRE / BT_PER / BT_QUA)选择固件的默认行为,再配合运行期 API 动态进入/退出 DUT 模式:

  • BREDR DUT:调用 bredr_set_dut_enble(u8 en, u8 phone) 使能后,测试仪器即可链接设备进行经典蓝牙测试
  • BLE DUT:通过 __ble_dut_ops 操作接口(init / ioctrl / exit)设置 RX/TX 模式并结束测试取回误码统计
  • 定频测试:bt_fix_fre_api() / ble_fix_fre_api() 一键进入 2402MHz 最大功率发射模式(用于产线屏蔽箱测试)

关键设计意图:测试代码与正常业务代码共存于同一固件,通过编译期宏裁剪 + 运行期函数调用两种粒度控制,既满足实验室认证(专用测试固件)又满足量产产测(同固件动态切换),避免维护多套工程。

Architecture

下图展示了 DUT 测试与射频认证能力的整体架构:上层应用(产测程序/按键/串口指令)通过两类入口触达底层控制器,控制器再驱动射频硬件进入测试状态。

flowchart TD
    subgraph sg_App["应用层 (App)"]
        App["产测程序 / 按键 / 串口指令"]
    end

    subgraph sg_API["测试入口 API"]
        BredrDut["bredr_set_dut_enble()<br/>BREDR DUT 使能"]
        FixFre["bt_fix_fre_api() / ble_fix_fre_api()<br/>定频测试"]
        BoxApi["bt_testbox_ex_info_get_handle_register()<br/>测试盒信息上报"]
        BulkApi["bredr_bulk_change_rx_bulk()<br/>RX 批量切换"]
    end

    subgraph sg_BLE["BLE DUT 模块 (ble_dut_ops_t)"]
        Ops["__ble_dut_ops"]
        Init["init() 初始化"]
        Ioctrl["ioctrl() 控制"]
        Exit["exit() 退出"]
        CtrlType["BLE_DUT_CTRL_TYPE<br/>RX_MODE / TX_MODE / TEST_END"]
        TxParam["ble_dut_tx_param_t<br/>通道/载荷/PHY"]
        RxParam["ble_dut_rx_param_t<br/>通道/PHY"]
    end

    subgraph sg_Cfg["编译期配置 (btcontroller_mode.h)"]
        Mode["CONFIG_BT_MODE<br/>BT_NORMAL / BQB / FCC / FRE / PER / QUA"]
        Codes["CONFIG_TEST_DUT_CODE<br/>CONFIG_TEST_FCC_CODE<br/>CONFIG_TEST_DUT_ONLY_BOX_CODE"]
    end

    subgraph sg_HW["底层控制器与射频"]
        BREDR["BREDR Controller"]
        BLE["BLE Controller"]
        RF["射频前端 (天线/PA/LNA)"]
    end

    App --> BredrDut
    App --> FixFre
    App --> BoxApi
    App --> BulkApi
    App --> Ops

    Ops --> Init
    Ops --> Ioctrl
    Ops --> Exit
    Ioctrl --> CtrlType
    CtrlType --> TxParam
    CtrlType --> RxParam

    Mode --> BREDR
    Mode --> BLE
    Codes --> Mode
    BredrDut --> BREDR
    FixFre --> BREDR
    FixFre --> BLE
    BulkApi --> BREDR
    BREDR --> RF
    BLE --> RF

架构说明:

  • 应用层:产测程序(通常运行在产测盒/PC 上位机)通过串口或按键事件触发测试入口 API,测试盒信息上报接口 bt_testbox_ex_info_get_handle_register 向仪器侧暴露设备信息(电量、烧录码、SDK 版本等,见 btctrler_task.h 第 80-86 行)。
  • 测试入口 API:BREDR DUT 使能、定频测试、批量 RX 切换等,均为底层控制器向应用导出的薄封装,见 btcontroller_mode.h 第 17-48 行。
  • BLE DUT 模块:以操作接口指针 __ble_dut_ops 形式注册(btctrler_task.h 第 108-141 行),通过 ioctrl 变参函数下发 BLE_DUT_CTRL_TYPE 控制命令,携带 TX/RX 参数结构体。
  • 编译期配置:CONFIG_BT_MODE 决定固件启动后的默认测试姿态,CONFIG_TEST_DUT_CODE / CONFIG_TEST_FCC_CODE 等常量用于裁剪测试代码(btcontroller_modules.h 第 82-85 行)。

测试模式配置(CONFIG_BT_MODE)

测试模式在编译期通过 CONFIG_BT_MODE 宏选定,定义与默认值如下:

宏值用途
BT_NORMAL0x01正常模式(默认),量产测试时通过外部操作动态进入 DUT
BT_BQB0x02实验室 BQB 射频测试固件
BT_FCC0x04实验室 FCC 射频测试固件
BT_FRE0x10定频测试:频点 2402MHz、发射功率最大
BT_PER0x20性能测试:仪器直接连接,测试后需复位/上电恢复
BT_QUA0x40质量(Qualification)相关扩展模式
#define BT_NORMAL      0x01
#define BT_BQB         0x02
#define BT_FCC         0x04
#define BT_FRE         0x10
#define BT_PER         0x20

#define BT_QUA         0x40

#define CONFIG_BT_MODE             BT_NORMAL

Source: btcontroller_mode.h 第 50-58 行

设计意图:不同实验室(BQB/FCC)和产线(FRE/PER)对固件行为的要求互斥——认证测试需要设备上电即保持可被发现、可被仪器链接的"裸"状态;正常量产固件则必须维持完整业务(提示音、TWS、ANC 等)。因此采用编译期宏裁剪,为每个场景构建专用固件,避免运行期复杂的模式切换逻辑干扰测试结果。头文件注释明确警告:

开启测试模式时,uart0、按键等功能默认关闭,特殊情况需自行处理(见 btcontroller_mode.h 第 17-20 行)。

各模式的行为差异

  • BT_BQB / BT_FCC:实验室测试专用,设备上电后直接进入可测试状态,不加载业务逻辑。
  • BT_FRE:定频测试,固定 2402MHz 频点、最大发射功率,用于产线屏蔽箱内的链路校准与天线验证。
  • BT_PER:性能测试,仪器直接连接即可测吞吐/误码;测试完毕后必须复位或重新上电才会恢复正常流程,且不复位时只支持链接一个设备——这是有意设计:PER 固件无需恢复业务,简化实现。
  • BT_NORMAL + 运行期 DUT:量产固件保持 BT_NORMAL,产测程序在适当时机调用 bredr_set_dut_enble() 临时进入 DUT 状态,测完复位即恢复正常——避免为产测维护独立工程。

测试代码裁剪常量

btcontroller_modules.h 声明了一组用于 LTO(链接时优化)裁剪的测试常量:

extern const int CONFIG_TEST_DUT_CODE;
extern const int CONFIG_TEST_FCC_CODE;

Source: btcontroller_modules.h 第 82-83 行

其中 CONFIG_TEST_DUT_CODE、CONFIG_TEST_FCC_CODE、CONFIG_TEST_DUT_ONLY_BOX_CODE 与 CONFIG_BREDR_INQUIRY 配套使用(btcontroller_modules.h 第 84-85 行),用于把 DUT/FCC 相关代码段编入或剔除出最终固件,减小量产固件体积、避免误入测试流程。

BLE DUT 测试模块

BLE DUT 测试通过 struct ble_dut_ops_t 操作接口驱动,接口指针以全局符号 __ble_dut_ops 导出:

struct ble_dut_ops_t {

    /* *****************************************************************************/
    /**
     * @brief :      initialize the ble dut test module
     *
     * @param :       void
     *
     * @return :      pointer to instance of test module
     */
    /* *****************************************************************************/
    void *(*init)(void);

    /* *****************************************************************************/
    /**
     * @brief :        ble dut test control api,such as setting rx/tx mode,stop testing
     *
     * @param :       control type,using enum BLE_DUT_CTRL_TYPE value;
     * @param :       vary from different control type;
     */
    /* *****************************************************************************/
    int (*ioctrl)(int ctrl, ...);

    /* *****************************************************************************/
    /**
     * @brief :       exit the ble dut test module
     *
     * @param :       poniter to instance of test module
     */
    /* *****************************************************************************/
    void (*exit)(void *priv);
};

extern const struct ble_dut_ops_t *__ble_dut_ops;

Source: btctrler_task.h 第 108-141 行

接口语义:

  • init():初始化 BLE DUT 测试模块,返回模块实例指针(priv)。典型实现会停止正常连接、配置测试状态机。
  • ioctrl(ctrl, ...):变参控制接口,这是 DUT 的核心命令通道,ctrl 取 BLE_DUT_CTRL_TYPE 枚举值,后续可变参数随控制类型不同而不同。
  • exit(priv):退出测试模块,释放资源、恢复控制器状态。

控制类型(BLE_DUT_CTRL_TYPE)

enum BLE_DUT_CTRL_TYPE {
    BLE_DUT_SET_RX_MODE = 0,		//param1:struct ble_dut_rx_param_t *param;
    BLE_DUT_SET_TX_MODE,			//param1:struct ble_dut_tx_param_t *param;
    BLE_DUT_SET_TEST_END,			//param1:u16 *pkt_valid_cnt,param2:u16 *pkt_err_cnt;
};

Source: btctrler_task.h 第 102-106 行

三种控制命令构成 BLE DUT 测试的完整生命周期:

  1. BLE_DUT_SET_RX_MODE:进入接收模式。参数为 struct ble_dut_rx_param_t *,设备在指定通道、指定 PHY 上持续监听,统计接收到的测试包。
  2. BLE_DUT_SET_TX_MODE:进入发射模式。参数为 struct ble_dut_tx_param_t *,设备按指定通道、载荷长度/类型、PHY 速率连续发射测试包,供仪器侧做功率/调制/频偏测量。
  3. BLE_DUT_SET_TEST_END:结束测试。通过出参 u16 *pkt_valid_cnt(有效包计数)和 u16 *pkt_err_cnt(错误包计数)取回本次 RX 测试的统计结果,供产测程序计算 PER(Packet Error Rate,误包率)。

TX / RX 参数结构

struct ble_dut_tx_param_t {
    u8 ch_index;	//data[0]
    u8 payload_len;	//data[1]
    u8 payload_type;//data[2]
    u8 phy_type; 	//data[3]
};

struct ble_dut_rx_param_t {
    u8 ch_index;	//data[0]
    u8 phy_type;	//data[1]
};

Source: btctrler_task.h 第 90-100 行

字段与 BLE 测试协议(蓝牙 Core Spec 5.x 的 Direct Test Mode)一一对应:

  • ch_index:RF 通道索引(0-39,对应 2402MHz 起每 2MHz 一个通道)。
  • payload_len:TX 测试包载荷长度(字节)。
  • payload_type:载荷类型(PRBS9 伪随机序列 / 0x00 / 0xFF 等,用于调制质量与误码测试)。
  • phy_type:PHY 速率(1M / 2M / Coded 125k / Coded 500k),对应不同速率等级下的射频指标测试。

BREDR DUT 测试

经典蓝牙 DUT 通过 bredr_set_dut_enble() 动态使能,适用于 BT_NORMAL 量产固件:

调用 void bredr_set_dut_enble(u8 en,u8 phone )
en 1 :使能 bredr dut 测试然后就可以使用仪器链接测试
phone: 1 可以被手机连接,0  不可以被手机连接上

Source: btcontroller_mode.h 第 31-34 行

  • en:使能位。置 1 后仪器可链接设备执行经典蓝牙测试。
  • phone:是否允许被普通手机连接——产测场景通常置 0,避免测试期间被用户设备干扰;需要人机交互验证时置 1。

配套操作:进入 DUT 前,需同时关闭耳机快速链接并开启可发现/可链接,头文件给出标准操作序列(btcontroller_mode.h 第 36-40 行):

tws_cancle_all_noconn() ;          // 取消 TWS 快速连接逻辑
bt_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL);  // 开启可被发现
bt_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL);  // 开启可被连接

该序列保证设备从"耳机业务状态"干净地切换到"裸测试状态",防止 TWS 快速连接、白名单等逻辑拦截仪器的 Inquiry/Page 请求。

定频测试(FRE)

定频测试是产线射频校准的核心手段,SDK 提供两个一键 API:

5、可以调用 void bt_fix_fre_api() 函数实现经典蓝牙定频测试,频点2402,发射功率最大, 调用后不可恢复之前状态,只是用来量产测试,测试完需要复位或重新上电开机!

6、可以调用 void ble_fix_fre_api()函数实现ble定频测试,发射功率最大,

Source: btcontroller_mode.h 第 43-47 行

关键约束(设计意图):定频 API 是"单向"操作——进入后不可恢复,必须复位或重新上电。这是刻意的简化:定频测试只需固定频点最大功率连续发射,不需要完整的协议栈状态机;如果实现可逆切换,反而引入状态残留风险,可能让设备带着错误的射频配置进入市场固件。产测流程天然是"测完即复位",因此单向设计在工程上最安全。

与 BT_FRE 编译期模式的区别:BT_FRE 是上电即定频的专用固件;而 bt_fix_fre_api() / ble_fix_fre_api() 允许 BT_NORMAL 量产固件在运行期被产测程序触发定频,同一固件同时服务"正常出货"与"产线测试"两个阶段。

核心测试流程

BLE DUT 测试流程

下图展示了产测程序驱动 BLE DUT 的完整时序:初始化 → RX/TX 模式 → 结束取统计 → 退出。

sequenceDiagram
    participant TP as 产测程序 (Test Program)
    participant Ops as ble_dut_ops (__ble_dut_ops)
    participant Ctl as BLE Controller
    participant RF as 射频前端

    TP->>Ops: init()
    Ops->>Ctl: 停用正常连接、进入测试状态
    Ctl-->>TP: 返回模块实例 priv

    TP->>Ops: ioctrl(BLE_DUT_SET_RX_MODE, rx_param)
    Ops->>Ctl: 设置通道 ch_index + PHY phy_type
    Ctl->>RF: 进入 RX 监听,统计收包
    TP->>Ops: ioctrl(BLE_DUT_SET_TX_MODE, tx_param)
    Ops->>Ctl: 设置通道/载荷长度/载荷类型/PHY
    Ctl->>RF: 连续发射测试包

    TP->>Ops: ioctrl(BLE_DUT_SET_TEST_END, &valid_cnt, &err_cnt)
    Ctl-->>TP: 返回 pkt_valid_cnt / pkt_err_cnt
    TP->>TP: 计算 PER = err / (valid + err)

    TP->>Ops: exit(priv)
    Ops->>Ctl: 恢复控制器状态、释放资源

流程要点:

  1. init() 必须最先调用,返回的 priv 贯穿后续所有调用。
  2. RX 与 TX 测试通常分两轮进行(仪器分别测量接收灵敏度和发射指标),两者共用 ioctrl 通道。
  3. BLE_DUT_SET_TEST_END 的统计出参是 RX 测试的裁决依据,产测程序据此计算 PER 并与产测阈值比对(如 PER < 2% 判 PASS)。
  4. exit() 负责恢复,避免 DUT 状态泄漏到后续正常使用。

BREDR DUT 进入流程(量产固件)

flowchart TD
    Start([产测程序触发]) --> Op1["tws_cancle_all_noconn()<br/>取消快速连接"]
    Op1 --> Op2["bt_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL)<br/>开启可发现"]
    Op2 --> Op3["bt_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL)<br/>开启可连接"]
    Op3 --> Op4{"bredr_set_dut_enble(1, phone)"}
    Op4 -->|"phone=0"| Op5["仅允许仪器链接"]
    Op4 -->|"phone=1"| Op6["仪器 + 手机均可链接"]
    Op5 --> Test["仪器执行 BQB/FCC/PER 测试"]
    Op6 --> Test
    Test --> End([测试完毕,复位/重新上电恢复正常流程])

该流程明确体现了"业务态 → 测试态"的切换纪律:先解除业务层的连接策略(TWS 快速连接、可发现/可连接标志),再使能 DUT,最后以复位收尾。

使用示例

以下示例均取自本仓库实际源码注释与头文件声明。

示例 1:编译期选择测试模式

固件构建时在 btcontroller_mode.h 中指定测试模式,例如实验室 FCC 认证固件:

#define BT_NORMAL      0x01
#define BT_BQB         0x02
#define BT_FCC         0x04
#define BT_FRE         0x10
#define BT_PER         0x20

#define CONFIG_BT_MODE             BT_NORMAL

Source: btcontroller_mode.h 第 50-58 行

将 CONFIG_BT_MODE 改为 BT_FCC 即构建 FCC 测试固件;量产固件保持 BT_NORMAL 并在运行期调用 DUT API。

示例 2:运行期进入 BREDR DUT(量产固件)

// 1. 先解除业务层策略
tws_cancle_all_noconn() ;
bt_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL);
bt_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL);

// 2. 使能 BREDR DUT,仅允许仪器链接(phone=0)
bredr_set_dut_enble(1, 0);

Source: btcontroller_mode.h 第 36-40 行

示例 3:BLE DUT 控制命令定义

产测程序通过 __ble_dut_ops->ioctrl 下发控制命令,命令类型与参数约定如下:

enum BLE_DUT_CTRL_TYPE {
    BLE_DUT_SET_RX_MODE = 0,		//param1:struct ble_dut_rx_param_t *param;
    BLE_DUT_SET_TX_MODE,			//param1:struct ble_dut_tx_param_t *param;
    BLE_DUT_SET_TEST_END,			//param1:u16 *pkt_valid_cnt,param2:u16 *pkt_err_cnt;
};

Source: btctrler_task.h 第 102-106 行

示例 4:BLE DUT 参数结构(Direct Test Mode 参数映射)

struct ble_dut_tx_param_t {
    u8 ch_index;	//data[0]
    u8 payload_len;	//data[1]
    u8 payload_type;//data[2]
    u8 phy_type; 	//data[3]
};

struct ble_dut_rx_param_t {
    u8 ch_index;	//data[0]
    u8 phy_type;	//data[1]
};

Source: btctrler_task.h 第 90-100 行

示例 5:定频测试一键触发

// 经典蓝牙定频:频点 2402MHz,发射功率最大,不可恢复,测试后需复位
bt_fix_fre_api();

// BLE 定频:发射功率最大
ble_fix_fre_api();

Source: btcontroller_mode.h 第 43-47 行

示例 6:测试盒信息上报注册

产测盒可注册自定义信息获取句柄,仪器侧通过测试盒读取设备状态(电量、烧录码、SDK 版本等):

enum {
    TESTBOX_INFO_VBAT_VALUE = 0,	//(u16 (*handle)(void))
    TESTBOX_INFO_VBAT_PERCENT,		//(u8 (*handle)(void))
    TESTBOX_INFO_BURN_CODE,			//(u8 *(*handle)(u8 *len))
    TESTBOX_INFO_SDK_VERSION,		//(u8 *(*handle)(u8 *len))
};

void bt_testbox_ex_info_get_handle_register(u8 info_type, void *handle);

Source: btctrler_task.h 第 80-86 行

各信息类型的句柄签名(注释所示):VBAT 值返回 u16 毫伏、电量百分比返回 u8、烧录码与 SDK 版本返回 u8* 缓冲并通过 len 出参告知长度。

Configuration Options

以下配置项全部位于 apps/include_lib/bt_controller_include/ 下的头文件中,属编译期配置(修改后需重新编译固件)。

配置项类型默认值说明
CONFIG_BT_MODE宏BT_NORMAL (0x01)固件默认测试模式,见 btcontroller_mode.h 第 58 行
CONFIG_TEST_DUT_CODEconst int由构建配置决定DUT 测试代码段裁剪开关,见 btcontroller_modules.h 第 82 行
CONFIG_TEST_FCC_CODEconst int由构建配置决定FCC 测试代码段裁剪开关,见 btcontroller_modules.h 第 83 行
CONFIG_TEST_DUT_ONLY_BOX_CODEconst int由构建配置决定仅测试盒(无仪器直连)场景的 DUT 代码裁剪,见 btcontroller_modules.h 第 84 行
CONFIG_BREDR_INQUIRYconst int由构建配置决定BREDR Inquiry(发现)功能裁剪,见 btcontroller_modules.h 第 85 行
CONFIG_BLE_HRATE_FEATURE宏0BLE 高速率特性:CONFIG_BLE_HRATE_4K (1<<1) / CONFIG_BLE_HRATE_8K (1<<2),载荷 5 字节,见 btcontroller_mode.h 第 63-68 行
CONFIG_BLE_CS_EN宏0BLE Channel Sounding 使能(测距特性),见 btcontroller_mode.h 第 73 行
CONFIG_BLE_VADV_EN宏0BLE VADV(可变广告)使能,见 btcontroller_mode.h 第 75 行

说明:CONFIG_TEST_*_CODE 系列为 extern const int 声明,实际值由各工程构建脚本/配置头决定,用于链接期常量折叠(LTO)裁剪测试代码。CONFIG_BLE_HRATE_FEATURE、CONFIG_BLE_CS_EN、CONFIG_BLE_VADV_EN 与射频测试模式无关,但同为 btcontroller_mode.h 提供的特性开关,此处一并列出便于查阅。

API Reference

BREDR DUT

void bredr_set_dut_enble(u8 en, u8 phone)

使能/关闭经典蓝牙 DUT 测试模式。

参数:

  • en (u8):1 使能 DUT(仪器可链接测试);0 关闭。
  • phone (u8):1 允许被手机连接;0 不允许被手机连接。

说明: 适用于 BT_NORMAL 量产固件运行期进入 DUT;进入前需先调用 tws_cancle_all_noconn() 并开启可发现/可连接(bt_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE / USER_CTRL_WRITE_CONN_ENABLE, 0, NULL))。

Source: btcontroller_mode.h 第 31-40 行

void bt_fix_fre_api(void)

经典蓝牙定频测试:固定频点 2402MHz、最大发射功率。单向操作,调用后不可恢复,测试完需复位或重新上电。

Source: btcontroller_mode.h 第 43-44 行

void ble_fix_fre_api(void)

BLE 定频测试:最大发射功率发射。

Source: btcontroller_mode.h 第 46 行

BLE DUT 模块(__ble_dut_ops)

全局符号 extern const struct ble_dut_ops_t *__ble_dut_ops(btctrler_task.h 第 141 行),指向控制器实现的 DUT 操作集。

void *(*init)(void)

初始化 BLE DUT 测试模块。

返回: 模块实例指针 priv,供后续 exit 使用。

int (*ioctrl)(int ctrl, ...)

BLE DUT 控制命令通道(变参)。

参数:

  • ctrl (int):BLE_DUT_CTRL_TYPE 枚举值:
    • BLE_DUT_SET_RX_MODE (0):后续参数 struct ble_dut_rx_param_t *param
    • BLE_DUT_SET_TX_MODE (1):后续参数 struct ble_dut_tx_param_t *param
    • BLE_DUT_SET_TEST_END (2):后续参数 u16 *pkt_valid_cnt、u16 *pkt_err_cnt(出参,返回统计结果)

返回: int,0 表示成功,非 0 表示失败。

Source: btctrler_task.h 第 102-129 行

void (*exit)(void *priv)

退出 BLE DUT 测试模块。

参数:

  • priv (void*):init() 返回的模块实例。

Source: btctrler_task.h 第 131-138 行

产测辅助接口

void bt_testbox_ex_info_get_handle_register(u8 info_type, void *handle)

注册测试盒信息获取句柄。

参数:

  • info_type (u8):TESTBOX_INFO_* 枚举:
    • TESTBOX_INFO_VBAT_VALUE (0):电池电压,句柄签名 u16 (*handle)(void)
    • TESTBOX_INFO_VBAT_PERCENT (1):电量百分比,句柄签名 u8 (*handle)(void)
    • TESTBOX_INFO_BURN_CODE (2):烧录码,句柄签名 u8 *(*handle)(u8 *len)
    • TESTBOX_INFO_SDK_VERSION (3):SDK 版本,句柄签名 u8 *(*handle)(u8 *len)
  • handle (void*):对应类型的回调函数指针。

Source: btctrler_task.h 第 80-86 行

u8 bredr_bulk_change_rx_bulk(u8 mode)

BREDR 批量数据接收模式切换(bulk 模式,用于高速批量吞吐测试)。

参数:

  • mode (u8):目标 bulk 模式。

返回: u8,切换结果状态。

Source: btctrler_task.h 第 87 行

void lmp_set_features_req_step(u8 *addr)

按步骤发送 LMP features request(用于 BREDR 特性协商测试,配合认证仪器验证 Feature 位图)。

参数:

  • addr (u8*):目标设备 BD 地址。

Source: btctrler_task.h 第 88 行

故障模式、边界情况与并发

故障模式

故障场景表现处理方式(源码依据)
BT_PER 测试后不复位只支持链接一个设备,流程不恢复头文件明确要求"测试完毕后需要复位或者上电开机才会恢复正常流程"(btcontroller_mode.h 第 28-29 行),属有意设计,产测程序须在 PER 用例后主动复位
定频后直接出货设备固定 2402MHz 最大功率发射,射频指标异常、功耗异常bt_fix_fre_api() / ble_fix_fre_api() 不可恢复,仅限产线使用;出货前必须重新烧录 BT_NORMAL 固件并复位(btcontroller_mode.h 第 43-44 行)
测试模式占用外设开启测试模式时 uart0、按键等功能默认关闭头文件注释明确警告"请看特殊情况自行处理"(btcontroller_mode.h 第 18-19 行),量产固件需评估 uart0 日志等功能的可用性
BLE 测试串口冲突测试串口默认使用 USB 口,若 USB 被其他功能占用则测试指令无法下发"ble 测试串口默认使用usb口,代码要确保usb口没有其他地方使用"(btcontroller_mode.h 第 17-18 行)

边界情况

  • BREDR DUT 进入顺序:必须先执行 tws_cancle_all_noconn() 与可发现/可连接开启,再调用 bredr_set_dut_enble()。顺序颠倒会导致 TWS 快速连接/白名单拦截仪器请求,测试超时。
  • BLE DUT 生命周期:BLE_DUT_SET_RX_MODE / BLE_DUT_SET_TX_MODE 是互斥状态,切换前应先 BLE_DUT_SET_TEST_END 结束当前测试并取回统计;BLE_DUT_SET_TEST_END 的两个出参指针不可为 NULL,否则统计结果丢失。
  • 参数取值域:ble_dut_tx_param_t / ble_dut_rx_param_t 的 ch_index 应为 0-39(BLE 通道)、phy_type 应匹配控制器支持的 PHY;越界值行为未在头文件中定义,产测程序应使用仪器侧标准的 Direct Test Mode 参数。
  • phone 参数语义:phone=1 时仪器与手机均可连接,测试结果易受普通手机干扰,仅用于需要手机交互的验证场景。

并发与状态一致性

  • DUT 测试模块与正常蓝牙连接流程互斥:进入 DUT 前必须停用正常连接行为(USER_CTRL_WRITE_SCAN_ENABLE / USER_CTRL_WRITE_CONN_ENABLE 配合 tws_cancle_all_noconn()),从源头避免连接事件与测试状态竞争。
  • 测试期间若设备收到用户按键等业务事件,测试模式固件默认关闭相关功能(uart0/按键),降低并发面;BT_NORMAL 量产固件则依赖产测程序保证测试窗口内无业务干扰。
  • __ble_dut_ops 为全局 const 指针,模块初始化(init)在控制器任务上下文中执行,ioctrl 调用应由同一任务串行发起;多任务并发调用 ioctrl 可能破坏测试状态机(头文件未提供加锁语义,调用方需自行保证串行)。

性能与运维考虑

  • 测试吞吐:bredr_bulk_change_rx_bulk() 提供 BREDR 批量接收模式切换,用于高速吞吐测试场景;批量模式下接收路径绕过常规流控,吞吐量更高,但仅限测试态使用。
  • 固件体积:CONFIG_TEST_DUT_CODE / CONFIG_TEST_FCC_CODE / CONFIG_TEST_DUT_ONLY_BOX_CODE 借助 LTO 常量折叠裁剪测试代码——量产固件可剔除 DUT/FCC 代码段以减小 ROM 占用并杜绝误入测试态;认证固件则保留完整测试代码。
  • 产线节拍:定频 API 的单向设计(免恢复)与 PER 后的强制复位约定,都是为了简化产线自动化:每个工位的测试序列以"烧录→测试→复位"为单位,状态天然清零,无需运行期复杂的模式恢复逻辑。
  • 可追溯性:bt_testbox_ex_info_get_handle_register 支持上报烧录码与 SDK 版本,产测系统可在测试日志中记录每台设备的固件版本与烧录信息,便于射频指标溯源与不良品分析。

扩展点

  1. 新增测试信息类型:在 TESTBOX_INFO_* 枚举后追加新枚举值,并调用 bt_testbox_ex_info_get_handle_register 注册对应句柄,即可向测试盒暴露自定义设备信息(如温度、校准参数)。
  2. 自定义 BLE DUT 行为:struct ble_dut_ops_t 是接口抽象(btctrler_task.h 第 108-139 行),可通过替换 __ble_dut_ops 指向的实现扩展控制类型(在 BLE_DUT_CTRL_TYPE 中追加枚举),例如增加载波驻留时间、功率步进等产测专属命令。
  3. 特性开关组合:CONFIG_BLE_HRATE_FEATURE(4K/8K)、CONFIG_BLE_CS_EN、CONFIG_BLE_VADV_EN 提供 BLE 特性级裁剪(btcontroller_mode.h 第 63-75 行),认证固件可按被测特性组合开启,量产固件保持关闭。
  4. 产测触发方式:BT_NORMAL 固件可通过按键、串口指令、产测盒 IO 等多种外部方式调用 bredr_set_dut_enble() / bt_fix_fre_api() / ble_fix_fre_api() 进入测试态,触发源由应用层自由接入。

相关链接

  • btcontroller_mode.h — 测试模式宏与 DUT 使用说明
  • btctrler_task.h — BLE DUT 操作接口与参数结构
  • btcontroller_modules.h — 测试代码裁剪常量
  • 控制器任务调度与模块注册机制:参见控制器任务相关页面(btctrler_task.h 任务模块定义)
  • 蓝牙连接流程与 TWS 快速连接:参见连接管理相关页面(本页 DUT 流程依赖的 tws_cancle_all_noconn() / bt_cmd_prepare() 属连接管理能力)
  • 产测烧录与量产流程:参见量产工具与烧录相关页面
Prev
设备管理框架