今回はnRF52832 BLEモジュール(RaytacのnRF52832モジュールシリーズページへのリンク)を使用する際に、セキュアDFU OTA(無線通信でのファームウェア更新)を実装するためのガイドラインを紹介します。
■環境
IC: nRF52832
DK: PCA10040 (nRF52832用)
SDK: 16.0.0
Softdevice: s132_nrf52_7.0.1_softdevice.hex
IDE: Keil C
PC: Windows 10
以下は、RaytacのnRF52832モジュールとSDK 16.0.0を使用して、セキュアDFU OTAを実装するためのガイドラインです。(2つのパートに分かれています)
Part 1. ブートローダー&アプリケーション
*本記事
Part 2. ビルドファイルの結合
*次回記事
「Bootloader(ブートローダー)」
パス: ..\nRF5_SDK_16.0.0_98a08e2\examples\dfu\secure_bootloader\pca10040_s132_ble\arm5_no_packs
*特にnRF52832の場合、プログラマーはECC(Elliptic Curve Cryptography)をブートローダーに組み込む必要があります。
(1)’micro_ecc_lib_nrf52.lib’ライブラリは以下のパスにありますが、最初に起動する必要があります。
(2)’micro-ecc-master.zip’を以下のパスに解凍します(最初に新しい「micro-ecc」フォルダを作成してください)。
(3) ‘gcc-arm-none-eabi-7-2018-q2-update-win32.exe’を実行します。
(4)Windows 10の環境変数が以下のように設定されていることを確認します。(ステップ1から6に従います)
(5)DOSを開き、「make」コマンドをarmgccパスで実行して’micro_ecc_lib_nrf52.lib’を生成します。
(6)‘micro_ecc_lib_nrf52.lib’をフォルダ: nRF_micro-eccに追加します。
(7)パブリックキーがない状態でブートローダーをビルドするとエラーが発生する場合があります: (以下のスクリーンショットの赤枠で表示)
(8) ブートローダーでパブリックキーのファイルを生成する方法: A. パス: ..\Python27\ScriptsでDOSを起動します。
B. 次のコマンドを実行します:
nrfutil keys generate private.pem
nrfutil keys display --key pk --format code private.pem --out_file public_key.c
(9)(public_key.c) から pk[64] コードを (dfu_public_key.c) にコピーします。
(以下のスクリーンショットの赤枠で表示)
※注意: 生成された3つのファイルを必ず保存してください:
- private.pem
- public_key.c
- dfu_public_key.c
(10)コードファイルを再コンパイルしてブートローダーファイル: nrf52832_xxaa_s132.hexを生成します。
「アプリケーション」
パス:
..\nRF5_SDK_16.0.0_98a08e2\examples\ble_peripheral\ble_app_uart\pca10040\s132\arm5_no_packs
アプリケーションコードをビルドする前に、DFU関連の設定やコードの修正が必要です。
(1) C/C++の定義に以下のコードを追加します:
BL_SETTINGS_ACCESS_ONLY NRF_DFU_SVCI_ENABLED
NRF_DFU_TRANSPORT_BLE=1
(合計3つの定義を設定する必要があります)
(2) DFUを機能させるために、以下に示す3つのパスをC/C++に追加します。
(3)以下のスクリーンショット1&2の赤枠内にある.cファイルを追加し、プロジェクトにnRF_DFUとnRF_SVCの2つのグループを追加します。
(4) アプリケーションのmain.cファイルにコードを追加します(..\examples\ble_peripheral\ble_app_uart\main.c)。
(参照先: ..\examples\ble_peripheral\ble_app_buttonless_dfuのmain.cファイル)」
(5)アプリケーション内のファイル: sdk_config.h (..\examples\ble_peripheral\ble_app_uart\pca10040\s132\config\sdk_config.h) のコードを修正する必要があります。
(6)DFUサービスを実装した後、ターゲットのIRAM1値を調整します:
IRAM1の *p_app_ram_start 値を、
デフォルトの 0x20002AD8 0xD528 から 0x20002AE8 0xD518 に修正します。
右下隅の赤枠で示されているように変更します。
これでプログラムが正常に動作し、アドバタイズが成功するはずです。
(7)アプリケーションコードファイルをビルドした後、nrf52832_xxaa.hex ファイルを作成します。
(8)DOSを使用して、nrf52832_bootloader_secure_settings.hex というブートローダー設定ファイルを作成します。
nrfutil settings generate –family NRF52 –application nrf52832_xxaa.hex –application-version 3 —
bootloader-version 2 –bl-settings-version
1 nrf52832_bootloader_secure_settings.hex –no-backup
*次の記事は「ビルドファイルの結合」についてです。
ピンバック: nRF52832 BLEモジュール向けのセキュアなDFU OTA: hex/zipファイル作成ガイド – Part 2 (ビルドファイルの結合) | Bluetooth®モジュール (BT4.2 / 5 / 5.1 / 5.2 / 5.3 / 5.4)