3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nRF52840 - Nordic製SoC 開発環境構築(Segger Embedded Studio)

Last updated at Posted at 2023-01-28

使用機器

今回は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が起動する。
起動した際に、ライセンス認証を求めるウィンドウが立ち上がったため、こちらを参考に登録を行った。

プロジェクト構成

以下画像はプロジェクト構成であるが、実際のフォルダ構成ではなく、
プロジェクトに対してフォルダを作成 / ファイル登録したもので、プロジェクトファイルに情報が保存されている。
2023-01-28-14-14-13.png

サンプルコードを別の場所にコピーした場合、プロジェクトファイルに保存されたパス情報が異なるためビルドは通らない。
今回は、examplesと同列にsrcフォルダを作成し、使用するサンプルコードble_central/ble_app_blinky_cをコピーして使用。
不要な開発ボード/SoftDevice/開発環境用のフォルダは削除。

環境変数、includeパス設定

プロジェクト名右クリック → Options → 対象をCommonに変更 → preprocessor
→ Preprocessor Definitions
→ User Include Directories
2023-01-28-14-35-08.png

プロジェクトファイル内のc_preprocessor_definitionsc_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に以下の実装がある。

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接続

2023-01-28-15-36-49.png
J-Linkのピンアサインは、
当然以下J-Link本体のピンアサインを示している。
2023-01-28-15-38-04.png

J-Link付属のフラットケーブルを使用する場合、
フラットケーブルのコネクタも同じ形状をしているが、上記ピンアサインとは同じにはならない。
フラットケーブルの色が付いているほうが1PIN。
2023-01-28-15-43-08.png

SoftDevice書き込み

SoftDeviceは元々書き込まれている場合もある。
SoftDeviceが書き込まれていることを確認するためにnRF Connect for Desktopをこちらからダウンロード&インストールした。
2023-01-28-15-46-17.png

ProgrammerをインストールしてOpen。SELECT DEVICEから接続しているデバイスを選択。
以下のようにSoftDeviceが書き込まれていることが確認できる。
2023-01-28-15-48-01.png

書き込まれていない場合は、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"

プログラムビルド&書き込み

以下からプログラムのビルド、デバッグ、書き込みを行う。
2023-01-28-15-55-05.png
2023-01-28-15-55-30.png

nRF Connect for Desktopから書き込むことも可能。
nRF Command Line Toolsを使用して、
以下コマンドで書き込みも可能。

nrfjprog -f nrf52 --program <hex_file> --chiperase --verify

参考記事

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?