Nordic--nrf52832--DFU(一)

nRF52832 空中升级 DPU 的概念 :

 在做 BLE 应用开发时,很多时候需要对应用程序进行升级,来修复一些 bug 或者进行功能升级。nRF52832 支持固件无线(低功耗蓝牙方式)升级,对当前的应用程序进行更新。用户可以通过 Iphone 手机(Iphone4 以上)、Windows 系统的电脑、安卓 4.3及以上支持蓝牙 4.0 的手机,配合 Nordic Semiconductor 的相关软件工具,对 nRF52832设备进行 OTA 固件升级。如下图所示:

Nordic--nrf52832--DFU(一)_第1张图片
上图首先通过云端将需要升级的固件文件下发到手机 APP,由手机端 APP 触发升级流程。下面的内容我们就来涉及这几个问题。

DFU 的 的 Flash 空间布局详解:

Nordic--nrf52832--DFU(一)_第2张图片

协议栈和 bootloader 升级

 下图是 SDK11 的 FLASH 的内部空间布局, 我们主要谈与早期协议栈版本的区别。早期nRF5x芯片在flash操作上有个限制,为了保护softdevice协议栈不被破坏,它禁止了应用程序 app 调用 flash 操作函数去读写协议栈区。所以早期的升级是无法更新softdevice 的,所以之前那篇讲义讲 6.0 协议栈的时候只谈到了应用程序的更新。

 为了实现 softdevice 的升级 Nordic 官方推出了新的 softdevice 7.0 之后的版本,在协议栈 sd 下面有一个 MBR,用来升级 sd 协议栈和 bootloader 时候用的。升级协议栈和bootloader 的过程如下图所示:

Nordic--nrf52832--DFU(一)_第3张图片
图中,OTG 升级的时候,首先把 app 应用程序区里的应用程序擦除,变成空的 free,然后把新的协议栈和新的 bootloader 写入到应用程序区。最好通过调用 MBR 中的 Flash操作函数实现两个部分的更新,而 MBR 区是受保护的,不会变化。
空间分配如下:
SoftDevice/MBR : 用 于 存 放 SoftDevice , 存 储 空 间 地 址 范 围 :0x00000000+MBR+SoftDevice。
Appcation Area:用于存放应用程序代码(Bank0)、待升级应用程序(Bank1)和私有数据、DFU Bootloader 代码。

各个存储区域划分的请查处不同协议栈版本的说明,图示所示为协议栈 S132 SoftDevice v2.0.0-7.alpha:
Nordic--nrf52832--DFU(一)_第4张图片

应用程序升级

应用程序升级分两类:

1:Dual Bank Flash 布局

如图所示:Dual-bank 在更新过程中会先将新的 app 放在 falsh 中,等全部接收完了。然后会检验收到的 app 是否有效,如果有效就替换掉现有的 app。这样即使新的app 是无效的,至少还有旧的 app 可以运行。
Nordic--nrf52832--DFU(一)_第5张图片

2.Single Bank Flash 布局

 Single-bank 模式是在更新过程中就直接开始用新的 app 覆盖旧的,因为不需要在 falsh 中放两个 app,这种情况可以更新更大的 app,缺点是一旦传输错误。会导致新旧 app 都无法使用了。
Nordic--nrf52832--DFU(一)_第6张图片
 可以对比下前面的 bootloader 和 sd 的更新只能用 dual-bank 模式,因为使用single_bank 模式,一旦传输错误设备就无法启动了,就只能通过 flash 工具重新烧写了。而应用程序更新 dual 或 single 模式都可以。即使出错设备因为 bootloader 还在就可以再下载 app。

DPU 的运行原理

 在 nRF52832 中,我们确定使用 Dual bank 的方式进行 OTG 升级,也就是称为DFU。设备烧录了 bootloader 程序后,设备会工作在 DFU 模式,这时可以使用手机 DFU工具或者 PC 端的 Master Control Panel 软件(配合 dongle)对设备进行 DFU 操作。设备上电完成后,系统会先运行 bootloader,bootloader 会判断在 bank0、是否有应用程序。如果在 bank0 中有应用程序,bootloader 会去执行应用程序,否则系统会一直处在 DFU 模式,等待应用程序更新。系统的执行流程框架图如下图所示:
Nordic--nrf52832--DFU(一)_第7张图片
1.在升级程序之前,当前的应用程序存放在 Bank 0,此时 Bank 1 的存储空间未被使用。

Nordic--nrf52832--DFU(一)_第8张图片

2.Bootloader 进入 DFU 模式会将 Bank 1 区域擦除,用于存放将要升级的应用程序数据,只有接收的数据校验成功,才会去擦除 Bank0 的程序,这可以确保当升级程序失败时,旧的应用程序还可以正常运行,不至于系统停止运行。

Nordic--nrf52832--DFU(一)_第9张图片

3.将接收到的新应用程序的数据包写入 Bank 1。

Nordic--nrf52832--DFU(一)_第10张图片

4.完成将待升级的应用程序完成写入 Bank 1 中后,新应用程序和旧的应用程序都会存在 Flash 存储空间中,这样可以确保当新的应用程序无法启动时,还可以运行旧的应用程序。

Nordic--nrf52832--DFU(一)_第11张图片

5.待新接收的数据检验成功后,Bank 0 中的旧应用程序会被擦除。

Nordic--nrf52832--DFU(一)_第12张图片

6.将 Bank 1 中的数据拷贝到 Bank 0 也是激活新应用程序的一部分。

Nordic--nrf52832--DFU(一)_第13张图片

7.完成 Bank 1 到 Bank 0 数据的拷贝后,会开始运行 Bank0 的应用程序。Bank 1 中数据不会被擦除,等待再次进入 bootloaderDFU 模式才擦除 Bank1 数据。

Nordic--nrf52832--DFU(一)_第14张图片

8.如果设置了将旧应用程序的数据保留,新的应用程序会将其数据在原有数据存储空间上叠加存储,不会覆盖。这就是 single Bank 和 Dual Bank 的区别了。

DFU升级文件的生成

Nordic--nrf52832--DFU(一)_第15张图片
首先需要准备两个工程,一个是 BOOTLOAD 工
程,一个是带 DFU 的应用工程。

你可能感兴趣的:(Nordic,nrf52832学习应用之路)