蓝牙 SDK 产测

更新时间:2022-11-24 09:20:12下载pdf

蓝牙设备接入到 涂鸦 IoT 开发平台 前,您需要预先烧录授权信息,保障一机一密。本文介绍了如何对使用涂鸦蓝牙 SDK 开发的设备进行产测,包含烧录授权信息以及其他生产测试过程中的相关说明和注意事项。

概述

在工厂生产时,需要对每个蓝牙设备进行烧录授权以及测试,您可以使用涂鸦产测工具,也可以批量购买授权码清单并使用自定义的协议和接口管理授权及测试。

客户自行管理授权信息

涂鸦提供授权码清单,涂鸦蓝牙 SDK 不管理 License,客户需使用自定义的接口接收并管理授权信息,蓝牙 SDK 需要按以下配置进行设置:

#define TUYA_BLE_DEVICE_AUTH_SELF_MANAGEMENT 0

如果使用以上配置,应用程序需要在初始化 蓝牙 SDK 时传入各种参数 信息。详情可参考 SDK 移植。并在收到绑定时,SDK 发送的 login keyVIDbound flag 时安全存储到 NV 中。

注意:该方案常适用于已有成熟生产管理体系的客户,客户通常会将授权码清单数据导入自己的生产系统,并使用自研上位机及生产协议,将授权信息传入设备。

涂鸦蓝牙 SDK 管理授权信息

我们建议您使用 涂鸦产测工具 进行授权和测试,相关的授权和测试步骤涂鸦蓝牙 SDK 已大同。如果您采用此种方式,请关注本章内容,并按以下配置设置蓝牙 SDK:

#define TUYA_BLE_DEVICE_AUTH_SELF_MANAGEMENT 1

注意:使用涂鸦产测工具授权蓝牙设备时,固件中蓝牙初始化函数传入的参数 use_ext_license_keydevice_id_len 必须为0。关于初始化函数详情,请见API

产测分类

产测分为 通用产测授权通用整机产测通用整机产测协议通用产测授权协议 的子集。

  • 通用产测授权 主要包括烧录授权信息、GPIO 测试以及 RSSI 测试。
  • 通用整机产测 包含产品定制附加的一些测试,具体协议格式请参考《蓝牙通用产测授权协议》和《蓝牙通用整机产测协议》,联系涂鸦项目对接人获取。

蓝牙 SDK 已实现了 通用产测授权 的协议,但是 RSSI 测试(被测设备扫描特定的信标)、GPIO 测试、以及基于 通用整机产测协议 的产品附加项目测试需要根据产品定义实现。

蓝牙 SDK 中 tuya_ble_app_production_test.c 源文件中已对这几项测试预留了对应接口,都是以 __TUYA_BLE_WEAK 定义的弱实现,您的应用程序只需要在其他的源文件中重新定义这几个函数即可,并在自定义配置文件中引用。

通用产测授权

通用产测授权包括烧录授权信息、GPIO 测试和 RSSI 测试。

烧录授权信息

蓝牙 SDK 已经集成烧录授权信息功能模块,使用规定的配置,固件代码运行后,即可使用涂鸦产测工具对芯片进行授权信息写入操作,授权信息的存储及管理均由涂鸦蓝牙 SDK 负责,无需您进行额外的处理。

#define TUYA_BLE_DEVICE_AUTH_SELF_MANAGEMENT 1

同时,蓝牙 SDK 也预留了 GPIO 测试和 RSSI 测试接口,用户只需要根据所选的芯片以及产品本身的特性具体实现。

GPIO 测试

GPIO 测试主要测试 PCBA 是否有虚焊、漏焊问题,您的应用程序需要自定义测试方法。tuya_ble_app_production_test.c 文件中对 GPIO 测试预留的接口为:

__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_prod_gpio_test(void)
{
    return TUYA_BLE_SUCCESS;
}

该函数需要您的应用程序实现,但是不能直接修改该函数,而是需要在其他地方实现。

若产测工具开启了 GPIO 测试,在使用涂鸦产测工具产测时,上位机会通知设备进行 GPIO 测试,固件依照您事先实现的测试逻辑进行 GPIO 测试,并返回该测试内容的状态,测试结果会反应在涂鸦产测工具的界面上。

RSSI 测试

RSSI 测试主要测试设备的射频信号强度是否达标。首先您需要制作一个信标(Beacon)持续广播,广播内容无特殊要求,只要被测设备扫描时能识别到即可。

