前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nRF5x系列蓝牙模块DFU升级服务移植 -- 5 boot修改

nRF5x系列蓝牙模块DFU升级服务移植 -- 5 boot修改

原创
作者头像
DN
修改2020-07-02 14:24:27
9450
修改2020-07-02 14:24:27
举报
文章被收录于专栏:JETSON NANO AI

在对boot进行修改时,请先掌握以下内容:

《nRF5x系列蓝牙模块DFU升级服务移植 -- 1 工具安装》

《nRF5x系列蓝牙模块DFU升级服务移植 -- 2 文件生成》

《nRF5x系列蓝牙模块DFU升级服务移植 -- 3 烧写升级》

《nRF5x系列蓝牙模块DFU升级服务移植 -- 4 应用移植》

由于车位锁项目中使用自制底板,和标准开发板存在差异,所以需要按照以下步骤对bootloader程序进行修改。

5.1  配置文件使能

协议栈时钟初始化参数的更改,修改nRF_softDevice选项下的NRF_SDH_BLE_ENABLED下的Clock下的NRF_SDH_CLOCK_LF_SRC内容为NRF_CLOCK_LF_SR_RC;修改nRF_softDevice选项下的NRF_SDH_BLE_ENABLED下的Clock下的NRF_SDH_CLOCK_LF_RC_CTIV内容为16;修改nRF_softDevice选项下的NRF_SDH_BLE_ENABLED下的Clock下的NRF_SDH_CLOCK_LF_ACCURACY内容为NRF_CLOCK_LF_ACCURACY_250_PPM。修改后结果如下图所示:

5.2  代码修改

5.2.1  PA初始化

1、在nrf_dfu_ble.c文件中添加PA配置初始化函数,代码如下图所示:

void pa_lna_assist(uint32_t gpio_pa_pin, uint32_t gpio_lna_pin)

{

ret_code_t err_code;

//static const uint32_t gpio_toggle_ch = 0;

//static const uint32_t ppi_set_ch = 0;

//static const uint32_t ppi_clr_ch = 1;

static const uint32_t gpio_toggle_ch = 3;

static const uint32_t ppi_set_ch = 0;

static const uint32_t ppi_clr_ch = 1;

// Configure SoftDevice PA/LNA assist

ble_opt_t opt;

memset(&opt, 0, sizeof(ble_opt_t));

// Common PA/LNA config

opt.common_opt.pa_lna.gpiote_ch_id  = gpio_toggle_ch;        // GPIOTE channel

opt.common_opt.pa_lna.ppi_ch_id_clr = ppi_clr_ch;            // PPI channel for pin clearing

opt.common_opt.pa_lna.ppi_ch_id_set = ppi_set_ch;            // PPI channel for pin setting

// PA config

opt.common_opt.pa_lna.pa_cfg.active_high = 1;                // Set the pin to be active high

opt.common_opt.pa_lna.pa_cfg.enable      = 1;                // Enable toggling

opt.common_opt.pa_lna.pa_cfg.gpio_pin    = gpio_pa_pin;      // The GPIO pin to toggle

// LNA config

opt.common_opt.pa_lna.lna_cfg.active_high  = 1;              // Set the pin to be active high

opt.common_opt.pa_lna.lna_cfg.enable       = 1;              // Enable toggling

opt.common_opt.pa_lna.lna_cfg.gpio_pin     = gpio_lna_pin;   // The GPIO pin to toggle

err_code = sd_ble_opt_set(BLE_COMMON_OPT_PA_LNA, &opt);

APP_ERROR_CHECK(err_code);

}

2、在广播初始化函数中调用PA配置初始化函数,代码如下图所示:

static uint32_t advertising_init(uint8_t adv_flags, ble_gap_adv_params_t const * const p_adv_params)

{

    uint32_t err_code;

    uint16_t actual_device_name_length = BLE_GAP_ADV_SET_DATA_SIZE_MAX - APP_ADV_DATA_HEADER_SIZE;

    /* This needs to be static because of SoftDevice API requirements. */

    static uint8_t m_enc_advdata[BLE_GAP_ADV_SET_DATA_SIZE_MAX];

    ble_gap_adv_data_t m_adv_data =

    {

        .adv_data =

        {

            .p_data = m_enc_advdata,

            .len    = APP_ADV_DATA_HEADER_SIZE,

        }

    };

    /* Encode flags. */

    m_enc_advdata[0] = 0x2;

    m_enc_advdata[1] = BLE_GAP_AD_TYPE_FLAGS;

    m_enc_advdata[2] = adv_flags;

    /* Encode 'more available' UUID list. */

    m_enc_advdata[3] = 0x3;

    m_enc_advdata[4] = BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE;

    m_enc_advdata[5] = LSB_16(BLE_DFU_SERVICE_UUID);

    m_enc_advdata[6] = MSB_16(BLE_DFU_SERVICE_UUID);

    /* Get GAP device name and length. */

    err_code = sd_ble_gap_device_name_get(&m_enc_advdata[9], &actual_device_name_length);

    if (err_code != NRF_SUCCESS)

    {

        return err_code;

    }

    // Set GAP device in advertising data.

    m_enc_advdata[7] = actual_device_name_length + 1; // (actual_length + ADV_AD_TYPE_FIELD_SIZE(1))

    m_enc_advdata[8] = BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME;

    m_adv_data.adv_data.len += actual_device_name_length;

pa_lna_assist(24, 20); //ÉèÖÃpa,lnaÒý½Å

//err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, BLE_CONN_HANDLE_INVALID, TX_POWER_LEVEL);

//APP_ERROR_CHECK(err_code);

    return sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, p_adv_params);

}

5.2.2  宏的声明

在Keil工程设置选项下的C/C++选项下的Define中删除CONFIG_GPIO_AS_PINRESET宏定义,如下图所示:

操作完成后,按照《nRF5x系列蓝牙模块DFU升级服务移植 -- 2 文件生成》、《nRF5x系列蓝牙模块DFU升级服务移植 -- 3 烧写升级》编译生成引导hex文件。烧写步骤可按照第3章操作步骤进行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档