[nrf51] BLE DFU:Dual Bank 备份升级 OTA

本文详细介绍了Nordic设备的DFU(固件升级)过程,特别是Dual-Bank模式。在该模式下,新固件首先存储在备用Bank,确保更新过程中即使中断也不会影响现有程序。内容涵盖了Flash布局、部件大小、升级对象以及不同固件组件的升级方式,特别强调了Bootloader如何判断并选择SingleBank或DualBank模式。此外,还讨论了不同芯片如nRF52832、nRF52840、nRF52810的Flash空间分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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自动完成这个判断动作。

(2)部件大小

MBR、Softdevice、Bootloader和BL Settings的大小都是确定的。对于nRF52832(512kB Flash)和Softdevice 6.0.x而言,各个部件的大小如下:

部件地址范围空间
BL Settings0x0007 F000 – 0x0008 00004 kB
MBR Params0x0007 E000 – 0x0007 F0004 kB
Bootloader0x0007 8000 – 0x0007 E00024 kB
Appl. + Free area0x0002 0000 – 0x0007 8000352 kB
Softdevice0x0000 1000 – 0x0002 6000148 kB
MBR0x0000 0000 – 0x0000 10004 kB

不同芯片的Flash大小不同,对于nRF52840芯片(1024 kB),Appl. + Free area = 352 + 512 = 864 kB,而对于nRF52810(192 kB),Appl. + Free area = 352 – 320 = 32 kB。

利用这些数值,可以粗略的判断出新的固件将要执行Dual Bank还是Single Bank。

(3)升级对象

一个完整的程序中,有三个固件:Softdevice、Bootloader和Application。

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,所以要分两个步骤:

  1. 先擦除Bank 0,将Softdevice + Bootloader当做一个固件写到Bank 0,再复制到各自区域。
  2. 再用新的Bootloader将Application升级到Bank 0。

具体流程请参考这个链接

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值