用 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 件事
3. 普通工程 → OTA 工程:完整改造步骤(照做必通)
3.1 配置 Target 宏定义(最关键)
- 编译 Lower APP
- 预处理宏:
CONFIG_OTA_LOWER、CONFIG_SW_OTA_DATA_LENGTH_EXT - 链接器添加:
--predefine="DCONFIG_OTA_LOWER=1"
- 预处理宏:
- 编译 Higher APP
- 预处理宏:
CONFIG_OTA_HIGHER、CONFIG_SW_OTA_DATA_LENGTH_EXT - 链接器添加:
--predefine="DCONFIG_OTA_HIGHER=1"
- 预处理宏:
3.2 添加 OTA 代码文件
- 添加目录:
Middleware/OTA - 加入文件:
OTA_btl.c - 包含头文件路径:
OTA_btl.h - 文件位置:
- 头文件:
Middlewares/ST/BLE_Application/OTA/inc - 源文件:
Middlewares/ST/BLE_Application/OTA/src
- 头文件:
3.3 主程序修改
- P_main.c
- 包含
OTA_btl.h - 主循环里添加 OTA 处理函数
- 包含
- 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 步验证功能
- 烧录 ResetManager.hex + 自己编译的 Lower APP
- 用 BlueNRG-GUI 通过 OTA 升级 Higher APP
- 重启后设备正常运行 Higher APP
- 反向用 Higher APP 升级 Lower APP,双向正常即成功
5. 最容易踩的 5 个坑(提前避开)
- 只改了 APP 代码,没烧 ResetManager → 无法跳转
- 宏定义只加了一半,Higher/Lower 混淆 → 不广播 OTA 服务
- 没开 DLE → OTA 速度极慢、容易断线
- RAM 空间不足 → 编译失败 / 运行死机
- 没在广播包添加 OTA UUID → 手机搜不到升级服务
6. 总结
普通 BlueNRG-LP 工程转 OTA,核心就三件事:
选双区备份框架 → 加宏 + 加 OTA 文件 → 开 DLE + 扩内存
按 LAT1280 流程改造,升级安全、不掉砖、量产直接用。
206