みんな忘れていたと思うし、私も忘れていたが、前回の続きだ。
体調がよいときに書いておかねば。。
今は、SoftDevice S132 の v3.0.0が焼かれている(nRF5 SDK v12に入っていたもの)。
nRFgo Studio v1.21.2ではまだバージョンが出てこないようだ。
(今気付いたが、SDKに入っているビルド済みHEXファイルは、SoftDeviceも含んだ形なんだな。)
examplesのBLE Secure DFU Bootloaderをgccでビルドするのと、DFUで送るZIPファイルを作成しようとするまでが前回だった。
まずは、ZIPファイルの作成を行う。
公開鍵はブートローダに埋め込んであるので、指定する秘密鍵もそれに対応するものでないとダメだろう。
が、秘密鍵と思われる情報がSDKに入っていないので、自分で作るのは無理そうだ。
自分で秘密鍵から作るのは後にして、examples/dfu/ble_dfu_send_hexに入っているファイルを使おう。
名前からすると、HRMサンプルのようだ。
では、ファイルは準備できたので焼いていこう。
まずは、ブートローダをnRF52832に焼く。
これはnRFgo Studioを使う。
タブの一番右が「Program Bootloader」なので、それでよいだろう。
以前のブートローダと同じく、一番後ろに配置された。
次に、ZIPファイルをスマートフォン側に置く。
dfu_test_app_hrm_s132.zipを使うことにした。
うちはAndroidで、nRF Connectをインストール済みだ。
nRF52832をリセットしてやると、ブートローダが見える。
CONNECT。
右上のDFUをタップ。
ZIPでOKし、置いたZIPファイルを選択。
うまくいった。
が、これだと何だかわからないので、普通にZIPファイルを作った場合もやっておこう。
> nrfutil pkg generate --application nrf52のHRSサンプル.hex test.zip
"--key-fileが無い"と怒られた。
そして、以前のdfu genpkgは無くなっているようだ。
しょうがないので、nRFgo Studioの中に入っているnrfutilを使って作成。
あー、そしてちゃんとしたapplicationが焼かれているとブートローダは動かないので、ボタン4を押しながら起動しないといかん。
BUTTON_4は16になっているので、GPIO16とGNDをスイッチで接続(内部でプルアップされてるはず)。
ボタンを押しながらnRF52を起動するとDfuTargが見えるので、同じ手順でDFUを実行。
そうすると、グラフの画面までは進むのだが、すぐに切断されて終わった。
うん、まあうまくいったというか、うまく失敗したと思ってよいのかな。
では、自分で秘密鍵を作るところからやってみよう。
書いてあるとおりにやる。
$ nrfutil keys generate priv.pem
Generated private key and stored it in: priv.pem
$ nrfutil keys display --key pk --format code ./priv.pem --out_file dfu_public_key.c
$
できたdfu_public_key.cをオリジナルと置き換えてmake。
できたpriv.pemを使って、HRSサンプルのZIPを作成。
$ nrfutil pkg generate --application nrf52832_xxaa.hex --key-file priv.pem test2.zip
Error: --hw-version required.
まだダメらしい。
表では例として52とあったので、nRF52の52なのか。
ただ、これを指定しても、--sd-reqと--application-versionが要求された。
$ nrfutil pkg generate --application nrf52832_xxaa.hex --key-file ../priv.pem --hw-version 52 --sd-req 0x8c --application-version 0xff test2.zip
Zip created at test2.zip
0xffにするとスキップされるようだが、--sd-reqはよくわからん。
nRFgoで表示されたFirmwareのIdが0x008cだったので、そうしてみた。
これでブートローダを焼いてやってみると・・・だめだった。
さっきと同じで、すぐに切断されてしまった。
ちゃんと読もう。
・・・うん、どうもブートローダをpca10040_debugの方でビルドしたのがよくなかったようだ。
ifdefでNRF_DFU_DEBUG_VERSIONを見ているようで、先ほど置き換えたdfu_public_key.cも、おそらくifdefで分けられていた。
ソースの方でも使っていたので、何かあるのだろう。
ともかく、ブートローダをpca10040の方でビルドして焼き直すと、作ったZIPファイルでDFUできた。
examplesに入っていたZIPファイルを指定すると、ちゃんと失敗するので、うまくいっているのだろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。