2019/06/15

SEGGER Embedded Studio for ARM(Nordic Edition)でnRF51822をビルド

前々回の続きだ。

メモ
  • SESをNordic Editionにした(V4.16)
  • nRF SDK v10.0.0を使う
  • サンプルのble_app_beacon_s110_pca10028をインポート
  •  PDFの8.2章を見ながらインポートする
    •  8.2.6の追加時に、ついでにtoolchainの行をコピーして1行増やし、toolchain/gccも追加
    •  ses_nrf51_startup.sの`__SRAM_segment_end__` は`__RAM_segment_end__`に変更
これでnRF51422としてはビルドが通ったと思う。
が、うちにはnRF51822しかないので、そっちに変更。

nRF51422のメモリマップ
  • FLASHのstart addressとサイズ
    • 0x00000000 (256kB)
  • RAMのstart addressとサイズ
    • Block0 : 0x20000000 (8kB)
    • Block1 : 0x20002000 (8kB)
256kB=0x40000、8kB=0x2000なので、これを目印にSESの設定を探すと、「Project Options > Code > Build > Memory Segments」がそれっぽい。
RAMの割り当てが多い気がするが、セクションが重ならなければよかろう。

nRF51822のProduct Specificationを見ると、なんだ、同じじゃないか。
では、このまま使おう。

J-LinkとnRF51822を「Target > Connect J-Link」で接続。


続けて焼こうと思ったが、SoftDeviceのことを忘れていた。
これは8.4章に書いてある。

SoftDevice v8.0.0はリリースノートによるとこうらしい。


なので、これをオフセットとして足してやればいいのだろう。
「Project Options > Code > Build > Memory Map Macros」なのかな。









・・・ダメだ。
PDFによるとビルドするとオフセットした分だけ結果のハイライト位置がずれるらしいが、これではずれなかった。

よくわからんので、nRF SDK v15のプロジェクトを見てみた。
 FLASH_STARTなんかはなかったし、ビルドしてもハイライト位置はずれなかったのだが、対応しているプロジェクトだとSoftDevice関係の設定はいらないと書かれていたから当てにならん。

ただ、Linker設定でflash_placement.xmlが指定されてて、そのファイルの中にはFLASH_STARTなどの文字が見えた。 


では、同じようにやってみようとnRF51の方に戻ったのだが・・・その項目がない!


もしかして、インポートすると出てこないのだろうか。。。
ただ、その代わりなのか、Linker Script Fileの設定がある。
でもICFファイルといえばIARだよなぁ、とPC内を検索してみたが、nRF SDKの中にIAR用としてICFファイルがあった。
 使えてくれ!と期待して変更したが、やっぱりだめだった。

Keilで設定を見てみると、Target設定でずらしていた。
 
 
 というわけで、こちらもずらそう。


そしてビルドし直す。
SoftDeviceはnRFgo Studioで焼いてあるので、DebugのLoaderは設定しない。


そうやってDebugを実行すると、mainの頭まで動いてくれた。
そのまま実行できたのだが、Advertisingしていない。。。
エラーハンドラにブレークポイントを置いてみたが、止まる気配がない。
うーん・・・。

一時停止してみると、WFEの近くで止まった。
そういえば、nRF SDKは外部RFを使うサンプルになっているんだったが、私のnRF51は外部RFを持っていないのだった!

SOFTDEVICE_HANDLER_INIT()を内部RFに変更することで、無事Advertisingを確認できた。
ここまでわかるのに時間がかかったが、やり方さえ分かってしまえば大したことはないな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。