4月なので、「春だからnRF51822でBLEでもやってみるか」と思ってる方がいるかもしれない(いないかもしれない)。
なので、ちょろっとはじめてみたい人向けに書いてみよう。
mbedが使えるともうちょっと簡単かもしれないのだけど、私は使わないので、非mbed環境限定だ。
うん、その時点でニーズがかなり少なそうだ。
あと、はじめ方しか書かないので、どうやってやるかなどは調べてくだされ。
キーワードがわかれば、検索すればもっとよい記事が出てくるはずだ。
準備するもの
- nRF51822が載った技適取得済みの基板
- nRF51822のSDK
- Keil(MDK-ARM)
- nRFgo Studio
- SEGGER JLink Lite
- AndroidかiOSのスマートフォンやタブレット(BLEが使えるもの)
- 電源とか、ハンダ付けするものとか
- Windowsのパソコン
パソコンはWindowsでもMacでもLinuxでもよさそうだけど、KeilがWindows用なので、今回はWindows限定にする。
mbedだと、JLinkとかなくても使えるのだろうけど、よく知らんのだ。
nRF51822が載った技適取得済みの基板
がんばって探そう。
nRF51822のSDK
ここら辺からダウンロードしよう。
zipファイルなので、適当に場所を作って置くがよい。
注意としては、ネットにあるサンプルがSDKのバージョンによってAPIがコンパイルできないレベルで違っていたりするから、注意しよう。
これを書いている時点の最新は、nRF5 SDK v11.0.0だ。
今回は、SDKに入っているサンプルをちょっと動かすだけしかやらない。
Keil(MDK-ARM)
Keilもいくつか種類があるが、nRF51822はCortex-M0コアなので、MDK-ARMの評価版(MDK-ARM Lite)でよいだろう。
評価版だと、ROMが32KBまでしかリンクできないのだが、ちょろっと動かす分にはそのくらいで十分だ。
https://www.keil.com/demo/eval/arm.htm
登録がいるので、ちょっとめんどうかもしれない。
住所を書いても、送ってきたりはしないので、そんなに神経質にならなくてもよいだろう。
nRFgo Studio
なんやかや使うツール。
JTAG(SWD)のアプリなどもインストールしてくれる。
http://www.nordicsemi.com/eng/Products/Bluetooth-R-low-energy/nRF51822#Downloads
ここの、上から順番に行くと、ブロックの
- PRODUCT SPECIFICATION
- REFERENCE MANUAL
- SOFTDEVICES
- SOFTWARE
となって、そのSOFTWAREの下の方にある。
64bitと32bitがあるので、お好きな方を。
Keilに何かするのもセットでやってくれるので、Keilのインストール後の方がよいだろう。
つなぐ
パソコンと、SEGGER J-Link LITEと、nRF51822基板をつなごう。
サンプルをビルドする
SDKの中にサンプルが入っている。
これは、v11.0.0の構成。
なんでもよいのだろうが、Peripheralを動かすのがわかりやすいだろう。
Nordicのドキュメントでは、だいたいble_app_hrsが例になっているので、今回もそれにする。
なお、SDKのv10.0.0とv11.0.0ではこの辺りの構成が変わっている。
v10.0.0まではPeripheralを動かすときは「S110」だったのだが、v11.0.0からは「S130」になっている。
今までのS110をS130に読み替えればよいかというと、あまりそういう訳でもないのが、やっかいなところだ。
まあ、そういうのは自分で調べよう。
簡単に違いが知りたいなら、v10.0.0のSDKもダウンロードして、同じble_app_hrsのサンプルを比較するとよいだろう(main.cだけ見ればよいかな)。
話を戻そう。
この「pca10028とかはなんじゃ?」と思いそうだが、これはNordicの開発ボードの名前だ。
10028と10031にはnRF51422_xxACが、10036と10040にはnRF52832_xxAAが載っている。
って、nRF51822がないやん!となる。
そう、ないのだ。
だから、nRF51422のプロジェクトを開いて、nRF51822に変更する。
Keilに拡張子が割り当てられているから、ダブルクリックすると開くだろう。
こんなのが出てきたが、はい、にしてもインストールしてくれなかった。
SDKのzipファイルを解凍した一番上にそれっぽいmsiファイルがあるので、それをインストールする。。。のはKeil4でバージョンが違うから止めて、Keilを終了させ、サイトから8.5.0を取ってくる。
そのまま実行すると、勝手にKeilのインストーラがうまいことやってくれる。
今の最新Packは8.6.0なのだが、プロジェクトの設定はPackのバージョンも指定してあるので、同じバージョンの方が楽なのだ。
インストールして、またプロジェクトを開くと、今度は大丈夫だった。
まずは、ビルドできることを確認しよう。
マウスカーソルを重ねるとヘルプが出るから、適当に探してくれ。
正常なら、ErrorもWarningも出ないはずだ。
次に、nRF51822向けにしていく。
まず、ツリーの2階層目で右クリックし「Options for …」を選択。
Outputタブで名前を変えておくとよいかな。
別に変えなくてもいいのだけど、気分的な問題だ。
Targetタブの設定を変える(のは、本当は後だが、先に確認する)。
だいたい、変えるのは「IROM1」と「IRAM1」だ。
IROM1は、少し前に話が出たS110だのS130だのに関係する。
これらは「SoftDevice」と呼ばれる、まあ、大ざっぱに言えばOSっぽいものだ。
nRF5 SDK v11.0.0が対応しているSoftDeviceでPeripheral機能が使えるものは、S130のv2.0.0だ。
という情報は、Nordicのサイトから得ることになる。
SDKのバージョンが変わってもSoftDeviceのバージョンが同じこともあるし、逆もある。
使うSoftDeviceがわかったら、今度はそのSoftDeviceの情報を探す。
で、私はいつもリリースノートを読むのだが、どこから取得していいかわからんかった・・・ので、SDKに入っているリリースノートを読む。
実を言うと、だいたいSDKと一緒にSoftDeviceも梱包されているので、それを見ればいいのだ。
ただ、ときどきSoftDeviceだけアップされるときもあるので、調べ方は知っておいた方がよいだろう。
見たいのは、リリースノートの、これ。
FLASHのサイズと、RAMの最小サイズ。
これが、さっきのTargetタブと関係している。
たとえば、ble_app_hrsでは、こうなっている。
IROM1が0x1B000から始まっているのは、SoftDeviceが0x1B000まで使っているからだ。
サイズが0x25000なのは、0x1B000+0x25000=0x40000=256KBということだ。
IRAM1は、なんだろう?
nRF51822はRAMが0x20002000から始まるのだけど、0x80だけずらしてあるな。
・・・わからない! 宿題にさせてくだされ。
S130としては最低0x13C8バイト使うのだけど、0x5F80+0x80-0x2000=0x4000=16KBということで、めいっぱい確保している。
まあ、特に分ける必要がないということだろう。
こんな感じでTargetタブの内容を決めるのだけど、まずはここは見るだけにしておいて、先にDeviceタブでデバイスを変更する。
何でかというと、Deviceタブで別のデバイスを選択すると、Targetの中身が消されるからだ。
私は先にTargetのスクリーンショットを撮ってからDeviceを変更するようにしている。
あとは、C/C++タブやAsmタブで「BOARD_PCA10028」となっているところを変更する。
これを何に使うかというと、SDKのexamplesの中にある「bsp」が見ている。
この中で、ボタンやLEDのGPIO定義をしているのだ。
だから、自分のボード用の定義を新しく作って、bspに反映して、このプロジェクトの提議も変更する、というのが、まあ正当な流れになるんじゃなかろうか。
bspの変更は、自分で見てみよう。
プルアップとかプルダウンが違ったりすると、けっこう変更しないとだめだったりする。
最後に、Debugタブ。
ここで、右側のラジオボタンがチェックされているだろう。
デフォルトはULINK2/MEなどになっているから、これをJ-Link/J-Trace Cortexなどにする。
その横のSettingsボタンを押すと、J-Linkと通信しに行くから、接続設定ができているかわかるだろう。
このくらいまで説明したら、もうあとはできるんじゃなかろうか?
設定変更してビルドが通れば、あとはLOADボタンを押してnRF51822に焼けばよい。
デバッグしたければ、dボタンを押す。
最後はばたばたして、実際に焼くところまでやってないので、気が向いたら次回やろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。