2016年4月30日

nRF51822でSEGGER J-Linkがつながらなくなった

タイトル通りだ。

Eddystoneサンプルを動かそうとKeilであれこれデバッグしていたのだが、その途中で急にJ-Linkがつながらなくなったのだ。
あらまあ。

アンインストールやインストールを繰り返したのであまり記録が残っていないのだが、メモとして残しておこう。


JLinkARM.dllが読み込めないとか見つからないとか、そういうログが出たと思う。
複数のSEGGERをインストールしていたので、なんか悪さをし始めたのかと思い、最新版を削除して、今まで使っていた安定版だけにしてみた。
が、変わらず。

Keilをあきらめ、nRFgo Studioで見てみることにした。
こっちもダメなのだが、エラーが「JLinkARM.dllが正しくインストールされていない」というようなことを告げていた。nRF Toolsをインストールせよとか何とか。

なので、あれをインストールしたり、これをインストールしたり、アンインストールしてやり直したり、再起動したり。
どれも変わらず。

1つ見つかったのは、レジストリ。
nRFgo Studio cannot load JLinkARM.dll, re-installing does not help. What went wrong? - Nordic Developer Zone
現象はこれと同じで、私はV5.12dをインストールした後、V5.10nをインストールして、V5.12dをアンインストールしていた。
そうすると、レジストリのInstallPathにはV5.12dの方が残っていたのだ。

きれいにしたかったので、SEGGERを全部アンインストールし、レジストリもregeditで削除して、V5.10nをインストールした。
そうすると「正しくインストールされていない」の現象は消えた。

 

が、JLinkARM.dllが正しく動いていないのは変わらない。
もう1枚あったnRF51822を使ってみると、こっちはちゃんと読めた。
nRFgo Studioには、リセット後にSystem OFFになってるんじゃないのー、みたいなことが書かれていたのだが、そんなこと言われてもどうしようもない。
そういうのを何とかするのが、あんたの仕事だろうが!と思うのだがね。。

正しくnRF51822が動いた後、また元のnRF51822に差し替えると、今度はnRFgo StudioでRegionの画面まで出てきた。
おお!とErase Allしようとすると、つながらない・・・。


ということで、タイミングとか、なんかそういうものっぽいから、コマンドラインから消すことにした。

> nrfjprog –e

これは—eraseallの省略形なのだが、全部消すオプションだ。
動かすと、エラーもなくすぐに終わった。
nRFgo Studioにつなぐと、見えた。

 

今回はたまたまうまくいっただけかもしれないが、困っていたら試すとよいかもしれん。

[nrf]nRF5 SDK for Eddystoneは動くのか? (4)

PCが新しくなったので、ビルド環境の確認も合わせて動かしてみた。
ボードはnRF51822で、for EddystoneはKeilでやっとこさ32KB以内に収めたバージョンだ。
だから、動くとは限らない。。。

環境確認だったら、ちゃんと動くとわかっているものでやるのが筋なのだが、連休だからこれでいいのだ。

 

sd_ble_gap_adv_start()で、NRF_ERROR_INVALID_PARAMが返ってきているのがわかった。
eddystone_advertising_manager.cのeddystone_ble_advertising_start()だ。
パラメータをeddystone_ble_registr_adv_cb()で設定するようなのだが、それが呼ばれずに開始しようとしてるから、パラメータ不正になっている。
では、それがいつ呼ばれるのが普通かを調べねばなるまい。

 

名前の通りコールバック関数で、eddystone_registration_ui_init()に渡している。
UIとついているから、ボタン操作とかと絡んでくるのか・・・と思ったが、それ以前に私がROMサイズを減らすために中身をコメントアウトしてた。
あははははぁ。

ただ、ボタンがないのはどうしようもないので、無理やり呼んでやることにした。
そうすると、パラメータエラーは発生しなくなった。
しなくなったのだが、Advertisingをしてくれるわけでもない。
再起動するわけでもない。
何が起きてるんだ??

実行を停止すると、SEVの行でいつも止まる。
その前がWFEだから、イベント待ちで停止したままなのだろう。
無線が出ているときであれば、途中で停止させると次に実行すると異常になってしまうのだが、無線が出てないせいか止めても再開しても普通に動く。
普通に動くのだが、無線が出てないので正しくは動いていない。

