扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

BlueNRG LP静态协议栈Higher/Lower APP OTA 升级实操:空间优化与步骤拆解

10小时前
212
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

BlueNRG LP 芯片支持 OTA(空中升级)功能,传统 OTA 框架(OTA Reset Manager、OTA Service Manager)会在 Flash 中存储两个 BLE 协议栈,占用大量存储空间。静态协议栈通过共用单一协议栈,既释放 Flash 空间给应用程序,又能加速 OTA 升级过程。本文基于 ST 官方 LAT1284 应用笔记,以 BlueNRG-LP SDK 1.4.0、KEIL IDE 为例,详细拆解静态协议栈定制、OTA 应用适配及功能验证的完整流程。

1. 静态协议栈核心优势与背景

1.1 传统 OTA 框架的痛点

传统 OTA 框架中,Higher APP、Lower APP(或 User APP 与 OTA Manager)均包含独立 BLE 协议栈,以 256K Flash 的 BlueNRG LP 为例:
  • OTA Reset Manager 框架:Lower APP(124K)+ Higher APP(124K)+ 双协议栈,Flash 空间冗余严重;
  • OTA Service Manager 框架:User APP(162K)+ OTA Service Manager(90K)+ 双协议栈,应用可用空间受限。

1.2 静态协议栈的核心价值

  • 空间优化:Flash 中仅存储一个公共静态协议栈,应用程序无需自带协议栈代码,释放大量空间;
  • 升级加速:OTA 升级包仅包含应用程序逻辑,无需传输协议栈代码,缩短升级时间;
  • 兼容性强:支持 OTA Reset Manager 框架的 Higher/Lower APP 跳转,适配现有 OTA 流程。

2. SDK 提供的关键资源

  1. 协议栈配置文档:《PM0269 Bluetooth LE stack v3.x programming guidelines》,详细说明协议栈模块化配置方法;
  2. OTA 功能文档:《AN5463 Bluetooth LE Over The Air Firmware Upgrade》,提供 OTA 流程完整说明;
  3. 参考示例:SDK 中包含 4 种静态协议栈项目,其中 2 种支持 OTA Reset Manager 框架,具体如下:
静态协议栈项目 协议栈配置 Link 数 应用首地址 支持 OTA 跳转 协议栈占用空间
OTA_BTL_ResetManager_Basic BLE_STACK_BASIC_CONF(基本功能) 1 0x10058000 96K
OTA_BTL_ResetManager BLE_STACK_FULL_CONF(全功能) 1 0x10067800 158K
Release BLE_STACK_BASIC_CONF 1 0x10058000 96K
Basic BLE_STACK_BASIC_CONF 1 0x10067800 96K
注:Link 数表示协议栈支持的无线任务数量,直接影响 RAM 占用,应用程序与静态协议栈的 Link 数必须一致。

3. 完整实施步骤

第一步:定制客户专属静态协议栈

基于 “OTA_BTL_ResetManager_Basic” 项目,按实际应用需求定制协议栈,生成库文件与烧录文件。

1. 新建协议栈工程

  • 复制 SDK 中的 “OTA_BTL_ResetManager_Basic” 项目,重命名为 “OTA_BTL_ResetManager_CTM”;
  • 新建 Listings、Objects 子目录,用于存放编译输出文件。

2. 工程配置(KEIL IDE)

  • 输出配置:指定可执行文件名为 “BLE_StaticStack_OTA_BTL_ResetManager_CTM”,map 文件输出至 Listings 目录;
  • 生成库文件:在 User 标签页 “Run#1” 中,设置生成库文件名为 “libbluenrg_lp_static_stack_rstmngr_CTM.a”。

3. 协议栈功能定制

  • 预处理宏修改:将 “BLE_STACK_BASIC_CONF” 改为 “BLE_STACK_CUSTOM_CONF”,启用自定义配置;
  • Link 数配置:根据应用需求设置 “CONFIG_NUM_MAX_LINKS”(示例设为 1),后续应用程序需保持一致;
  • 功能裁剪:打开 “custom_ble_stack_conf.h”,仅启用必要功能(如支持 OTA 需开启 “CONNECTION_ENABLED” 和数据长度扩展);
  • 内存宏配置:Linker 标签页中,设置 “MEMORY_FLASH_APP_SIZE” 为较大值(如 0x38000),预留应用空间。

4. 地址计算与宏定义调整

    1. 协议栈代码末尾地址(如 0x10058466);
    2. 协议栈 RAM 占用末尾地址(如 0x200006F8);编译项目,打开 map 文件,获取两个关键地址:
  • 计算 Flash 边界:协议栈末尾地址向下对齐至 2K 字节边界(BlueNRG LP Flash 每页 2K),示例中 0x10058466 对齐后为 0x10058800;
  • 计算偏移量:边界地址相对于 Flash 起始地址(0x10040000)的偏移量为 0x18800;
  • 设置宏定义:预处理宏 “RESET_MANAGER_SIZE” 和 “MEMORY_FLASH_APP_SIZE” 均设为 0x18800,定义应用程序起始地址。

