Help us understand the problem. What is going on with this article?

BLEデバイスの開発環境を構築する(nRF51822 & MacOS編)

More than 5 years have passed since last update.

Bluetooth Low Energy(以下BLE)の通信モジュールには様々なものがありますが、ここではNordic Semiconductor社のBLE SoC「nRF51822」を使って、BLEデバイスの開発環境をMacOS上で構築する方法をご紹介します。

この記事は公式の手順ではないことをご了承下さい。また、Windowsユーザーの方は、Nordic Semiconductor社よりWindows向けの開発ツールが提供されていてドキュメントもしっかりあるので、この記事を見る必要はありません。

nRF51822は、2.4GHz帯通信モジュール、CPU(ARM Cortex M0)、Flashメモリ(256KB)、RAM(16KB)を1チップに搭載し、SoftDeviceと呼ばれるBLEとハードウェアの制御が可能なソフトウェアがあらかじめ用意されているので、BLEデバイス開発者はこのSoftDeviceを使って簡単にBLEデバイスの開発ができるようになっています。
(詳しく知りたい方は、nRF51822に関するスライドを見てみるといいと思います)

nRF51822ベースのBLEモジュールは、国内でも複数のメーカーから提供されているので、それらを使って開発すると認証取得コストを抑えられます。

nRF51822の評価キット・開発キット

nRF51822の評価キット・開発キットは技適未取得です。nRF51822ベースのBLEモジュールメーカー各社から販売されている技適取得済みの開発キットがありますのでそちらを利用しましょう。ここではキットの内容を参考までにご紹介します。

Nordic社から評価キット開発キットが提供されています。ただし、開発キットを使う場合は、nRFgo Starter Kitにセットする必要があります。

評価キットには評価ボードとUSBドングル型が含まれています。MouserChip1Stopなどで扱われています。

開発キット+nRFgo Starter Kitには、LED8個、タクトスイッチ8個とDisplayが実装された汎用的なボードを利用することができ、複雑なアプリケーションの開発を行う際に便利そうです。また、開発キットには、アプリケーションを書き込むための J-Link LITE がボードとは別に付属しています。こちらも同じくMouserChip1Stopなどで扱われています。

nRF51-SDKとSoftDeviceをダウンロードする

  1. nRF51822製品ページDownloads タブを開く
  2. SOFTWAREnRF51-SDK-zip をダウンロードする
  3. SOFTDEVICESS110-SD-v6 をダウンロードする
$ mkdir /usr/local/nrf51_sdk
$ mv ~/Downloads/nrf51_sdk_v5_1_0_36092 /usr/local/nrf51_sdk/

$ mkdir /usr/local/softdevice
$ mv ~/Downloads/s110_nrf51822_6 /usr/local/softdevice/

SDKやSoftDeviceをダウンロードするにはキットに記載されている Nordic Product Key が必要です。

J-Linkソフトウェアをダウンロードする

  1. SeggerのDownloadページを開く
  2. J-Link software & documentation pack for MACDownload ボタンを押す
  3. nRF51評価ボードの SEGGER と書かれたシールに記載されているシリアル番号をDownloadページのフォームに入力し Submit Serial number ボタンを押す
  4. ダウンロード後、インストーラーを起動しJ-Linkソフトウェアをインストールする
  5. ターミナルで JLinkExe と打ってSEGGER J-Link Commanderと表示されれば成功です

Xcode Command line toolsをインストールする

  1. ターミナルで以下のコマンドを実行します。 $ xcode-select --install
  2. ツールがインストールされていない場合は、インストール確認ダイアログが表示されるので「インストール」ボタンを押す

GCC ARM Cortex-M Toolchainをダウンロードする

  1. GNU Tools for ARM Embedded Processors ページの画面右にあるDownloadsメニューより gcc-arm-none-eabi-mac.tar.bz2 をダウンロードする
  2. ファイルを解凍し、/usr/local/gcc_arm ディレクトリに展開したディレクトリを移動する
