前言

概述

本文档详细的描述了BS2X各种场景下功率调整方式以及具体的操作指导,同时提供了常见的注意事项。

读者对象

本文档主要适用于以下工程师:

  • 技术支持工程师

  • 软件开发工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修改记录

文档版本

发布日期

修改说明

04

2025-08-07

更新“BLE广播参数结构”小节内容。

03

2025-01-14

更新“定制化NV结构”小节内容。

02

2024-09-13

更新“定制化NV结构”小节内容。

01

2024-05-22

第一次正式版本发布。

射频功率配置说明

产线TX测试功率

BLE/SLE GFSK TX

功率档位说明

BS2X BLE/SLE GFSK定义了0~5一共6个功率档位,最大档位是5档,默认为6dBm。每往下一档递减2dB。

档位

参数描述

5

6dBm

4

4dBm

3

2dBm

2

0dBm

1

-2dBm

0

-4dBm

说明: 产测BLE测试模式常发(非信令)的功率为上电默认的最大功率档位,只能通过配置“最大功率”修改(详见“定制化最大功率”),不能通过指令参数调整功率档位。

测试模式SLE GFSK调制的功率调整可通过修改AT指令第二个参数实现。

1M GFSK测试模式TX:

AT+SLETX=0,5,255,0,0,0,0,0,0,50

第二个参数为5,说明此时发射功率为最大档6dBm。

SLE PSK TX

功率档位说明

BS2X SLE PSK定义了0~5共6个功率档位,最大档位是5档,默认为2dBm。每往下一档递减2dB。

档位

参数描述

5

2dBm

4

0dBm

3

-2dBm

2

-4dBm

1

-6dBm

0

-8dBm

测试模式SLE PSK 调制的功率调整可通过修改AT指令第二个参数实现。

1M QPSK测试模式TX:

AT+SLETX=0,5,255,0,0,2,2,3,2,50

第二个参数为5,说明此时发射功率为最大档2dBm。

phy和帧类型、导频、编码等参数配置请参见《BS2XV100 射频 AT测试指南》。

定制化最大功率

NV存储定制化功率

由于产品特性差异,sdk开发者可根据需求修改BLE TX和SLE TX信号的最大功率,修改后,产线测试和商用版本实际业务场景的最大功率将被定制化,即最大档位(5档)的实际功率变为定制化的功率,之后的4-0档依次递减2dB。

由于实际影响功率的寄存器配置会在下电后清零,因此需要把功率配置保存在非易失性内存(Non-Volatile Memory)中。

注意:通过修改NV配置最大功率影响整个芯片的射频TX,即包括产线测试的TX信号强度和实际业务的最大档位发射信号强度。

NV介绍

NV全称Non-Volatile Memory ,即非易失性内存。BS2X的NV是一块flash memory。

定制化NV结构

#define BTH_BLE_NV_RESERVED_ID 0xE

NV结构体使用预留的ID为0xE的结构

typedef struct {            /* Keys that indexes by addr */
    uint8_t reserve[BTH_BLE_RESERVE_LEN];
} bth_ble_nv_reserved_struct_t;
"bth_reserve_struct": {
    "key_id": "0xE",
    "key_status": "alive",
    "structure_type": "bth_ble_nv_reserved_struct_t",
    "attributions": 1,
    "value": [
    [
    01, 02, 63, 24, 36, 0, 8, 05, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]
    ]
},

目前已使用的字节如下:

序号

字节偏移

含义解释

1、2

0~1 Byte

定制化使能flag,

  • bit[0]:BLE、SLE GFSK功率enable。
  • bit[1]:SLE PSK功率enable。

3

2 Byte

BLE、SLE GFSK最大功率

取值范围:[-12, 6] 单位:dBm

*高功率场景:配置7或8,实际功率可达到8dBm左右。

4

3 Byte

SLE PSK 最大功率

取值范围:[-16, 2] 单位:dBm

注意:高功率场景:BLE字段配置7或8,SLE实际功率可达到4dBm左右。(SLE字段不需要修改,默认2dBm)

例如:修改BLE和SLE GFSK调制信号的功率最大值为2dBm(默认最大6dBm),以及修改SLE PSK调制的最大功率为-2dBm(默认最大2dBm)需要修改以下几点:

  • 第三字节的6改为2(十进制),第四字节2改为-2(十进制,负数直接写-号)。

  • 第一字节的bit[0]写1,即使能BLE功率的配置;bit[1]写1,即使能SLE PSK调制的功率配置,合起来,第一字节的低两bit位拉高,即0b00000011,第一字节写成3(十进制)。

注意:以上两个修改缺一不可,通过接口修改NV时,也需要修改第一字节的flag标志位。

NV的读写

NV只能根据结构体ID整块读写,不能单独读取几个字节。 写NV时需要先整块读出,可根据偏移修改部分内容后写回。

读NV接口

errcode_t uapi_nv_read(uint16_t key, uint16_t kvalue_max_length, uint16_t *kvalue_length, uint8_t *kvalue);

uapi_nv_read

读取指定NV数据项的值,默认不获取key的属性值。

key

要读取的NV项的key ID,用于索引。

kvalue_max_length

允许存储数据的最大长度,单位:Byte。

*kvalue_length

实际读取到的数据长度(读取以四字节对齐)。

*kvalue

指向保存读取数据的buffer的指针。

使用实例:

uint16_t key = TEST_KEY;
uint16_t key_len= test_len;
uint16_t real_len= 0;
uint8_t *read_value = uapi_malloc(key_len);
if (uapi_nv_read(key, key_len, &real_len, read_value) != ERRCODE_SUCC) {
    /* ERROR PROCESS */
    uapi_free(read_value);
    return ERRCODE_FAIL;
}
/* APP PROCESS */
uapi_free(read_value);
return ERRCODE_SUCC;

写NV接口

errcode_t uapi_nv_write(uint16_t key, const uint8_t *kvalue, uint16_t kvalue_length);

uapi_nv_write

写入NV数据项,默认属性Normal,无回调函数。

key

要写入的NV项的key ID,用于索引。

*kvalue

指向要写入的NV项的值的指针。

kvalue_length

写入数据的长度,单位:Byte。

使用实例:

写入默认Normal类型NV。

uint8_t *test_nv_value;  /* 要写入的NV value保存在test_nv_value中 */
uint32_t test_len = 15;  /* 长度为test_len ,例中为15*/
uint16_t key = TEST_KEY; /* TEST_KEY 为该Key的ID*/
uint16_t key_len= test_len;
uint8_t *write_value = uapi_malloc(key_len);
(void)memcpy_s(write_value, key_len, test_nv_value, key_len);
errcode_t nv_ret_value = uapi_nv_write(key, write_value, key_len);
if (nv_ret_value != ERRCODE_SUCC) {
    /* ERROR PROCESS */
    uapi_free(wrt_value);
    return ERRCODE_FAIL;
}
/* APP PROCESS */
uapi_free(wrt_value);
return ERRCODE_SUCC;

应用NV配置

上电时,调用读NV接口把功率配置读出,配置到实际生效的寄存器中,应用代码sdk不可见。

RT201 FEM 配置说明

说明: 本章仅供前端使用RT201型号的FEM模组的产品参考。

NV结构参见“定制化NV结构”章节。

其中控制RT201 FEM使能的字节为第7个字节,写1表示版本带FEM配置。

除了修改app.json , 还提供AT指令”AT+FEMENABLE=1” ”AT+FEMENABLE=0”来使能和关闭FEM配置,AT指令发送后需重新上下电生效。

Sample广播功率

SDK开发sample时,需要手动配置广播参数,其中广播功率的大小也可以通过参数配置。

SLE广播

SLE广播参数结构

如图announce_tx_power为广播功率参数,取值范围[20,-127]。

说明: 取值范围的单位是dBm,实际广播发送功率最大值取决于第二章定制化最大功率的配置,如果没有定制,则默认为6dBm。

广播功率配置

实际功率档位为当前配置的功率向下最接近的档位功率。

例如:announce_tx_power配置为18,实际发出的广播功率就是最大档位6dBm。如果配置的值小于-4,则直接返回0,也就是最低档位,实际发出功率为-4dBm。

BLE广播

BLE广播参数结构

实际功率档位为当前配置的功率向下最接近的档位功率。

例如:tx_power配置为10,实际发出的广播功率则为最大档位6dBm。如果配置的值小于-4,则直接返回0,也就是最低档位,实际发出功率为-4dBm。