nRF52840 を Segger Embedded Studio 開発環境で First Try

nRF52840 とは、Nordic の Bluetooth/BLE の乗ったSoC (System-on-a-chip) 。
Bluetooth/BLEのチップは数社から出ているが、Nordicのものが一番確実。
その中でも nRF52840 は 2018/11/14 時点で最もパワフルな最新型。

今回、nRF52840 を使っての開発環境を構築、動作テストとしてLチカを行ってみます。

# 環境

## 開発ボード

Raytac の MDBT50Q–DB

![IMG_20181114_155946.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/dfe5fbaf-d0d8-42f5-e956-b0f7c1bb8f72.jpeg)

https://www.raytac.com/upload/download_files/8cef7c4b9cf6dac898a95442dc7c6834.pdf

ここに掲載されているものです
https://fukumi.co.jp/products/bluetooth


Nordic公式の開発ボードもあり、

PCA10056「nRF52840 DK」
PCA10059「nRF52840 Dongle」

がnRF52840 のものですが、残念ながら両者とも技適が通っていないので今回はMDBT50Q–DB をチョイス。



## 書き込み装置
J-link
![IMG_20181114_160024.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/0dc5c4ce-2734-f61f-c4cc-6df6226077db.jpeg)

## PC 

Windows10 Professional


# Keilを試してみる（断念）

KeilはWindowsのみの対応ということで、この記事はWindowsPCで使う記事になっています。

組み込み用のツールはWindows一強。
そのうえ新しい環境に対する対応が劇遅だったりして激しく萎える

以下から Keil をダウンロード。
https://www.keil.com/demo/eval/arm.htm
今回は Version 5.26 を使いました。
Keilのインストールして、起動するとPack Installerの画面になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139524/4d80eeec-f83c-2668-720b-8083af122c32.png)

すると、右のPack欄に対応するパッケージが表示されるので、必要なものをインストールします。
左のペインから
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139524/e7ec362f-dd27-502a-454e-48ddc5aefb28.png)
を選び、右のペインの
Device_SpecificのNordicSemiconducter::の
nRF_Drivers
nRF_BLE
nRF_Examples
nRF_Libraries
nRF_S140


Genericの
ARM::CMSIS
Keil::ARM_Compiler
Keil::MDK_Middleware


をインストールするのですが、S140が無い。
Compatiblity matrix を見ると

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139524/bbbcc5dd-4f0f-22a4-94ca-29243e375ca4.png)

The SoftDevice S132 v3.0.0 has limitations when running on nRF52840 and should only be used in the context of demonstration and experimenting with the new device.
2 The S132 SoftDevice Specification v3.1 describes the S132 SoftDevice v3.0.0 running on the nRF52832 IC and is not fully applicable to the nRF52840 IC.

とあって、S132を選択するのでいいのだかどうなのだかよくわからない感。

https://devzone.nordicsemi.com/f/nordic-q-a/27162/no-software-packs-visible-in-uvision-5-for-nrf52840-nrf52832

ここらへんに、S140をちゃんと設定する方法があるような・・・しかしながら、Keil使うのは今回は諦めました。

# Embedded Studio

SEGGER の　 Embedded Studio
は、Windows/Mac/Linux対応でNordicチップの開発をする場合は無料です。
今回は、

Embedded Studio for ARM, Windows, 64-bit
J-Link Software and Documentation Pack (version 6.10g or later)
をダウンロードしました。

ダウンロード場所
https://www.segger.com/downloads/embedded-studio/
https://www.segger.com/downloads/jlink/

SES起動して、「build」-「build and debug」 でライセンスを通します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139524/47a5d791-80e8-546f-d32c-5ffc76730277.png)
図の「Activate Your Free License」からライセンスを登録します。

ここら辺を参考にして、
https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.gs.ses%2Fdita%2Fgs%2Fdeveloping%2Finstall_toolchain.html

以下のページから

