[nrf51] BLE DFU:Dual Bank 备份升级 OTA
2022-08-24 来源:csdn
Nordic默认采用Dual-Bank模式执行DFU,即将新固件的数据保存在Flash的另一区域,而不是直接覆盖当前固件程序,只有新固件接收完毕校验通过,再复制到当前固件空间。这样能保证更新过程被意外中断,不会影响到原来的程序。
(1)Flash布局
一个典型的BLE应用程序其Flash布局图如下:
部件 | 含义或用途 |
---|---|
Bootloader Settings | 保存固件CRC、Size等信息 |
MBR Paramaters | 保存MBR参数 |
Bootloader | 执行DFU |
Application | 应用程序 |
Softdevice | 协议栈 |
MBR(Master Boot Record) | 引导Bootloader |
逻辑上,将Application空间分为两部分:Bank 0和Bank 1。应用程序总是放在Bank 0,紧挨着Softdevice。Bank 1通常是空余空间。
做DFU时候,接收的新固件可以存放在Bank 0,也可以放在Bank 1:
如果放在Bank 0,即覆盖当前程序,称为Signle Bank DFU。
如果放在Bank 1,不影响当前程序,称为Dual Bank DFU。
Nordic SDK默认采用Dual Bank,绝大多数场景都喜欢Dual Bank,除了——Flash空间不够。
Bootloader在接收数据前会检查Bank 1的大小,如果空间足够,就执行Dual Bank,否则当前应用程序,腾出空间执行Single Bank。SDK自动完成这个判断动作。
多种组合的升级模式,不过由于Nordic的协议栈(Softdevice)已经非常成熟,Bootloader职责功能相对稳定,大多数情况下都是只升级Application。
下面借图说明升级过程。
Application(Dual Bank)
新固件先存放到Bank 1,然后再擦除Bank 0,并复制到Bank 0。
Application (Single Bank)
先将Bank 0擦除,然后直接将新固件写到Bank 0。
Softdevice + Bootloader
通常Application都依赖于Softdevice,升级Softdevice意味着也要升级Application,所以要分两个步骤:
先擦除Bank 0,将Softdevice + Bootloader当做一个固件写到Bank 0,再复制到各自区域。
再用新的Bootloader将Application升级到Bank 0。
相关文章
- [nrf51][nrf52][三方通讯] PC/手机 MCU BLE 通讯模板 仅供参考
- [nrf51][nrf52][单片机] ble蓝牙无限广播 持续广播
- [nrf51][nrf52][low power] 使用RTX时 如何进入低功耗
- [vscode][nrf51][nrf52] uint8_t uint16_t uint32_t 等等变量异常
- [nrf51] boot DFU 编译lib文件
- [nrf51822] nrf51 创建服务出现 NRF_ERROR_NO_MEM
- [nrf51][nrf52] ble设备自动回连手机
- [nrf51][nrf52]设置快速广播和慢速广播
- [nrf51][nrf52] 移植RTX或者FreeRTOS需要注意的问题
- UWB & BLE 数字钥匙系统解决方案 | 大联大世平确认申报2024金辑奖