概要
- nRF51822のDFU bootloaderサンプルを入れて、スマホアプリnRF ToolsのDFUから、OTAアップデートをする。
- ちなみに、OTA = Over The Air 無線で。
環境
- BLENano (nRF51822)
- SoftDevice S110 v8.0 (nRF51SDK v10.0付属)
- nRF Tools (スマホアプリ - iPhone使ってます)
- MDK-ARM Lite v5.18
- nRF51_SDK_10.0.0_dc26b5e.zip
-
nRFgo Studio
-
nrfutil.exe
: C:\Program Files (x86)\Nordic Semiconductor\nRFgo Studio\ -
mergehex.exe
:C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin
-
手順
DFUブートローダの作成
- nRF51_SDK_10.0.0_dc26b5e.zipをダウンロードして、解凍
-
nRF51_SDK_10.0.0_dc26b5e\examples\dfu\bootloader\
ここらへんがDFU ブートローダ関連。
=>nRF51_SDK_10.0.0_dc26b5e\examples\dfu\bootloader\pca10028\dual_bank_ble_s110\arm5_no_packs\dfu_dual_bank_ble_s110_pca10028.uvprojx
をダブルクリックして、MDK-ARMを立ち上げる -
nrf51422_xxac/Application/main.c
を開いて、必要あれば、ボタンとか、LEDのあたりのポート番号を直す。-
BOOTLOADER_BUTTON
は、BSP_BUTTON_3 => BUTTON_4 => 20で、 BLENanoには関係なさそうなのでほっとく。ボタンつけたら、そのポート番号へ。 - ボタンを押しながら起動で、DFUモードになる、ってことができる。
main.c...LED周りだけ直す。といっても、書き込み中点灯、書き込み終了で消灯くらいだけど。#define BOOTLOADER_BUTTON BSP_BUTTON_3 /**< Button used to enter SW update mode. */ #define UPDATE_IN_PROGRESS_LED BSP_LED_2 /**< Led used to indicate that DFU is active. */ //For BLENano #undef UPDATE_IN_PROGRESS_LED #undef LED_START #undef LED_STOP #undef LEDS_MASK #define UPDATE_IN_PROGRESS_LED (19)//P0_19 BLENano本体のLED. #define LED_START (19) #define LED_STOP (19) #define LEDS_MASK (1<<19)
-
ビルド
[F7]
=>_build/nrf51422_xxac.hex
ってのができる-
SoftDeviceのHEXとマージする
rem プロジェクトのあるフォルダに移動して. cd C:\BLE\nRF51_SDK_10.0.0_dc26b5e\examples\dfu\bootloader\pca10028\dual_bank_ble_s110\arm5_no_packs\ rem HEXマージ => OUT_DFU_BL.HEXができる。 "C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" -m ..\..\..\..\..\..\components\softdevice\s110\hex\s110_nrf51_8.0.0_softdevice.hex _build\nrf51422_xxac.hex -o OUT_DFU_BL.HEX
OUT_DFU_BL.HEX
を焼いて起動して、スマホのBLEアプリ(nRF Connect
)とかで検索かけてみると、DfuTarg
というのが見える
テスト - nRF Tools
についてきてる、サンプルファームウェアでアップデート
- nRF Toolsを開く
DFU
-
Select File
を押して、hrs_dfu_s110_8_0_sdk_8_0.zip
を選択して、右上のDone
-
[SELCT DEVICE]
をおして、DfuTarg
ってのを選択 - 真ん中辺りにある
Upload
を押すと、アップロードが始まる - nRF Toolsのトップメニューから、
HRM
=>[CONNECT]
からデバイス選択。Nordic_HRM
(名前は、DfuTarg
のままかもしれないけど、スマホがキャッシュしてる??) - さらに、DFUで、
Nordic_HRM
を選択して、アップグレードできる
自作のアプリケーションでのzipパッケージ作成
-
nrfutil.exe
を使って、zipのパッケージを作る。例nrfutil.exe dfu genpkg application.zip --application dfu_test_app_hrm.hex --dev-revision 0xffff --dev-type 0xffff --sd-req 0x0064
その他
-
プロジェクトの種類
nRF51_SDK_10.0.0_dc26b5e\examples\dfu\bootloader\pca10028dual_bank_ble_s110 dual_bank_ble_s130 dual_bank_ble_s310 dual_bank_serial_s110 dual_bank_serial_s130 dual_bank_serial_s310 single_bank_serial_s110 single_bank_serial_s130 single_bank_serial_s310
- ble/serial : BLEのOTA経由 / シリアルケーブル経由
- s110/s130/s310 : SoftDeviceの違い
- dualとsingle bank: (図はNordicのページへリンク) =>参照
Dual Single Flashのメモリマッピングの違い
(アドレスはS110v8.0だとちょいと違ったはず) - アプリケーションに使える領域は半分!?
- 新しいファームウェアのをSwapのところに読み込んで、それから、アップデートするので安全。
- (BLE(OTA)は、Dualのみ?)
同様にシリアルケーブル経由でのnRFgo Studioからアップデートもできる。
ソースは、Pythonででてた。Cに移植して、Cortex-M3ベースのホストからアップデートというのもできた。