nRF connect SDK:USB DFU


初めに

この記事は古いです。
現時点でどうなっているのかは分かりませんが、自分自身が今のところUSB DFUを必要としないので今後の更新もおそらくありませんし、調べることもしないと思います。
せっかくなので当時調べて書いたものを公開しておきます。

ようやくDFUに辿り着いた・・・?

探しているのはBLE DFU(FOTA)ですが、その関連の記事を読んでもさっぱり理解できない(笑)ので、やれることから順番にやっていこうと思います。それにUSB DFUだって知っているのと知らないのでは大違いですしね。
やっと見つけました。
https://devzone.nordicsemi.com/nordic/nrf-connect-sdk-guides/b/software/posts/device-firmware-update-dfu-with-mcuboot-bootloader

実際にやることは上記のスレッドの内容そのままなのでここでは省略します。別にあえて日本語で再度説明することでもないですし。

ところがいざ実行してみると・・・

なんじゃこりゃあ!(by 松田優作)
やっと見つけてようやくうまくいく・・・と思っていたらなぜか動きません。なんでなんだよコンチクショウ!

メッセージを見る限りではBOOT_MAX_IMG_SECTORSの設定が128では小さすぎると言っているように見えます。じゃあ、ということで

prj.conf
CONFIG_BOOT_MAX_IMG_SECTORS=144

とりあえず144くらいに増やせばいいのかなぁ・・・。セクターって言っているから1セクター4Kbytesで64Kbytesも増えれば十分でしょ。

・・・ダメでした。
じゃあ思い切って256くらいにしてみるか。コンパイラーがエラーさえ出さなければきっと大丈夫なはず!

・・・これでもダメでした。
ここらへんでさすがに「いや、これはこの設定が間違っているわけじゃないよね。きっと間接的に何かが間違っていてこのメッセージが出ているんだ」と気が付きますが何をいじっていいのか皆目見当もつきません。
ということでエラーメッセージで検索してみると・・・やっぱり同じことを言っているスレッドがありました、ええ。
https://devzone.nordicsemi.com/f/nordic-q-a/77483/mcuboot-reading-sectors-failed-problem-with-nrf-sdk-v1-6-0
残念ながらこのスレッドでは解決方法は示されていませんでした。つまり「よく分からない」というのが結論になります。

###ちなみにBootloaderそのものは生きているっぽい

Bootloaderを立ち上げて見たらCOMポートが出てくるので、DFUそのものは生きていると思われますが、通常アプリケーションが動かないのでは意味がないですよね・・・。
#どういうことなの?このスレッドがインチキなの?
考えても考えても全く分からないので、こういう時はバージョンも含めて合わせて検証するのがスジってもんです。nRF connect SDKをインストールしたりアンインストールしたりするのが非常にめんどくさいし時間ももったいないなとは思いますが、理解できない現象にぶち当たっている以上はやるしかないです。
ということでスレッドで使用されているバージョンと同じSDK 1.4.0をインストールして同じことをしてみたら・・・。
できた!!!
###つまり・・・
ここまで検証ができたらだいたい想像がつくと思いますが、どうも新しいSDKの不具合なんじゃないかという気がしてきたわけです。仮に不具合じゃなくて何かしら解決方法があるとしても現時点ではどれだけ調べても分からないので、そういうのはもう不具合だと割り切って見捨てるべきです(笑)
###でも・・・
でもどうせ使うならなるべく新しいSDK使いたいですよね。どう違うのかよく分かっていないですが(笑)
ということで、全く同じことをSDK 1.5.1で試してみましたが・・・。

お、ちゃんと動くじゃないですか!
ということで当面はSDK 1.5.1で色々と進めていきたいと思います。
言うまでもないですがもちろんDFUもできますよ!