nRF 广播 扫描 long range 相关

 

Long Range是BLE 5.0 新增加的特性,能够增加蓝牙的通信距离。nRF52系列中,52840支持Long Range,52832不支持。一般工程增加Long Range支持需要做如下修改。

 

设置 扫描/广播 功率为8 dBm

设置 扫描/广播 PHY为BLE_GAP_PHY_CODED

 

因为Long Range的广播与普通BLE广播不兼容,所以广播、扫描双方必须都设置为Long Range。

 

BLE Central:

在 scan_init() 函数中,增加对 phy 的设置

#ifdef BLE_LONG_RANGE
static ble_gap_scan_params_t m_scan_param =
{
    .active = 0x01,
    .extended = 0x01, // Must be set 1, when in long range.
    .interval = 160,
    .window = 160,
    .timeout = 0x0000, // No timeout.
    .scan_phys = BLE_GAP_PHY_CODED, // Set phy.
    .filter_policy = BLE_GAP_SCAN_FP_ACCEPT_ALL,
};

init_scan.p_scan_param = &m_scan_param;
#endif

在 scan_start() 函数中,增大信号发送功率。

#define RADIO_TX_POWER 8 /**< Radio TX power in dBm. Default to 8dBm, see product spec for valid range */

ret_code_t err_code;

err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_SCAN_INIT, BLE_CONN_HANDLE_INVALID, RADIO_TX_POWER);
APP_ERROR_CHECK(err_code);

连接成功后,增大信号发射功率。

增大信号发射功率函数 sd_ble_gap_tx_power_set ,可设置三种状态的发射功率:广播状态、扫描状态、连接状态。所以连接后,主从机都需调用函数,增大信号发射功率。

蓝牙连接事件,在 ble_evt_handler() 回调函数,BLE_GAP_EVT_CONNECTED事件。

ret_code_t err_code;

err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_CONN, BLE_CONN_HANDLE_INVALID, RADIO_TX_POWER);
APP_ERROR_CHECK(err_code);

设置NRF_BLE_SCAN_BUFFER 大小
//  NRF_BLE_SCAN_BUFFER - Data length for an advertising set.

#ifndef NRF_BLE_SCAN_BUFFER
#define NRF_BLE_SCAN_BUFFER BLE_GAP_SCAN_BUFFER_EXTENDED_MIN
#endif

 

BLE Peripherial

对从机的修改点进行梳理。

 

在advertising_init() 中初始化设置phy

#ifdef BLE_LONG_RANGE
ble_gap_adv_params_t adv_params =
{
    .properties =
    {
        .type = BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED, // Long Range
    },
    .p_peer_addr = NULL,
    .filter_policy = BLE_GAP_ADV_FP_ANY,
    .interval = APP_ADV_INTERVAL,
    .duration = 0,
    .primary_phy = BLE_GAP_PHY_CODED, // Must be changed to connect in long range. (BLE_GAP_PHY_CODED)
    .secondary_phy = BLE_GAP_PHY_CODED,
    .scan_req_notification = 1,
};
#endif

在 advertising_start() 函数中,增大发射功率。

#define RADIO_TX_POWER 8 /**< Radio TX power in dBm. Default to 8dBm, see product spec for valid range */

ret_code_t err_code;

err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, m_adv_handle, RADIO_TX_POWER);
APP_ERROR_CHECK(err_code);

连接成功后,设置连接发射功率。

ret_code_t err_code;

err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_CONN, BLE_CONN_HANDLE_INVALID, RADIO_TX_POWER);
APP_ERROR_CHECK(err_code);

其他设置

测试时,使用官方SDK ble_app_blinky 例程。参考开发者论坛资料,清除 .scan_srp_data 初始值。

static ble_gap_adv_data_t m_adv_data =
{
    .adv_data =
    {
        .p_data = m_enc_advdata,
        .len = BLE_GAP_ADV_SET_DATA_SIZE_MAX
    },
    .scan_rsp_data =
    {
        .p_data = NULL, //m_enc_scan_response_data, // long range
        .len = 0 // BLE_GAP_ADV_SET_DATA_SIZE_MAX // long range
    }
};

你可能感兴趣的:(nRF,nordic,Long,Range,bluetooth)