うーん。。。
いつもエラーさえ解消すればAdvertisingくらいは出てくれるのだが、ちょっと困りましたね。

2016年4月28日

[cntk]New Release !!

ごめんね、適当なタイトルで。。。
おじさんも疲れているのよ。

Release CNTK version 1.1 (Windows+Linux) · Microsoft/CNTK

そんなわけで、v1.1がリリースされていました。
日本時間で、4月25日21時57分らしいので、それより前の人は更新するとよいのかも。

CUDAは7.5のままですが、ビルドする必要もないので、こだわりはいらないかもしれません。
探したけど、Visual Studio 2013 community版は探せなかったのだ。

 

だんだん、こうやって細かいことがどうでもよくなっていくのが、困ったものです。

[c++]モックというかスタブというかを作るのは難しそう

単体テストを作るときはGoogle Testを使うようになってきた。
あまり大したことをするわけではなく、TEST_Fと、SetUp()/TearDown()と、あとは集計機能を使うくらいだ。
だいたいCなので、これとFFFを組み合わせ、GCCなのでgcov/lcovでカバレッジを見ている。

 

ただ、最近C++を使うことがあった。
classが出てくると、はてモックというかスタブというか、とにかく偽物の本体をどうやって作ろうか、と悩むことになった。

Google Testなので、Google Mockがよいか、と調べているところなのだが、なかなか思ったことができるかどうかまでたどりつかない。
調べているのは、

  • 簡単に空関数をそれっぽく作ってくれる
  • できたら、呼び出し回数などをカウントしてくれるとうれしい
  • ただし、元ソースは変更しないで済む

というところ。

サンプルのPainterは、Turtleをコンストラクタでもらうようになっていたけど、たとえばこんな風にメンバ変数でインスタンスを持っている場合だったらどうしたらよいのだろう?

------
#include "Turtle.h"

class Painter {
public:
    Painter() {}
    ~Painter() {}

    bool DrawCircle(int x, int y, int r);

private:
    Turtle turtle_;
};

-------

Turtleクラスであることは決まっているので、ここをMockで代用することができない。
インスタンスだから、Turtleも中身を作らないとリンクエラーになるから、自分で空関数を書けばよいのだけど、それだけだと呼び出しカウントを数える処理も自分で書かないといけない。
そもそも、Google Mock使ってないし!

じゃあ、Turtle.h自体を書き換えようかと思ったけど、Painter.hとTurtle.hが同じディレクトリにある場合、インクルードパスの指定を別ディレクトリにしても、カレントを先に参照するようで、偽造したTurtle.hを読んでくれない。

うーむ・・・。


どうせファイルごとにしかテストしないので、一時的に本命のTurtle.hをリネームしておく、という方法でよいかもしれない。

格好は悪いのだけど、あまり時間を掛けたいところではないのよねぇ。

2016年4月27日

[nrf]nRF5 SDK for Eddystoneは動くのか? (3)

今回は、紹介だけ。
NordicのBlogsにアップされていました。

nRF5 SDK for Eddystone™ introduced

開発の話ではなくて、新しいEddystoneはこんな感じですよ、という、文字通り導入部分の紹介のようです。

 

Advertisingにスロットの概念を持たせてるんだ、というのが驚いたところ。
なんとなく、Advertisingする内容はそんなに変化させないものだろうと思っていたので。

AndroidだとAdvertisingの内容はアプリで処理できそうだけど、iOSはどうなんだろう?
あんまりそういうのは許してないような気がしたけど、「Manufacturer Specific Dataは制約が掛けられている」というような情報があったから、それ以外については特に制約が無いのかも。

 

5月はそれほど仕事が無さそうだから、そういうので遊んでみましょうかね。

2016年4月25日

MOUSERはマウサーかマウザーか?

太陽誘電さんのnRF52832評価ボードを見ていた。
E○SHほげほげ、というSHのついたやつがnRF52832で、○のところがBだと評価ボード、Kだと評価キットらしい。
ほげほげ、のところはモジュール自体の大きさで、今のところは大きいタイプしかなさそうだった。


今朝調べたときはDigikeyしか出てこなかったのだけど、今調べたらMOUSERしか出てこなくなった。
なんでだろう。。。まあいいや。

