LoginSignup
0
0

nRF9160 の FOTA について

Last updated at Posted at 2024-04-15

FOTA は、
 ・APP(アプリケーション更新)
 ・DELTA(モデム差分更新
 ・FMFU(モデム全体更新)
の3種がある。
(厳密には APP は SMP と MCUBOOT に分かれるがおそらく SMP は使わないと思われる)

各種 FOTA については、サンプルプログラムのソースがわかりやすい。

サンプルコードは、NCS のバージョンによって実装方法が微妙に異なる。
NCS v2.5系までは APP と DELTA がまとまっていて FMFU だけ別実装だった。
NCS v2.6.0 のサンプルコード SLM (Serial Lte Momem)では、FMFUも統合された。

私は、2024年4現在、NCS 2.5.2を使用しているが、NCS 2.6.0 のソースコードを利用して、ヘッダサイズの大きい HTTP ダウンロードから UDP ダウンロードに作り替えて移植してみたので、備忘録を残しておく。

基本構造

基本構造は皆同じで、HTTP (もしくは COAP ) にて、レンジアクセス機能を使い、ファイルイメージを範囲指定してデータを部分要求し、少しずつ、内部のフラッシュメモリ(FMFUはサイズが大きいので外部のSPI-NORフラッシュメモリ)に直接保存している。

ダウンロードが完了したら更新を適用するといった流れだ。

リブート後に更新状況を引き継ぐ必要があるので、NVM を利用して必要な情報を引き継いで、
再起動後に必要な処理を行う。

関連ファイル

SLM source
・slm_fota.h
・slm_fota.c
・slm_settings.h
・slm_settings.c
・main.c

Zephyr source
・fota_download.h
・fota_download.c
・fota_download_client.h
・fota_download_client.c
・fota_download_util.h
・fota_download_util.c
・fota_download_full_modem.h
・fota_download_full_modem.c

ファイル概要

・slm_settings.c

にて、NVM への読み書きを行なっている。

・main.c
では。再起動後の処理や初期化などが実装されている

・fota_download_client.c

FOTA のダウンロードの中心となる ダウンロードスレッドが記述されている。
通信処理を改造するのであれば、このファイルを変更する必要がある。

FMFU (Full Modem Firmware Update)

NCS v2.6.0 の SLMサンプルコードでは、FMFU が統合されただけでなく、
NVS で引き継ぐ情報は、FMFU を行なったか否かだけになった。
APP と DELTA は、ダウンロード終了後、リブートして更新が適用されるだけになっている。

FMFUは、SPI-NOR に保存してリブートしてから NVM に保存したフラグをみて、更新を適用する。
(NCS 2.5系までは、ダウンロードして更新を適用してからリブートしていた)

フラッシュメモリへの保存

・fota_download.c

受信したデータのフラグメントは、上記のファイルにてフラッシュメモリに保存される。

フラッシュメモリへの書き込みには

・dfu_target.c

の関数を利用している。

具体的には dfu_target_write関数だ。

更新処理

ダウンロードが完了すると、

・fota_download.c

にて、dfu_target_done関数、dfu_target_schedule_updateが呼ばれる。

あとは再起動すれば、ダウンロードファイルが適用される。

前述したが、FMFU だけは再起動後にアプリの初期化処理にて、更新処理が実行される。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0