tuya_ble_app_production_test.c 文件中对 RSSI 测试预留的接口为:

__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_prod_beacon_scan_start(void)
{
    return TUYA_BLE_SUCCESS;
}

__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_prod_beacon_scan_stop(void)
{
    return TUYA_BLE_SUCCESS;
}

__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_prod_beacon_get_rssi_avg(int8_t *rssi)
{
    *rssi = -20;
    return TUYA_BLE_SUCCESS;
}

以上三个函数需要您的应用程序实现。但是不能直接修改该函数,而是需要在其他地方实现。

  • tuya_ble_prod_beacon_scan_start:主要实现开始定时扫描制作的信标,并获取其中每一次扫描到的 RSSI 值。

  • tuya_ble_prod_beacon_scan_stop:主要是停止扫描,并计算获取到的所有 RSSI 值的平均值。

  • tuya_ble_prod_beacon_get_rssi_avg:返回 RSSI 平均值。

测试接口实现示例

本小节假设您新建了 custom_app_product_test.ccustom_app_product_test.h 文件,并在 custom_app_product_test.c 中编写测试代码,如下所示:

tuya_ble_status_t tuya_ble_prod_beacon_scan_start(void)
{
    //
    return TUYA_BLE_SUCCESS;
}

tuya_ble_status_t tuya_ble_prod_beacon_scan_stop(void)
{
    //
    return TUYA_BLE_SUCCESS;
}

tuya_ble_status_t tuya_ble_prod_beacon_get_rssi_avg(int8_t *rssi)
{
    //
    *rssi = -30;
    return TUYA_BLE_SUCCESS;
}

tuya_ble_status_t tuya_ble_prod_gpio_test(void)
{
    //Add gpio test code here
    return TUYA_BLE_SUCCESS;
}

注意:以上片段中不要添加 __TUYA_BLE_WEAK 声明,同时需要在 custom_app_product_test.h 中添加函数声明。

#ifndef CUSTOM_APP_PRODUCT_TEST_H_
#define CUSTOM_APP_PRODUCT_TEST_H_


#ifdef __cplusplus
extern "C" {
#endif

#include "tuya_ble_type.h"

tuya_ble_status_t tuya_ble_prod_beacon_scan_start(void);

tuya_ble_status_t tuya_ble_prod_beacon_scan_stop(void);

tuya_ble_status_t tuya_ble_prod_beacon_get_rssi_avg(int8_t *rssi);

tuya_ble_status_t tuya_ble_prod_gpio_test(void);

void tuya_ble_custom_app_production_test_process(uint8_t channel,uint8_t *p_in_data,uint16_t in_len);

#ifdef __cplusplus
}
#endif

#endif // 

最后,在您的应用程序中定义的 config 文件中添加宏定义:

#define CUSTOMIZED_TUYA_BLE_APP_PRODUCT_TEST_HEADER_FILE "custom_app_product_test.h"

通用整机产测

除了烧录授权信息、GPIO 测试、RSSI 测试外,您也可以基于涂鸦的测试协议和测试工具定义其他测试项目,蓝牙 SDK 同样预留了自定义测试项目接口。

tuya_ble_app_production_test.c 文件中对自定义测试项目预留的接口如下所示:

__TUYA_BLE_WEAK void tuya_ble_custom_app_production_test_process(uint8_t channel,uint8_t *p_in_data,uint16_t in_len)
{
    uint16_t cmd = 0;
    uint8_t *data_buffer = NULL;
    uint16_t data_len = ((p_in_data[4]<<8) + p_in_data[5]);
    
    if((p_in_data[6] != 3)||(data_len<3))
        return;
    
    cmd = (p_in_data[7]<<8) + p_in_data[8];
    data_len -= 3;
    if(data_len>0)
    {
        data_buffer = p_in_data+9;
    }
    
    switch(cmd)
    {   
        default:
            break;
    };    
}

自定义测试项目需要基于 蓝牙通用整机产测协议 定义测试指令码,请联系涂鸦项目负责人获取 PC 端定制测试工具软件或者自行开发。

产测工具

目前使用涂鸦产测工具软件烧录授权设备,需要在 涂鸦 IoT 开发平台 创建一款蓝牙产品,上传固件后下单获取授权码。除此之外,您还需要申请产测工具账号,产测工具使用方法请参考 产测工具介绍及下载