image

あれ、マウザーなの??
まあどういでもいいんだけど、マウサーと思っていたよ。
(皇帝マウザーしか思いつかんかった。)

image

Googleはマウサーだった。
会社名はマウサーで、問い合わせるのがマウザーかもしれんし。
Googleで検索した方は「マウサー」だったから誤字かもしれんが、世の中奥が深いこともあるから、気にしないようにしておく。


EBSHCNZXZ Taiyo Yuden | Mouser

今だと、日本円で13,326円くらい。
朝見たDigiKeyは、最初が11で始まっていたのは覚えているのだけど、それが日本円だったのかドルだったのかは忘れた。

 

調べ方のいい加減さでわかるかもしれないが、それほどnRF52に興味はないのだ。
16MHzくらいで動けば十分なことくらいしかやらんというか、できんというか。
使うとしたら、仕事で使うときだろうなぁ。。。
ああ、そういう意味なら、やはり興味はあることになりそうだ。

2個セットでこの値段だったらなー。
nRF52 DKは安そうだけど、技適通す人がいないような気がする。
合わせ技1本じゃないけど、2.4GHz帯は2ヶ国以上の電波法みたいなのを取得していたら日本で使える、とかなってくれるといいのに。

などと法律に関して適当なことを書くとよくないので少し調べてみた。
http://www.musenka.com/info/auth_overseas.html
いやあ、いっぱいあるんだねぇ。
やっぱり、目に見えないだけに法律できっちり決めておかないと、何かあってからでは遅いからか。

2016年4月22日

[nrf]nRF5 SDK for Eddystoneは動くのか? (2)

2日目。

相変わらず動かず。
今回は実機に焼いているのだが、Advertisingの開始でパラメータエラーが発生している。
その前に呼んでいるのがTLM系の関数だから、32KBの壁を守るためにコメントアウトしたのがよくないのだろう。

しかし、コメントアウトを戻すとリンクサイズのエラーになるので、別の場所を削らないといけないようだ。
いい場所を探すのは、なかなか難しいな。

2016年4月20日

[nrf]nRF5 SDK for Eddystoneは動くのか? (1)

今日はnRF5 SDK for Eddystoneを動かせるかどうかだけ確かめてみよう。
うちにあるのは、nRF51822のRAM 16KB版だ。

EddystoneはBeaconだけのイメージだったけど、GATTのソースが追加されているから、接続して何かするようになったのだろう。


まずは、ここに書いてある通りにやってみよう。
https://github.com/NordicSemiconductor/nrf5-sdk-for-eddystone

  1. 上記をcloneして、nRF5 SDK v11.0.0のexamples/ble_peripheralの下に置く。
  2. この中のsource/にあるcrypto_setup_all.shを実行する。
  3. project/pca10040_s132/arm5_no_packsに入っているKeilプロジェクトを開く。
    DeviceFamilyPack 8.3.1を求められるけど、無視して8.6.0に変更する。
  4. ビルド
  5. えーっと、エラーが出ました。。
    32KBに収まらない!
    オプションで最適化がかからないようになっていたので、もう一度。。。
    だめだ。。。
    RTTを削って。。。だめか。。。
    BSP_SIMPLEなら。。。あと、あとちょっとか。。。
    eddystone_registration_uiのボタンも削って。。。あと792バイト。。。
    eddystone_tlm_managerの中身を削って。。。あと616バイト。。。
    eddystone_flashの中身も削って。。。入った!

 

って、eddystone_flashは削ってもよいのか?
pstorageがあったからFLASH保存するのだろうけど。。。

手順としては、あとはnRF52 DKにS132を焼いて、今回のを焼けばいいらしい。


とりあえず、今日はここまで。

やっていてわかったのは、nRF52を使うようになったら、たぶんKeilだったら正式版じゃないとつらいんだろうな、ということだ。
まあ、nRF51だって256KBあるのだけど、nRF52の方が性能が高い分、あれこれやりたくなって、ROMがたくさんいるようになりそうだしね。

STM32の一部みたいに「このマイコンにはKeil無制限で使えるシリアルコード公開します!」みたいなのになるとうれしいのだが、まあ、ね。