~~https://www.nordicsemi.com/index.php/eng/Products/nRF52840~~
~~nRF5-SDK-zip ~~
~~nRF5x-Command-Line-Tools-Win64 ~~
~~をダウンロードします。 ~~
~~また、以下のオプションファイルもダウンロードします。~~ 
~~S140-SD-v6~~ 
~~nRF-Connect-Windows~~ 


(2018/12/9修正：上記のリンクは変更になりました。現在のリンクは↓)

https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs
から、最新のパッケージを選択して(2018/11/14時点では「15.2.0nRF5 SDK」：以下これを使った記録)、画面下部の「You have selected:」
で
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139524/b6410b67-6b5c-242d-67db-9869fd47e9f4.png)

「Download Files」 して、解凍します。

(2020/02/10追加 画像ではSDKといっしょにs112,s132,s140のSoftdeviceもダウンロードしていますが、実際にはSDKだけのダウンロードでOKです。
SDK内の components/softdevice/ に同梱されていました。)



nRF5-SDK-zipを解凍します。
"Setting up the nRF5 SDK"
C:/Nordic/SDK に解凍するのを推奨されています。
C:/Nordic/SDK 下に
components
config
documentation
...
があるようにします。

(2019/07/11修正追加↓)
そのあと、nRF Command Line Tools をダウンロードしてインストールします。
https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Command-Line-Tools


# ターゲットボードを接続する

Nordicのボードをプログラムするときは、定番はJ-linkらしいです。
深圳に行ったときに買ってきたJ-linkがありました。


MDBT50Q–DB と　J-linkを使って接続します。

![IMG_20181114_161708.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/b62ba386-fa3e-677a-22c2-935eb5ab949e.jpeg)
![IMG_20181117_094138.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/6293bfb3-4088-bfa1-05d8-5d971a1451ec.jpeg)
![IMG_20181117_094250.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/0995ab17-a55f-4c57-eb54-62f4ddf1b37b.jpeg)

# SESを設定する

SES中には、
pca10059
pca10056
pca10040
pca10040e

というボードが用意されています。このうち、nRF52840
のものは

PCA10056「nRF52840 DK」
PCA10059「nRF52840 Dongle」

です。両者の違いは

nRF52840 Dongle がほぼ単体のnRF52840＋動作に必要最小限程度の回路であるのに対して、
nRF52840 DK はフラッシュメモリICが追加されていたりいろんな機能が追加されています。

プログラムの書き込みインターフェース的にはnRF52840 Dongle はこれにJ-linkなどを接続する作業をしないといけませんが、nRF52840 DK はサブCPUとしてATSAM3U2CA-AUがあり、これがJ-Link
やDrag-and-drop Mass Storage Device (MSD) programmingを実現しています。

今回使っている Raytac の MDBT50Q–DB は nRF52840 DK にLEDやスイッチのピン配置を合わせています。なので　PCA10056 のサンプルを基に開発していきます。

C:\Nordic\SDK\examples\
の中にあるプロジェクトを基にするのですが、myprojectsフォルダを作ってそこにコピーします。

c:\Nordic\SDK\myprojectsを作ります。

そして、
C:\Nordic\SDK\examples\peripheral\blinkey
のプロジェクトフォルダをコピーし、myprojectsフォルダに入れます。

C:\Nordic\SDK\myprojects\peripheral\blinkey

というフォルダにします。
コピーが終わったらいらないフォルダ　pca10040,pca10040e,pca10059を削除しておきます。


なお、フォルダの構成を上記例とは別にすることができますが、SDKとの相対パスが変更になる場合はプロジェクトファイルを書き換える必要があります。

https://shizuk.sakura.ne.jp/bluetooth/nrf52/mkproduct.html
これを参考にしてください。


さて、
C:\Nordic\SDK\myprojects\peripheral\blinky\pca10056\mbr\ses\blinky_pca10056_mbr.emProject
を開きます。

「Build」 - 「Build and Run」

とすると、ボードにプログラムが書き込まれ、LEDが点灯します

![IMG_20181117_094843.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/868de4ed-8b55-8b8f-23d4-11209d9254c3.jpeg)