はい、今日はちゃんとnRF51822のボードとJ-Link LITEを接続したので、ビルドして動作させるところまでやりますよ、ええ。
ちなみに、うちにあるnRF51822のボードはBVMCNDT52というもので、今だと型番が少し新しくなってる。
Amazon.co.jp: BLE 開発キット with J-Link segger:BVMCN5103-CFAC-BK KIT PLUS: 家電・カメラ
J-Link LITEだけ別に買うと高いそうなので、セットで買った次第です。
では、基板があるので、ちゃんとKeilの設定をしながらやっていく。
まず、ble_app_hrsのpca10028を別名でコピーして、適当に名前を変える。
うちのボードは「BVMCNDT52」なので、その名前にしよう。
pca10028を上書きしてもいいけど、気分として変えておきたいだけだ。
残しておくと、比較できるし。
ついでに、中に入っているフォルダも、s130以外は削除する。
他のは、使いたいときに見ればよいのだ。
さらにその下も、arm5_no_packs以外は削除する。
他のは、使い(以下略)
その下のファイル名はpca10028が残っていて気に入らない。。。
Keilにプロジェクト名を変更して保存するようなコマンドが無さそうだから、
3ファイルとも同じ名前にすると、ちゃんと開いてくれたから、たぶんそれでよいのだろう。
そして、Deviceを「nRF51822_xxAA」に、Targetをこんな感じで変更。
xxAAなのは、BVMCNDT52がそうだからだ。
あとは、昨日の通り、Output、C/C++、Asmを変更。
C/C++のInclude Pathにpca10028があるけど、そっちはもう放置した。
気になるなら、configフォルダの方もコピーするなり名前変更するなりしておくとよいだろう。
Debugは、J-Link/J-TRACE Cortexを使う。
J-Linkがつながった状態でSettingsボタンを押すと、こんな感じで見える。
そしてコンパイルすると・・・はい、ビルドエラーが出ます。
これは、BOARD_PCA10028をBOARD_BVMCNDT52に書き換えただけだから。
SDKの中の、examples/bspも変更する必要があるのだ。
Keilのツリーから「Board Support」を開こう。
Cファイルが2つあるはず。
まず、bsp.cのツリーをさらに開いて、Includeファイルを見る。
最初は、board.hから。
ここに、さっき変更した定義値が出てくるので、追加してやるとよい。
一番下にでも追加するとよいだろう。
ヘッダファイルもいるので、examples/bspの中にあるpca10028.hをコピーしてリネームし、bvmcndt52.hなどとしておこう。
あとは、bvmcndt52.hを編集すれば、だいたい終わりだ。
が、BVMCNDT52はLEDもボタンもないので、設定するものがない。
そういうときは、ヘッダファイルの先頭に「BSP_SIMPLE」と定義しておくとよいだろう。
それと、ファイルの一番下にあるNRF_CLOCK_LFCLKSRCも変更がいる。
これもボードごとに違うのだが、内蔵の発振子を使うとか外部の発振子を使うとか、そんなのだ。
デフォルトは外部の発振子を使うようになっているのだけど、BVMCNDT52は外部発振子を持っていない。
なので、適当に設定する。
もう片方のCファイルbsp_btn_ble.cは、プロジェクトから取り除く。
ボタンがないから、使わないのだ。
main.cに残骸があるので、「bsp_btn_ble」で検索して関係があるところをコメントアウトする。
これでビルドすれば、たぶんエラーにならないはず。
次は、デバッグする。
ツールバーの「d」を押すと、ダイアログが出てくる。
が、気にせずOK。
サンプル程度では大丈夫だ。
うまくいくと、main関数の先頭辺りに黄色と水色の矢印っぽいカーソルが出てくる。
黄色がプログラムカウンタがある行で、水色はブレークポイントが置ける行に移動した場合に出てくるカーソルなのかな。
ブレークポイントが設定できるところは、行番号の左側が濃いグレーになっているのでわかるだろう。
実行開始は、左上のこんなアイコンをクリックする。
まあ、まずは動かしてみよう。
Androidの設定画面でBluetooth設定を開くと、こういうのが出ていた。
たぶん、これが動かしているサンプルだ。
素の状態だとあまり遊べないので、Nordicが出しているスマホアプリをインストールするとよいだろう。
nRF Master Control Panelアプリか、nRF Toolboxアプリがよかろう。
nRF Toolboxアプリだと、HRMを選択してデバイスをCONNECTすると、こんな画面が出てくる。
せっかくデバッガを使っているので、ブレークポイントとかで止めたいかもしれないが、あまりそういうのには使えない。
止められるのだけど、再開するとアプリが吹っ飛んでしまうのだ。
まあ、そういうものだと思ってあきらめよう。
だいたいは、UARTやRTTなどでログを出す、というのが一般的なデバッグ方法かな。
まあ、「ここに来るか確認したい」とかだとブレークポイントを使えばよい。
これで終わりなのだが、ちょっとだけこのアイコンの説明をしよう。
左端はいいとして、右3つはしばしば使う。
たとえば、ネットにあるKeilプロジェクトのサンプルを使おうとして、Packのバージョンが違ったとしよう。
手元にあればいいけど、古いのは使いたくなかったりすると、その構成を変更したくなってくる(変更して動くかどうかは知らんが)。
他にも、CMSISのバージョンとかは固定されていたりするので、ちょっと使いたいものと違うことがあるだろう。
そういうときは、右から2番目のアイコンをクリックして変更することができる。
これが今回使ったble_app_hrsの構成なのだが、CMSISは4.5.0、DeviceFamilyPackは8.5.0でfixedになっている。
これを、たとえばDeviceFamiliPackを8.6.0にすると、構成が変わる。
ただねぇ、構成を変えると、今度はManage Run-Time Environmentが「8.5.0がない」って怒り始めるのだ。
なので、変更したあと、ツリー画面からも変更する。
けど、なんかうまくいってるのか、いっていないのかよくわからない感じになってしまうので、あちこち開いたり閉じたり、Keilを終了させて開き直したりしていると、なんとなくよくなっている。
今も、
と変な状態だけど、まあエラーにもならないし、警告アイコンも消えたから、よしとしている。
あとは、自分のボードに合わせてbspを変更したり、Keilだと制限があって困るなら正式版を買ったり、IARとかのに変更したり、GCCにしたりして遊ぶとよいだろう。
Keilの使い方の、日本語PDFがあるのに気付いた。
返信削除読んでないけど、本家がリンクしているので、たぶん本家が作ったものだろう。
https://armkeil.blob.core.windows.net/product/gs_MDK5_3_jp.pdf