そうなると、GCCでやるのがいいのかね。
そろそろLLVMも使えるのだろうか。
本家のコンパイラ(armccかな?)の方は、LLVMがどうのと書いてありますな。

 

次回はいつになるかわからないけど、nRF51822に移植しようとして、あきらめてしまいそうな気配がするな。。。

2016年4月18日

[nrf]手抜きなnRF51822のはじめ方のつづき(非mbed)

はい、今日はちゃんと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がそうだからだ。

image

あとは、昨日の通り、Output、C/C++、Asmを変更。
C/C++のInclude Pathにpca10028があるけど、そっちはもう放置した。
気になるなら、configフォルダの方もコピーするなり名前変更するなりしておくとよいだろう。

Debugは、J-Link/J-TRACE Cortexを使う。
J-Linkがつながった状態でSettingsボタンを押すと、こんな感じで見える。

image

 

そしてコンパイルすると・・・はい、ビルドエラーが出ます。
これは、BOARD_PCA10028をBOARD_BVMCNDT52に書き換えただけだから。
SDKの中の、examples/bspも変更する必要があるのだ。

Keilのツリーから「Board Support」を開こう。
Cファイルが2つあるはず。
まず、bsp.cのツリーをさらに開いて、Includeファイルを見る。

最初は、board.hから。
ここに、さっき変更した定義値が出てくるので、追加してやるとよい。
一番下にでも追加するとよいだろう。
ヘッダファイルもいるので、examples/bspの中にあるpca10028.hをコピーしてリネームし、bvmcndt52.hなどとしておこう。

image

あとは、bvmcndt52.hを編集すれば、だいたい終わりだ。
が、BVMCNDT52はLEDもボタンもないので、設定するものがない。
そういうときは、ヘッダファイルの先頭に「BSP_SIMPLE」と定義しておくとよいだろう。

それと、ファイルの一番下にあるNRF_CLOCK_LFCLKSRCも変更がいる。
これもボードごとに違うのだが、内蔵の発振子を使うとか外部の発振子を使うとか、そんなのだ。
デフォルトは外部の発振子を使うようになっているのだけど、BVMCNDT52は外部発振子を持っていない。
なので、適当に設定する。

image

もう片方のCファイルbsp_btn_ble.cは、プロジェクトから取り除く。
ボタンがないから、使わないのだ。
main.cに残骸があるので、「bsp_btn_ble」で検索して関係があるところをコメントアウトする。

これでビルドすれば、たぶんエラーにならないはず。


次は、デバッグする。
ツールバーの「d」を押すと、ダイアログが出てくる。

image

が、気にせずOK。
サンプル程度では大丈夫だ。

うまくいくと、main関数の先頭辺りに黄色と水色の矢印っぽいカーソルが出てくる。
黄色がプログラムカウンタがある行で、水色はブレークポイントが置ける行に移動した場合に出てくるカーソルなのかな。

ブレークポイントが設定できるところは、行番号の左側が濃いグレーになっているのでわかるだろう。

実行開始は、左上のこんなアイコンをクリックする。
まあ、まずは動かしてみよう。

image

Androidの設定画面でBluetooth設定を開くと、こういうのが出ていた。
たぶん、これが動かしているサンプルだ。

image

素の状態だとあまり遊べないので、Nordicが出しているスマホアプリをインストールするとよいだろう。
nRF Master Control Panelアプリか、nRF Toolboxアプリがよかろう。
nRF Toolboxアプリだと、HRMを選択してデバイスをCONNECTすると、こんな画面が出てくる。

image

 

せっかくデバッガを使っているので、ブレークポイントとかで止めたいかもしれないが、あまりそういうのには使えない。
止められるのだけど、再開するとアプリが吹っ飛んでしまうのだ。
まあ、そういうものだと思ってあきらめよう。

だいたいは、UARTやRTTなどでログを出す、というのが一般的なデバッグ方法かな。
まあ、「ここに来るか確認したい」とかだとブレークポイントを使えばよい。


これで終わりなのだが、ちょっとだけこのアイコンの説明をしよう。

image

左端はいいとして、右3つはしばしば使う。
たとえば、ネットにあるKeilプロジェクトのサンプルを使おうとして、Packのバージョンが違ったとしよう。
手元にあればいいけど、古いのは使いたくなかったりすると、その構成を変更したくなってくる(変更して動くかどうかは知らんが)。
他にも、CMSISのバージョンとかは固定されていたりするので、ちょっと使いたいものと違うことがあるだろう。

