nRF52840 DKで遊ぼう①~Getting started~

はじめに

今まで、nRF52840 USB Dongleで遊んでいましたが、外付けJ-Linkコネクタがないとデバッグできなかったり、Nordicから配布されているサンプルが少なかったり、とお試しで色々動かすのに不都合でした。

www.nordicsemi.com

ということで、開発キットを入手したので、今日からはこちらで遊んでいきます。

Getting started

出荷状態の開発キットには、あらかじめFlashにソフトウェアが書き込まれています。 お試しで動かしたい場合は、J2コネクタにmicro USBを差し込むだけです。

開発キット上の緑色LEDが点滅します。また、開発キット上のボタンを押すと、対応するLEDが点滅するようになります。

pre-compiledサンプル書き込み

nRF SDKで提供されているpre-compiledサンプルを書き込みます。 コマンドラインで操作できるように、環境を構築していきます。

SEGGER J-Link

私は、Ubuntu 16.04を使っているので、debian用のパッケージをダウンロードし、インストールしました。 各プラットフォームごとにインストーラが用意されています。

https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb

$ sudo dpkg -i JLink_Linux_V642f_x86_64.deb

nRF52シリーズは、SEGGER J-LinkがMass Storage Deviceとして見えてしまい、支障をきたす問題があるようなので、Mass Storage DeviceをDisableします。

wiki.segger.com

J-Linkを起動して、MSDDisableを入力します。

$ JLinkExe
$ ./JLinkExe 
SEGGER J-Link Commander V6.42f (Compiled Feb 26 2019 17:01:38)
DLL version V6.42f, compiled Feb 26 2019 17:01:29

Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan  7 2019 14:07:15
Hardware version: V1.00
S/N: 683516743
VTref=3.300V


Type "connect" to establish a target connection, '?' for help
J-Link>MSDDisable
Probe configured successfully.
J-Link>

nrfjprog

下記URLからLinux 64bit版をダウンロードします。

nRF5 Command Line Tools - Downloads - nordicsemi.com

解凍します。

$ tar xf nRF-Command-Line-Tools_9_8_1_Linux-x86_64.tar

nrfjprogというディレクトリが展開され、その下に、.soファイルやnrfjprogファイルが展開されます。 実行パスに追加して、どこからでもnrfjprogを叩けるようにしておきます。

$ nrfjprog  --version
nrfjprog version: 9.8.1
JLinkARM.dll version: 6.42f

Flash書き換え

nrfjprogを使って、Flashを書き換えます。 書き込むサンプルは、nrf5_SDK/examples/peripheral/blinky/hex/blinky_pca10056_mbr.hexです。

$ nrfjprog --eraseall -f nrf52
$ nrfjprog -f nrf52 --program blinky_pca10056_mbr.hex
$ nrfjprog --reset -f nrf52

最後のresetを実行すると、LEDが点滅します。

VirtualBoxでJ-Linkうまく動かない問題の解決方法

私の環境は、VirtualBoxなのですが、USBデバイスの認識で問題がありました。 USBデバイスとして3系統見えるようで、Product ID 1015 / 0101 / 0105のものを、VirtualBox側で扱えるようにする必要があります。

f:id:tomo-wait-for-it-yuki:20190228090430p:plain
VirtualBox J-Link

SEGGER J-Linkを3つ、フィルターに追加していますが、上記の通り、Product IDが違うため、別物です。

このように設定すると、無事、/dev/ttyACMが見えるようになります。

うーん、組込みやるときはnative Linuxが欲しいですね…。

以下、問題発生時の現象です。 USBを接続した直後は、VirtualBox側でSEGGERのデバイスが見えています。

$ lsusb
Bus 001 Device 010: ID 1366:1015 SEGGER 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

JLinkを起動すると、SEGGERデバイスが見えなくなります。

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

JLinkコマンドの方でも、通信がタイムアウトしていました。

./JLinkExe 
SEGGER J-Link Commander V6.42f (Compiled Feb 26 2019 17:01:38)
DLL version V6.42f, compiled Feb 26 2019 17:01:29

Connecting to J-Link via USB...Updating firmware:  J-Link OB-SAM3U128-V2-NordicSemi compiled Jan  7 2019 14:07:15
Replacing firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 12 2018 16:05:20
FAILED: Communication timeout. Emulator did not re-enumerate.
J-Link>

参考