概要
- 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)
4. ビルド `[F7]`<br>=> `_build/nrf51422_xxac.hex` ってのができる
5. SoftDeviceのHEXとマージする
```bat
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
## その他
1. プロジェクトの種類
```txt:nRF51_SDK_10.0.0_dc26b5e\examples\dfu\bootloader\pca10028
dual_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のページへリンク) [=>参照](http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk51.v10.0.0%2Fbledfu_memory_banks.html&cp=6_0_1_4_3_1_3_1)
Dual | Single |
---|---|
Flashのメモリマッピングの違い (アドレスはS110v8.0だとちょいと違ったはず) | |
![]() |
![]() |