$ mkdir /usr/local/gcc_arm
$ mv ~/Downloads/gcc-arm-none-eabi-4_8-2013q4 /usr/local/gcc_arm/

nrf51-pure-gcc-setupのテンプレートをダウンロードする

GCCとJ-Linkで開発できるmakeビルドスクリプトのテンプレートをgithubから入手します。

$ git clone git@github.com:hlnd/nrf51-pure-gcc-setup.git
$ mv nrf51-pure-gcc-setup-master/template /usr/local/nrf51_sdk/

サンプルプロジェクトをダウンロードしビルドする

SDKにも含まれているサンプルプログラムを今回利用するmakeビルドスクリプトでビルドできるようにセットアップしたものを用意しました。
blinky_example.zip

$ cd ~/Downloads/blinky_example/pure-gcc/

$ make clean
$ make

...

/usr/local/gcc_arm/gcc-arm-none-eabi-4_8-2013q4/bin/arm-none-eabi-size _build/blinky_example_blank.elf
   text    data     bss     dec     hex filename
   1732    1092      28    2852     b24 _build/blinky_example_blank.elf

makeコマンドを実行すると、pure-gcc/buildディレクトリ内にblinky_example_blank.bin, blinky_exampleblank.elf, blinky_example_blank.hexが生成されます。

JLink/JLink-Liteでファームウェアを書き込む

makeビルドスクリプトには、JLinkでファームウェアを書き込むスクリプトが含まれています。ファームウェアを書き込む前にFlashメモリ上を一度クリアしておきましょう。

// 全てクリアする
$ make erase-all

// main.cのプログラムを書き込む
$ make flash

printf "r\nloadbin _build/blinky_example_blank.bin 00000000\nr\ng\nexit\n" > flash.jlink
JLinkExe -device nrf51822 -if swd -speed 1000  flash.jlink
SEGGER J-Link Commander V4.80h ('?' for help)
Compiled Feb 28 2014 21:56:56

Script file read successfully.
Info: Device "NRF51822_XXAA" selected (257 KB flash, 16 KB RAM).
DLL version V4.80h, compiled Feb 28 2014 21:56:51
Firmware: J-Link OB-SAM3U128 V1 compiled Dec 11 2013 20:20:11
Hardware: V1.00
S/N: 480100527 
VTarget = 3.300V
Info: Found SWD-DP with ID 0x0BB11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 4 code (BP) slots and 0 literal slots
Found 1 JTAG device, Total IRLen = 4:
Cortex-M0 identified.
Target interface speed: 1000 kHz
Processing script file...

Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

Loading binary file... [_build/blinky_example_blank.bin]
Writing bin data into target memory @ 0x00000000.
Info: J-Link: Flash download: Flash programming performed for 1 range (3072 bytes)
Info: J-Link: Flash download: Total time needed: 0.167s (Prepare: 0.084s, Compare: 0.001s, Erase: 0.000s, Program: 0.075s, Verify: 0.000s, Restore: 0.006s)

Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.



Script processing completed.

make: [flash] Error 1 (ignored)

Error 1 (ignored)と出てますが、書き込みに成功しプログラムが動作しました。

J-Linkに接続できない場合

オンボードのJ-Linkを使っている場合、make erase-allやmake flashでJ-Linkに接続しようとすると、

Can not connect to J-Link via USB.

となることがあります。その場合、毎回コマンドを使ってUSB CDCを無効にする必要があります。

$ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDCACMData.kext
$ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDCECMData.kext
$ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDCACMControl.kext
$ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext

一方、J-Link LITEを使うとこのコマンドを実行する必要はありません。

http://hg.cmason.com/nrf/src/66fec128728e1d131e12937cf1194694267f83a2/scripts/disable_cdc.sh?at=default

mkftr
iOSアプセサリ(App + BLE Accessory)の開発をやっています。ここではiOSアプリやBLEデバイスの開発について書いていこうと思います。
http://madebymira.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした