前言¶
本文档详细的描述了BS2X各种场景下功率调整方式以及具体的操作指导,同时提供了常见的注意事项。
本文档主要适用于以下工程师:
技术支持工程师
软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
更新“BLE广播参数结构”小节内容。 |
||
更新“定制化NV结构”小节内容。 |
||
更新“定制化NV结构”小节内容。 |
||
射频功率配置说明¶
产线TX测试功率¶
BLE/SLE GFSK TX¶
功率档位说明¶
BS2X BLE/SLE GFSK定义了0~5一共6个功率档位,最大档位是5档,默认为6dBm。每往下一档递减2dB。
说明: 产测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。
测试模式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
]
]
},
目前已使用的字节如下:
|
||
例如:修改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);
使用实例:
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);
使用实例:
写入默认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。





