扫码加入

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

BlueNRG-LP 普通工程转 OTA APP 完整教程

03/17 10:18
206
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

用 BlueNRG-LP 做 BLE 产品,先写完功能、后加 OTA 升级是绝大多数开发者的真实流程。但很多人一上手就踩坑:Flash 分区不对、宏没开、服务没加、跑不起来、升级失败变砖。

ST 官方 LAT1280 应用笔记,专门解决普通 BLE 工程 → 支持 OTA 升级工程的改造问题。本文用最落地、可直接照着操作的方式,把两种 OTA 框架、改造步骤、关键配置、验证方法讲清楚,看完就能自己改成功。

资料获取:【应用笔记】LAT1280 如何将普通应用更改为OTA APP

1. 先看懂:BlueNRG-LP 两种 OTA 框架(选对再动手)

BlueNRG-LP 提供两套 OTA 方案,适用场景完全不同,先选框架再改代码。

1.1 OTA Reset Manager(双区备份方案)

  • 结构:ResetManager + Lower APP + Higher APP
  • 原理:两片 APP 区互相升级,升级失败不影响旧版本运行
  • 优点:升级安全、不会变砖
  • 缺点:用户可用 Flash 空间更小
  • 推荐:产品量产必用

1.2 OTA Service Manager(单区方案)

  • 结构:OTA 管理程序 + 用户 APP
  • 优点:Flash 空间利用率高
  • 缺点:升级失败设备无法启动
  • 适合:调试、demo、空间极度紧张项目

LAT1280 默认使用:OTA Reset Manager(双区 Higher/Lower)

2. 改造前必须知道的 3 件事

  1. 改造基于KEIL环境,SDK 版本:BlueNRG-LP_LPS DK 1.2.0
  2. 以官方例程 BLE_Security 为改造模板
  3. OTA 必须开DLE 数据长度扩展,否则升级极慢

3. 普通工程 → OTA 工程:完整改造步骤(照做必通)

3.1 配置 Target 宏定义(最关键)

  • 编译 Lower APP
    • 预处理宏:CONFIG_OTA_LOWERCONFIG_SW_OTA_DATA_LENGTH_EXT
    • 链接器添加:--predefine="DCONFIG_OTA_LOWER=1"
  • 编译 Higher APP
    • 预处理宏:CONFIG_OTA_HIGHERCONFIG_SW_OTA_DATA_LENGTH_EXT
    • 链接器添加:--predefine="DCONFIG_OTA_HIGHER=1"

3.2 添加 OTA 代码文件

  1. 添加目录:Middleware/OTA
  2. 加入文件:OTA_btl.c
  3. 包含头文件路径:OTA_btl.h
  4. 文件位置:
    • 头文件:Middlewares/ST/BLE_Application/OTA/inc
    • 源文件:Middlewares/ST/BLE_Application/OTA/src

3.3 主程序修改

  1. P_main.c
    • 包含 OTA_btl.h
    • 主循环里添加 OTA 处理函数
  2. BLE_Security_Peripheral.c
    • 包含 OTA_btl.h
    • DeviceInit:添加 OTA 服务与特征值
    • Make_Connection:广播中添加 OTA UUID
    • hci_disconnection_complete_event:断连后清 OTA 标志
    • 增加 GATT 读写事件回调,处理 OTA 数据
    • 添加必要事件回调:
      • aci_hal_end_of_radio_activity_event
      • aci_att_exchange_mtu_resp_event
      • hci_le_data_length_change_event
      • aci_gatt_srv_write_event

3.4 开启 DLE 加速 OTA

OTA 升级速度慢,必须开数据长度扩展:

custom_ble_stack_conf.h 中打开:

#define CONTROLLER_DATA_LENGTH_EXTENSION_ENABLED

3.5 修正 RAM/Flash 空间

打开工程配置文件:xxx_config.h

扩大 GATT 数据库与缓存空间,避免编译报错。

4. OTA 改造完成后:4 步验证功能

  1. 烧录 ResetManager.hex + 自己编译的 Lower APP
  2. 用 BlueNRG-GUI 通过 OTA 升级 Higher APP
  3. 重启后设备正常运行 Higher APP
  4. 反向用 Higher APP 升级 Lower APP,双向正常即成功

5. 最容易踩的 5 个坑(提前避开)

  1. 只改了 APP 代码,没烧 ResetManager → 无法跳转
  2. 宏定义只加了一半,Higher/Lower 混淆 → 不广播 OTA 服务
  3. 没开 DLE → OTA 速度极慢、容易断线
  4. RAM 空间不足 → 编译失败 / 运行死机
  5. 没在广播包添加 OTA UUID → 手机搜不到升级服务

6. 总结

普通 BlueNRG-LP 工程转 OTA,核心就三件事:

选双区备份框架 → 加宏 + 加 OTA 文件 → 开 DLE + 扩内存

按 LAT1280 流程改造,升级安全、不掉砖、量产直接用。

相关推荐