nRF91シリーズのDFU
2024.10.17

こんにちは。
加賀デバイスのNordic Teamです。
今回はDFU(Device Firmware Update)について記事を書きたいと思います。
ファームウェアの書き換え方法でDFU、FOTA、OTAなどの言葉が出てきます。
英文にすると下記となります。
DFU:Device Firmware update
FOTA:Firmware update over the air
OTA:Over the air
そのため、ファームウェアを書き換える上では、FOTAとOTAは同意義となります。
FOTA(OTA)の英文から分かるように無線を使用した書き換えとなりなすが、DFUは無線だけではなく有線を使用した書き換えも含んでおります。
Nordicとしては下記のような様々なDFUの方法を提供しています。
・UART
・USB
・BLE
・Cellular
・Wi-Fi
これらの具体的な使用方法についてはNordicのオンライン学習プラットフォームのDevAcademyで説明していますのでご参照いただければと思います。
DevAcademy:nRF Connect SDK Intermediate/Lesson8 – Bootloaders and DFU/FOTA
Adding Device Firmware Update (DFU/FOTA) Support in nRF Connect SDK(YouTube)
今回の記事はnRF91シリーズを使用したUARTおよびCellular通信を使用したDFUについて説明していきます。
nRF5xシリーズについてはまた別の記事で投稿したいと考えていますのでご期待頂ければと思います。
◢◤MCUbootを使用したDFU
DFUの処理はApplicationプログラムが実行するのではなく、Bootloaderプログラムで実行されます。
Nordicの開発環境であるnRF Connect SDKのBootloaderの構成は2種類から選ぶことが出来ます。
①Immutable bootloader(first-stage)のみを使用
②Immutable bootloader(first-stage)とupgradable bootloader(second-stage)の2つを使用
Immuatble bootloaderは書き換え出来ないBootloaderとなり、upgradable bootloaderは書き換え可能なBootladerとなります。
upgradable bootladerの使用についてはNordicのドキュメントに注意事項がありますので使用される前にご確認いただければと思います。
また、bootloaderにはnRF Secure Immutable Bootloader(NSIB)とMCUbootの2種類があります。
NSIBとMCUbootの特徴や使用方法についてはここでは説明しきれないため、詳しくは下記をご参照いただければと思います。
Bootloaderについて興味がある/もっと詳しく聞きたいという方は弊社までご連絡頂ければご説明させて頂きます。
今回はImmutable bootloaderにMCUbootを使用した構成を使用します。
MCUbootを使用したDFUの動作として、2つのパターンがあります。
①Single bank方式
古いApplicationプログラムを新しいApplicationプログラムで直接上書きする方式
②Dual bank方式
Applicationプログラムとは別に同じサイズのDFU用の領域(secondary image)を用意して、そこに新しいApplicationプログラムをダウンロードしてから古いApplicationプログラムを書き換える方式
nRF91シリーズの場合は②のDual bank方式となります。
そのためソフトウェア構成としては下記のようになります。

◢◤サンプルプロジェクト
nRF91シリーズは自由に書き換え可能なapplicationプログラムと、Nordicが提供するCellular通信を行うためのModem Firmware(以降MFW)があり、nRF connect SDKではそれぞれに合ったDFUのサンプルプロジェクトを用意しています。
1:Cellular: Full modem firmware update using SMP Server:UART経由でMFWのDFU
2:Cellular: nRF Cloud REST FOTA:Nordicが提供しているクラウドサービス:nRF cloudを使用したDFU
3:Cellular: HTTP application update:Cellular経由のapplicationプログラムのDFU
4:Cellular: HTTP modem delta update:Cellular経由のMFW(全て)のDFU
5:Cellular: HTTP full modem update:Cellular経由のMFW(差分)のDFU
MFWのFull modem firmware upgradeを行う際の注意事項としてnRF9160 Hardware Design Guidelinesにも記載されていますが、外付けのFlashメモリ(4MB以上)が必要になります。
nRF9160 DKにはあらかじめ外付けFlashメモリが搭載されていますが、カスタムでボードを起こされる場合はご注意頂ければと思います。
MFWのdelta update(差分アップデート)とは、MFWのバージョンアップに伴う差分のみをアップデートする機能となります。
Modem Firmwareのupdateについては下記なども参考になります。
今回は、1:UART経由のMFWのFull modem firmware updateと、4:Cellular経由のApplicationプログラムのDFUを試してみたいと思います。
◢◤UART経由のMFWのFull modem firmware update
このサンプルプロジェクトはパソコンからPythonコマンドを使用してMFWのupdateを行います。
また、Pythonコマンドの中でNordicのPCツールのnRF pynrfjprogを使用するため、事前にインストールしておきます。
まずは設定は何も変えずにビルドして実行してみます。
最初にUARTのポートの接続確認を行っているのが確認できます。

その後MFWのダウンロードを開始します。

終了すると上記のようは表示となります。
経過時間も表示されていて、今回は624秒ほどかかっています。
次にUARTの通信速度を115200bpsから1000000bpsに変えて試してみます。

経過時間を確認すると327秒となり、速度を約10倍近くにしましたが書き込み速度は約半分くらいの時間にしかなりませんでした。
◢◤Cellular経由のApplicationプログラムのDFU
このサンプルソフトではNordicが用意しているAWSのS3にあるファイルをダウンロードします。
初期状態ではapplicationプログラムのバージョンは”1″となり、LED1のみが点灯します。
DFUが成功するとapplicationプログラムのバージョンが”2″となり、LED1とLED2の両方が点灯します。
今回は接続先とダウンロードファイルを変更して試してみたいと思います。
変更するには <サンプルプロジェクトのフォルダ>\boards フォルダにある”nrf9160dk_nrf9160_ns.conf”のファイルの中身を変更します。
具体的には下記のように変更しました。

設定を変更したプログラムをビルド/書き込みを行い、実行させると下記が表示されます。
applicationプログラムのバージョンが”1″となってい、LED1のみが点灯しています。

LTEの接続が確立されるとボタン1を押すように指示されます。
ボタン1を押すことでDFUが開始されます。
Firmwareのダウンロードが完了すると下記が表示され、再度ボタン1を押してリセットするように指示されます。

これは、secondary imageに新しいapplicationプログラムがダウンロードが終わり、古いapplicationプログラムと入れ替えの準備が終わったので、再度MCUbootを起動させてプログラムの入れ替えプログラムを動作をさせるために必要なリセット動作となります。
リセット後は下記が表示されます。

applicationプログラムのバージョンが”2″となっていて、LED1とLED2の両方点灯している事が確認出来ます。
サンプルプログラムをご参考にしていただければ簡単にApplicationプログラムおよびMFWのDFUが可能となっておりますので、ぜひお試しいただければと思います。
ご興味ございましたら弊社のお問い合わせ にご連絡ください。
今後もNordicの紹介及びコラムにて色々な情報を公開致しますので是非ご確認ください。
また、Facebookでも随時情報を公開しておりますので合わせてご確認ください。
Nordic コラム一覧
nRF Cloud その2 -アカウント管理-
関連記事