BLE DFU:Legacy DFU

前面几篇都在介绍Secure DFU,而在SDK 12之前版本的DFU,没有签名,称为Legacy DFU。

Secure DFU是由Legacy DFU发展而来,前面介绍的大多数概念都适用于Legacy DFU,本文做一些补充介绍。

(1)类型

总结一下DFU的类型:

DFU类型 SDK版本 特点
Secure DFU SDK 12.x + 带签名校验,Flash占用大,工具支持完善
Legacy DFU SDK 11.x – 不带签名,Flash占用小,得找很老的工具
Open DFU SDK 15.x + 仅适用于USB接口,不适用于BLE

如果使用SDK 11.x,Legacy DFU是一个自然的选择。如果使用较新的SDK,只能选择Secure DFU。

(2)升级包

Legacy DFU生成升级包需要使用nrfutil v0.3版本,而不能使用新版本(新版本已经到达3.x)。

下载安装Master Control Panel(PC版)可以在其安装目录下找到nrfutil v0.3,下载地址为:链接

nrfutil v0.3的命令行参数与新版本不一样,生成升级包的命令为:

nrfutil dfu genpkg --application app.hex dfu_app.zip

有了升级包就可以利用新版的nrfutil或nRF connect APP进行DFU。

(3)Bootloader Settings

Legacy DFU的Bootloader Settings结构比较简单,仅有一个Flag指示应用程序的有效性。

nrfutil v0.3不能生成bl_settings.hex,新版本的nrfutil生成的bl_settings.hex与Legacy DFU不兼容。

Bootloader Settings中的Flag地址是确定的,因此可以利用nrfjprog向该Flash地址写1,手动修改Flag,命令为:

nrfjprog --family NRF51 --memwr 0x3FC00 --val 1

其中0x3FC00是Bootloader Settings的储存地址,而Flag位于该地址的首字节。

同样,如果通过DFU方式升级固件,Bootloader会自动生成和维护Bootloader Settings。

(4)对比

与Secure DFU相比,Legacy DFU有一些特别的地方:

  • Bootloader占用Flash为12 kB,Secure DFU占24 kB
  • Bootloader中MTU Size只支持23,无法利用BLE 4.2的特性
  • SDK提供了ble_app_hrs_with_dfu作为DFU示例,没有一个专门的DFU示例
  • DFU服务不需要检测Bootloader,可以脱离Bootloader运行,当然跳转时会出错
  • 待续……

 

(完)