使用機器
今回はBluetooth機能を持ったNordic nRF52840を搭載した村田製作所のType2AB evaluation boardを使用。
BLEの検証でセントラル、ペリフェラル用に2台使用。
UWBチップが載ったボードだが、今回はUWBには触れない。
ソフトの書き込みにJ-Linkを使用。
IDE
Nordic製チップの開発において無料で利用可能なSegger Embedded Studioを使用。
(STMicroelectronics製チップの開発を行う場合は、無料で利用可能なSTM32CubeIDEが良さそう。)
Segger Embedded Studioは、こちらからEmbedded Studio for ARM
をダウンロード&インストール。
また、J-Link用にこちらからJ-Link Software and Documentation Pack
をダウンロード&インストール。
SDK
ソフトウェア開発にはnRF5 SDKを利用する。
こちらからダウンロード。 今回は、バージョン16.0を使用。
以下SDKのフォルダ構成
nRF5SDK160098a08e2/
│
├─ components/
├─ config/
├─ documentation/
├─ examples/ # サンプルコード
├─ external/
├─ external_tools/
├─ integration/
├─ modules/
├─ license.txt
├─ nRF_MDK_8_27_0_IAR_NordicLicense.msi
└─ nRF_MDK_8_27_0_Keil4_NordicLicense.msi
サンプルコード
examples
フォルダに各種サンプルコードがあるので、これらをベースに開発を進めるのが良い。
nRF5 SDKバージョン16.0 サンプルコードのドキュメントはこちら。
今回は、BLE機能の検証に、最も単純と思われるBLE Blinkyアプリケーションのサンプルを使用。
このサンプルでは、
ペリフェラルはアドバタイズを送信、セントラルはアドバタイズをスキャンし接続を確立する。
その後、ペリフェラル側のボタン状態(ボタン押下により変化)をセントラルに送信し、セントラル側のLEDが変化する。
- セントラル側コード:
examples/ble_central/ble_app_blinky_c
- ペリフェラル側コード:
examples/ble_peripheral/ble_app_blinky
以下サンプルコードのフォルダ構成
nRF5SDK160098a08e2/
│
├─ components/
├─ config/
├─ documentation/
├─ examples/ # サンプルコード
… │
…
└─ ble_central/
│
…
├─ ble_app_blinky_c
… │
…
├─ pca10040 # Nordic製開発ボードの種類
└─ pca10056 # 同じチップが載った開発ボードのフォルダを選択
└─ s140 # SoftDeviceの種類
├─ arm4 # 開発環境の種類
…
└─ ses # Segger Embedded Studio
│
├─ ble_app_blinky_c_pca10056_s140.emProject # プロジェクトファイル
├─ ble_app_blinky_c_pca10056_s140.emSession # プロジェクトのセッション情報
└─ flash_placement.xml # ソフトウェアのセクション情報
使用するチップ、機能、開発環境に応じて開くプロジェクトファイルを選択する必要がある。SoftDeviceについては後述。
プロジェクトファイルble_app_blinky_c_pca10056_s140.emProject
をダブルクリックすると、Segger Embedded Studioが起動する。
起動した際に、ライセンス認証を求めるウィンドウが立ち上がったため、こちらを参考に登録を行った。
プロジェクト構成
以下画像はプロジェクト構成であるが、実際のフォルダ構成ではなく、
プロジェクトに対してフォルダを作成 / ファイル登録したもので、プロジェクトファイルに情報が保存されている。
サンプルコードを別の場所にコピーした場合、プロジェクトファイルに保存されたパス情報が異なるためビルドは通らない。
今回は、examples
と同列にsrc
フォルダを作成し、使用するサンプルコードble_central/ble_app_blinky_c
をコピーして使用。
不要な開発ボード/SoftDevice/開発環境用のフォルダは削除。
環境変数、includeパス設定
プロジェクト名右クリック → Options → 対象をCommonに変更 → preprocessor
→ Preprocessor Definitions
→ User Include Directories
プロジェクトファイル内のc_preprocessor_definitions
、c_user_include_directories
に保存されているため、直に編集も可能。
SoftDevice
BLE Blinkyアプリケーションのドキュメントにも以下のように記載されているが、
BLE機能を使う場合、SoftDeviceを別途書き込む必要がある。書き込み方法については後述。
Important: Before you run this example, make sure to program the SoftDevice.
使用するSoftDeviceは、使用するチップと機能によって選択する。こちら参照。
以下SoftDeviceのフォルダ構成。バイナリのみ提供されている。
nRF5SDK160098a08e2/
│
├─ components/
… │
…
└─ softdevice/
│
…
├─ s132 # SoftDeviceの種類
└─ s140
│
…
└─ hex # SoftDeviceのバイナリ
ピンアサイン設定
今回Nordic公式開発ボードpca10056
用のソースコードを使用しているため、
実際に使用するボードのピンアサインに変更する必要がある。
ピンアサイン設定は、nRF5SDK160098a08e2/components/boards/pca10056.h
にある。
このファイルを編集することもできるが、
custom_board.h
を作成し、独自のピンアサイン設定を行うことができる。
nRF5SDK160098a08e2/components/boards/boards.h
に以下の実装がある。
#if defined(BOARD_NRF6310)
#include "nrf6310.h"
#elif defined(BOARD_PCA10000)
#include "pca10000.h"
//
// 省略
//
#elif defined(BOARD_PCA10056)
#include "pca10056.h"
//
// 省略
//
#elif defined(BOARD_CUSTOM)
#include "custom_board.h"
#else
#error "Board is not defined"
custom_board.h
を参照させるために、
環境変数からBOARD_PCA10056
を削除し、BOARD_CUSTOM
を追加する。
ソフト書き込み
J-Link接続
J-Linkのピンアサインは、
当然以下J-Link本体のピンアサインを示している。
J-Link付属のフラットケーブルを使用する場合、
フラットケーブルのコネクタも同じ形状をしているが、上記ピンアサインとは同じにはならない。
フラットケーブルの色が付いているほうが1PIN。
SoftDevice書き込み
SoftDeviceは元々書き込まれている場合もある。
SoftDeviceが書き込まれていることを確認するためにnRF Connect for Desktopをこちらからダウンロード&インストールした。
ProgrammerをインストールしてOpen。SELECT DEVICEから接続しているデバイスを選択。
以下のようにSoftDeviceが書き込まれていることが確認できる。
書き込まれていない場合は、Programmer上 File memory layout にSoftDeviceのバイナリをドラッグ&ドロップし、
Erase&Writeもしくはwriteで書き込む。
IDEから書き込む場合は、
プロジェクトファイル内のdebug_additional_load_file
に以下のように指定することで、ファームウェアと一緒に書き込まれる。
設定名にdebugとついているが、releaseでビルド、ダウンロードした場合も、問題なくSoftDeviceはかきこまれた
c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED; ..."
c_user_include_directories="../../../config; ... "
debug_additional_load_file="../../../../../../components/softdevice/s140/hex/s140_nrf52_7.0.1_softdevice.hex"
debug_register_definition_file="../../../../../../modules/nrfx/mdk/nrf52840.svd"
プログラムビルド&書き込み
nRF Connect for Desktopから書き込むことも可能。
nRF Command Line Toolsを使用して、
以下コマンドで書き込みも可能。
nrfjprog -f nrf52 --program <hex_file> --chiperase --verify