(原創)nRF51 DFU 初始化包介紹及生成工具


nRF51 DFU 初始化包

       當升級數據包時,在應用程序映像傳輸之前,在DFU中需要初始化包來執行映像的安全檢測。這個初始化包作為升級流程的一部分提供了安全檢測機制,因此被升級的設備只能接收兼容的應用程序。

   初始化包包括以下信息可用於安全檢測(參見dfu_init_packet_t

l  Device type:一個2個字節的值,可由開發者定義,以指示設備的類型,如Heart Rate Belt。

l  Device revision:一個2個字節的值,用於限制一個設備只能使用一個定義的版本號進行升級。

l  Application version:一個4字節的值,用來標識用於傳輸的應用程序的版本,這個值用來只允許軟件升級而不能降級。沒有示例代碼使用這個值。

l  Supported SoftDevices:一個2個字節的列表標識與應用程序兼容的SoftDevices,如S110 v7.0 和 S110 v7.1。

l  Checksum:2個字節的循環校驗碼,用於校驗映像。

 SDK提供一個模板dfu_init_template.c用於執行初始化包的安全檢測。這個模板是為了增強DFU的安全性而增加的。

 1 設備和版本類型

   設備和版本類型在nRF51芯片的UICR(0x10001080)寄存器的用戶保留區中保存,如果這個區域用於其他目的,更新dfu_init.h中的偏移:UICR_CUSTOMER_DEVICE_INFO_OFFSET

#defin  UICR_CUSTOMER_DEVICE_INFO_OFFSET 0x0 /**< Device info offset inside the customer UICR reserved area. Customers may change this value to place the device information in a user-preferred location. */

在UICR中默認值為0xFFFF,這個值意味着初始化數據包中任何設備和版本信息的DFU數據都會被接收。

2 應用程序版本

    DFU初始化數據包中支持檢測應用程序版本。當前的bootloader示例中沒有使用這個特性。但是,如果有必要可以實現應用程序版本檢測,並增加到dfu_init_template.c中。

   如果增加應用程序版本檢測,每一個應用程序必須使用一個版本ID進行編譯,這個版本ID必須存放在應用程序映像中一個預先定義的地方,例如在應用程序起始地址+0x0100的地方,類似於nordic SD的原理。

   參見以下dfu_init_template.c中的代碼片段,它說明了DFU初始化包如何處理一個應用程序版本的安全檢測。

// In order to support application versioning this check should be updated.

// This template allows for any application to be installed however customer could place a

// revision number at bottom of application to be verified by bootloader. This could be done at

// a relative location to this papplication for example Application start address + 0x0100.

3 SoftDevice列表

  應用程序以特定的SoftDevice為目標專為某一nRF51芯片而編譯,例如S110 v7.1.0。如果API向后兼容,一些應用程序可能運行在多種SoftDevice版本上,例如,一個應用程序專為SoftDevice S110 v7.1.0而編譯,但也可以運行在SoftDevice S110 v7.0.0 上。

   可以在DFU初始化包中提供一個支持應用程序的SoftDevice列表。DFU檢測該列表,看看是否與當前SoftDevice版本相對應,如果對應才繼續升級。

   如果值為0xFFFE,那意味着任何應用程序都可以安裝而不管SoftDevice的版本,這個特性在開發中非常有用,但不要用在產品中。

   當前SoftDevice的FWID值如下:

   SoftDevice S110icS1

  FWID

S110 v7.0.0

0x004F

S110 v7.1.0

0x005A

Development/any

0xFFFE

4  DFU初始化包生成方法

       Tan-v提供了DFU初始化包生成工具:make_dfu_initpacket.bat,生成的DFU init packet可直接用於手機APP升級,使用方法:

1. 把編譯生成的hex文件“nrf51422_xxac.hex”(官方示例默認生成的hex文件名)放到 make initpacket 文件夾路徑之下。注意:此hex文件名不可改變。

2. 點擊 make_dfu_initpacket.bat ,則生成 bin 文件:nrf51422_xxac.bin 和DFU Init packet 文件:bootloader_initpacket.dat。

3. 把 bootloader_initpacket.dat 和nrf51422_xxac.hex保存到手機中,可直接用手機 DFU APP 進行升級。

注意:生成的DFU Init packet文件默認配置是支持任何設備類型、支持任何設備版本、支持S110 V7.0.0 和S110 V7.1.0,若要更改,更改config.dat文件中對應字段。

DFU 初始化包生成工具下載鏈接:http://pan.baidu.com/s/1dDgZQMX

作者:tan-v  出處:http://www.cnblogs.com/tan-v/ 歡迎轉載或分享,但請務必聲明文章出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM