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运行,当然跳转时会出错
  • 待续……

 

(完)

6 评论

  1. 你好,本人最近在研究nrf51822,其中有不少问题需要请教,看阁下在蓝牙这方面颇有心得,想讨教。请不吝赐教,谢谢。

  2. 有一个疑惑就是DFU 的app_data_reserve的保留空间大小是包括swap、dm和app_data三者之和吗?当设置了保留区域,用pstorage保存的数据,在DFU升级后还可以继续用和之前一样的id访问而不丢失吗?像MAC地址或者号码这类是要用pstorage保存起来吗,还是存储在UICR,又该如何操作才能DFU而不丢失呢?

    1. all yes. UICR用于保存“只读”信息,比如MAC地址,Flash用于保存“掉电不丢失”的信息,比如用户数据。UICR修改不方便,Flash可以自由擦写。

      1. 感谢,还有个疑问就是一个hex文件,而mac地址是唯一而递增的,是否需要先存到flash中,每次都自行修改加1?还是有更好的办法可以直接存到UICR中呢?

        1. 先擦芯片,再写UICR:nrfjprog –memwr [addr] –value [val],再烧录Hex,在程序里读取addr并用API设置成BLE Address。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据