[北欧] nRF52810 OTAアップグレード(2)-DFUの使用方法

関連記事

1。「[Nordic] nRF52810 OTAアップグレード(1)-DFU環境のセットアップ」
2。「[Nordic] nRF52810 OTAアップグレード(2)-DFUの使用方法」
3。「[Nordic] nRF52810 OTAアップグレード(3)-DFU理論分析》

1はじめに

この記事は、「[Nordic] nRF52810 OTA Upgrade(1)-DFU Environment Setup」基づいて、DFUOTAファームウェアアップグレード機能を実現しています。

2.micro_ecc_lib_nrf52.libライブラリを生成します

Nordicは、OTAアップグレードにDFUを使用する場合、ECCを使用してファームウェアを検証および認証するため、DFUプロジェクトで作成する必要がありますmicro_ecc_lib_nrf52.lib

  1. 前の記事でダウンロードしたmicro-ecc-masterソースコードをSDKディレクトリにコピーしexternal\micro-ecc名前を変更しますmicro-ecc
    ここに画像の説明を挿入
    ここに画像の説明を挿入

  2. Cygwinコマンドラインを開きます
    ここに画像の説明を挿入

  3. micro-eccプロジェクトディレクトリにcdします。nRF5_SDK_17.0.2_d674dde\external\micro-ecc\nrf52nf_keil\armgcc
    ここに画像の説明を挿入

  4. 実行makeコマンドを
    ここに画像の説明を挿入
    gccのエラーが発生した見つけるために特別な工具がないのでここでは、ファイルを変更します。nRF5_SDK_17.0.2_d674dde\components\toolchain\gcc\Makefile.windows

    GNU_INSTALL_ROOT := C:/Program Files (x86)/GNU Tools ARM Embedded/9 2019-q4-major/bin/
    GNU_VERSION := 9.2.1
    GNU_PREFIX := arm-none-eabi
    

    gccの実際のインストールディレクトリを変更します。

    GNU_INSTALL_ROOT := D:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2020-q4-major/bin/
    GNU_VERSION := 10.2.1
    GNU_PREFIX := arm-none-eabi
    

    再度実行するmakeと、コンパイルは成功します。
    ここに画像の説明を挿入
    ここに画像の説明を挿入

3. dfu_public_key.cを生成し、参加します

  1. 秘密鍵の生成
    Dドライブに新しいフォルダーを作成し、 keyという名前を付けて、cmdコマンドに次のように入力します。nrfutil keys generate D:\key\private.keyコマンド、秘密鍵ファイルprivate.keyを生成します
    ここに画像の説明を挿入

    注:秘密鍵private.keyを保存するには、今後のすべての新しいファームウェアアップグレードに、この秘密鍵で署名する必要があります。失われると、DFUは続行できなくなります。

  2. 公開鍵の生成公開鍵
    を生成するコマンドを入力します。nrfutil keys display --key pk --format code D:\key\private.key --out_file public_key.c
    ここに画像の説明を挿入
    デスクトップで公開鍵public_key.cを生成します。
    ここに画像の説明を挿入
  3. プロジェクトに公開鍵を追加します。
    公開鍵の名前をpublic_key.cからdfu_public_key.cにnRF5_SDK_17.0.2_d674dde\examples\dfu変更し、ディレクトリ内のファイルをdfu_public_key.cに置き換えます。
    ここに画像の説明を挿入

4.ブートローダーをコンパイルします

ここ使用しているnRF52810プラットフォームのため、次のようにdfuブートローダーパスを選択します。
nRF5_SDK_17.0.2_d674dde\examples\dfu\secure_bootloader\pca10040e_s112_ble\arm5_no_packs
ここに画像の説明を挿入
コンパイルは成功しました。
ここに画像の説明を挿入

5.ブートローダーとSoftDeviceの16進ファイルを書き込む

jlinkを使用して書き込みbootloaderSoftDevice

  • ブートローダーを書き込む
    nRF5_SDK_17.0.2_d674dde\examples\dfu\secure_bootloader\pca10040e_s112_ble\arm5_no_packs\_build\nrf52810_xxaa_s112.hex
  • SoftDeviceを書き込む
    nRF5_SDK_17.0.2_d674dde\components\softdevice\s112\hex\s112_nrf52_7.2.0_softdevice.hex

書き込み後、電話にインストールされているnRF ConnectAPPを使用してBLE検索すると、DfuTargブートローダーモードに入ったこと示しているように見えます。アプリケーションヘクスは書き込まれないため、直接ブートローダーモードになります。
ここに画像の説明を挿入

6.OTAアップグレード用のnRFConnect APP

アプリケーションファームウェアを前のプロジェクトでコンパイルされたファームウェアにアップグレードします。nRF5_SDK_17.0.2_d674dde\examples\ble_peripheral\ble_app_uart\pca10040e\s112\arm5_no_packs\_build

  • OTAアップグレードパッケージを作成する
    nrfutil pkg generate --hw-version 52 --application-version 1 --application nrf52810_xxaa.hex --sd-req 0x0103 --key-file D:\key\private.key dfufile.zip
    ここに画像の説明を挿入

  • OTAアップグレードパッケージdfufile.zipを電話にコピーします

  • BLEDfuTargを接続します
    ここに画像の説明を挿入

  • 右上隅にある小さなDFUアイコンをクリックして、ZIPファイルを選択しますdfufile.zip
    ここに画像の説明を挿入

  • アップグレード中…
    ここに画像の説明を挿入

  • アップグレードが成功し、次の図に示すように、アプリケーションbleのNordic_UARTという名前が表示されます。
    ここに画像の説明を挿入

7.発生するエラー

  • エラー1

    ..\..\..\..\..\components\libraries\crypto\backend\micro_ecc\micro_ecc_backend_ecc.h(52): error:  #5: cannot open source input file "uECC.h": No such file or directory
      #include "uECC.h"
    ..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_validation.c: 0 warnings, 1 error
    

    エラー分析:
    プロンプトというuECC.hヘッダファイルがされていません
    解決策:
    を参照してください2. micro_ecc_lib_nrf52.libライブラリーを生成する問題を解決します。

  • エラー2

    compiling dfu_public_key.c...
    ..\..\..\dfu_public_key.c(20): error:  #35: #error directive: "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"
      #error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"
    ..\..\..\dfu_public_key.c: 0 warnings, 1 error
    

    エラー分析:
    有効なDFU暗号公開鍵がありません。
    解決策:
    を参照してくださいdfu_public_key.cを生成し、追加3.問題を解決するために、それを。

おすすめ

転載: blog.csdn.net/ZHONGCAI0901/article/details/112311314