LoginSignup
11
10

More than 5 years have passed since last update.

[メモ] BLE Nano(nRF51822) 無線でファームウェアアップデート(OTA-DFU)

Last updated at Posted at 2016-07-23

概要

  • 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ブートローダの作成

  1. nRF51_SDK_10.0.0_dc26b5e.zipをダウンロードして、解凍
  2. 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を立ち上げる
  3. 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]
    => _build/nrf51422_xxac.hex ってのができる

  5. 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
    
  6. OUT_DFU_BL.HEXを焼いて起動して、スマホのBLEアプリ(nRF Connect)とかで検索かけてみると、DfuTarg というのが見える

テスト - nRF Toolsについてきてる、サンプルファームウェアでアップデート

  1. nRF Toolsを開く
  2. DFU
  3. Select Fileを押して、hrs_dfu_s110_8_0_sdk_8_0.zipを選択して、右上の Done
  4. [SELCT DEVICE]をおして、DfuTargってのを選択
  5. 真ん中辺りにあるUploadを押すと、アップロードが始まる
    IMG_5868.PNG
  6. nRF Toolsのトップメニューから、HRM => [CONNECT]からデバイス選択。Nordic_HRM(名前は、DfuTargのままかもしれないけど、スマホがキャッシュしてる??)
  7. さらに、DFUで、Nordic_HRMを選択して、アップグレードできる
    IMG_5869.PNG

自作のアプリケーションでの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. プロジェクトの種類

    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のページへリンク) =>参照
      Dual Single
      Flashのメモリマッピングの違い
      (アドレスはS110v8.0だとちょいと違ったはず)
      DualBank SingleBank
      ということは、Dualだと、
    • アプリケーションに使える領域は半分!?
    • 新しいファームウェアのをSwapのところに読み込んで、それから、アップデートするので安全。
    • (BLE(OTA)は、Dualのみ?)
  2. 同様にシリアルケーブル経由でのnRFgo Studioからアップデートもできる。
    nRFgoStudio_nRF5xBootloader.png 
    ソースは、Pythonででてた。Cに移植して、Cortex-M3ベースのホストからアップデートというのもできた。

11
10
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
11
10