5. 生成协议栈文件

重新编译工程,生成两个核心文件:
  • “libbluenrg_lp_static_stack_rstmngr_CTM.a”:协议栈库文件,需链接至应用程序;
  • “BLE_StaticStack_OTA_BTL_ResetManager_CTM.hex”:协议栈烧录文件,需烧录至芯片。

第二步:生成静态协议栈版 OTA Higher/Lower APP

基于 SDK 的 “BLE_SerialPort” 示例,修改工程适配静态协议栈,生成 Higher APP 与 Lower APP。

1. 新建应用工程

  • 基于 “BLE_SerialPort” 的 “Server_LowerApp_OTA” 目标,新建项目 “Server_LowerApp_OTA_CTM”;
  • 同理,基于 “Server_HigherApp_OTA” 新建 “Server_HigherApp_OTA_CTM”。

2. 应用工程配置

  • 协议栈配置:启用 “BLE_STACK_CUSTOM_CONF”,“custom_ble_stack_conf.h” 配置与静态协议栈一致;
  • Link 数同步:“CONFIG_NUM_MAX_LINKS” 设为 1,与静态协议栈保持一致;
  • 链接宏定义:添加两个关键宏,指定应用起始地址与 RAM 偏移:
    1. --predefine="-DRESET_MANAGER_SIZE=0x18800"(应用起始地址偏移);
    2. --predefine="-DMEMORY_RAM_APP_OFFSET=0x06F8"(RAM 偏移,取自协议栈 map 文件);
  • 移除冗余文件:禁止以下文件编译(避免重复包含协议栈代码):
    • Drivers/Peripherals_Drivers 目录下的射频定时器相关文件;
    • Middlewares 中的 BLE_Stack、AES、Cryptolib 等协议栈相关目录;
    • 库文件 “libbluenrg_lp_stack.a” 与配置文件 “stack_user_cfg.c”。

3. 链接静态协议栈库

  • 在 Middlewares/BLE_Stack 目录下,添加静态协议栈库文件 “libbluenrg_lp_static_stack_rstmngr_CTM.a”,设置文件类型为 “Library”;
  • 添加 “bluenrg_lp_stack_init_if.c”(SDK 静态协议栈目录下),用于协议栈 API 调用适配。

4. 编译生成应用文件

分别编译两个工程,生成 “Server_Lower_OTA_CTM.hex” 和 “Server_Higher_OTA_CTM.hex”,即静态协议栈版 OTA 应用文件。

第三步:功能验证

使用 ST 官方评估板 STEVAL_IDB011V1,验证协议栈与 OTA 功能是否正常。

1. 基础验证

  • 烧录静态协议栈文件 “BLE_StaticStack_OTA_BTL_ResetManager_CTM.hex”;
  • 烧录 Lower APP 文件 “Server_Lower_OTA_CTM.hex”;
  • 上电后通过串口打印,确认应用程序正常运行,协议栈 API 调用无误。

2. OTA 升级验证

  • 第二块评估板烧录 SDK 的 DTM 程序,连接 PC 端 BlueNRG GUI 工具(版本 4.3.0);
  • 通过 GUI 工具发起 OTA 升级,将 Higher APP“Server_Higher_OTA_CTM.hex” 发送至第一块评估板;
  • 升级完成后,串口打印确认 Higher APP 正常运行;
  • 重复操作,将评估板升级回 Lower APP,验证双向跳转与升级功能。

4. 核心注意事项

  1. Link 数一致性:静态协议栈与应用程序的 “CONFIG_NUM_MAX_LINKS” 必须相同,否则会导致协议栈调用异常;
  2. 配置文件同步:应用程序与静态协议栈的 “custom_ble_stack_conf.h” 功能配置必须一致,避免功能缺失或冲突;
  3. 地址计算准确:应用起始地址偏移(RESET_MANAGER_SIZE)需严格按协议栈 map 文件的 Flash 边界计算,否则会导致程序跳转失败;
  4. 冗余文件移除:必须禁止应用程序编译协议栈相关文件,否则会出现符号冲突,导致编译失败。
静态协议栈为 BlueNRG LP 的 OTA 升级提供了高效解决方案,核心是通过 “协议栈共用” 释放 Flash 空间、加速升级流程。实施关键在于三点:一是按需求定制协议栈,裁剪冗余功能;二是确保应用工程与协议栈的配置同步(Link 数、功能开关);三是准确计算地址偏移,保证程序正常跳转。

相关推荐