nRF52840 DKで遊ぼう①~Getting started~
はじめに
今まで、nRF52840 USB Dongleで遊んでいましたが、外付けJ-Linkコネクタがないとデバッグできなかったり、Nordicから配布されているサンプルが少なかったり、とお試しで色々動かすのに不都合でした。
ということで、開発キットを入手したので、今日からはこちらで遊んでいきます。
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します。
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側で扱えるようにする必要があります。
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>