そういうときは、右から2番目のアイコンをクリックして変更することができる。

image

これが今回使ったble_app_hrsの構成なのだが、CMSISは4.5.0、DeviceFamilyPackは8.5.0でfixedになっている。
これを、たとえばDeviceFamiliPackを8.6.0にすると、構成が変わる。

ただねぇ、構成を変えると、今度はManage Run-Time Environmentが「8.5.0がない」って怒り始めるのだ。
なので、変更したあと、ツリー画面からも変更する。

けど、なんかうまくいってるのか、いっていないのかよくわからない感じになってしまうので、あちこち開いたり閉じたり、Keilを終了させて開き直したりしていると、なんとなくよくなっている。
今も、

image

と変な状態だけど、まあエラーにもならないし、警告アイコンも消えたから、よしとしている。


あとは、自分のボードに合わせてbspを変更したり、Keilだと制限があって困るなら正式版を買ったり、IARとかのに変更したり、GCCにしたりして遊ぶとよいだろう。

[nrf]手抜きなnRF51822のはじめ方(非mbed)

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の構成。

image

なんでもよいのだろうが、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だけ見ればよいかな)。

 

話を戻そう。

image

この「pca10028とかはなんじゃ?」と思いそうだが、これはNordicの開発ボードの名前だ。
10028と10031にはnRF51422_xxACが、10036と10040にはnRF52832_xxAAが載っている。

って、nRF51822がないやん!となる。
そう、ないのだ。
だから、nRF51422のプロジェクトを開いて、nRF51822に変更する。

image

Keilに拡張子が割り当てられているから、ダブルクリックすると開くだろう。

image

こんなのが出てきたが、はい、にしてもインストールしてくれなかった。
SDKのzipファイルを解凍した一番上にそれっぽいmsiファイルがあるので、それをインストールする。。。のはKeil4でバージョンが違うから止めて、Keilを終了させ、サイトから8.5.0を取ってくる。
そのまま実行すると、勝手にKeilのインストーラがうまいことやってくれる。

今の最新Packは8.6.0なのだが、プロジェクトの設定はPackのバージョンも指定してあるので、同じバージョンの方が楽なのだ。

インストールして、またプロジェクトを開くと、今度は大丈夫だった。
まずは、ビルドできることを確認しよう。

image

マウスカーソルを重ねるとヘルプが出るから、適当に探してくれ。
正常なら、ErrorもWarningも出ないはずだ。

次に、nRF51822向けにしていく。
まず、ツリーの2階層目で右クリックし「Options for …」を選択。

image

Outputタブで名前を変えておくとよいかな。
別に変えなくてもいいのだけど、気分的な問題だ。

image

 

Targetタブの設定を変える(のは、本当は後だが、先に確認する)。
だいたい、変えるのは「IROM1」と「IRAM1」だ。

IROM1は、少し前に話が出たS110だのS130だのに関係する。
これらは「SoftDevice」と呼ばれる、まあ、大ざっぱに言えばOSっぽいものだ。
nRF5 SDK v11.0.0が対応しているSoftDeviceでPeripheral機能が使えるものは、S130のv2.0.0だ。
という情報は、Nordicのサイトから得ることになる。

image

SDKのバージョンが変わってもSoftDeviceのバージョンが同じこともあるし、逆もある。

使うSoftDeviceがわかったら、今度はそのSoftDeviceの情報を探す。
で、私はいつもリリースノートを読むのだが、どこから取得していいかわからんかった・・・ので、SDKに入っているリリースノートを読む。
実を言うと、だいたいSDKと一緒にSoftDeviceも梱包されているので、それを見ればいいのだ。
ただ、ときどきSoftDeviceだけアップされるときもあるので、調べ方は知っておいた方がよいだろう。

image

見たいのは、リリースノートの、これ。

image

FLASHのサイズと、RAMの最小サイズ。
これが、さっきのTargetタブと関係している。

たとえば、ble_app_hrsでは、こうなっている。

image

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ボタンを押す。

image

 

最後はばたばたして、実際に焼くところまでやってないので、気が向いたら次回やろう。