今日こそ頑張ります

危機感を抱きつつ、怠けるエンジニア。日記や備忘録。(以前のブログ:http://harupanda.blog.jp/)

ISP1807でBLEペリフェラルを実装するための準備

前回まででISP1807に対して、nRF52833-DKの
オンボードJ-Linkを使って任意のソフトを書き込む準備ができました。

今回は、ISP1807でSDKのBLEペリフェラルソフトを走らせるところまでやります。
これも先人たちの参考資料ほぼそのままなんですが。

ソフトデバイス

まず、ソフトデバイスってやつをダウンロードします。
こちらの記事の通りです。
qiita.com

ソフトデバイスというのは、Nordic 社が提供するBLEのプロトコルスタックライブラリの名称です。
nRFでBLEを利用するためには必須ってことですね。
Nordicのダウンロードサイトをみると、nRF52840だと、S113もしくはS140が対応するようです。

違いとしては、S113だとペリフェラル機能のみだが、省メモリ。
S140だとセントラル+ペリフェラル機能の両対応で、リッチ。
とりあえず両方ダウンロードして、書き込みはS113にしておくことにします。

nRF Connect for Desktop

ソフトデバイスをnRFに書き込むために、nRF Connect for Desktopをインストールします。
nRF Connect for Desktop - Downloads - nordicsemi.com

nRF Connect for Desktopはいろいろな開発ツールが詰まったランチャーソフトみたいなものです。
その中のProgrammerというソフトを使ってソフトデバイスを書き込みます。

さて、Programmerをインストールして起動し、さらにnRF52833-DKを接続(ISP1807をJ-Link経由で接続したもの)すると
下記のように、左上のデバイス名称欄には、「ISP1807」や「nRF52840」という名称ではなく、
nRF52833-DKという名称が表示されます。

「あれ、J-Link先のデバイスが認識されないのか??」と、初めは戸惑いましたがこれで正しいようです。
接続されているJ-Linkデバイスそのもの、という意味で、nRF52833-DKと表示されているようです。
J-Link先のデバイスとしては、Programmerのウィンドウのところに、ちゃんとNRF52840の名称が出ています。
(ちなみに、J-Linkの配線を外すと、NRF52840の表示はERRORになってしまいます。)

この状態で、File Memory layoutのところにソフトデバイスの.hexファイルをドラッグアンドドロップします。
さらに、Readアイコンをクリック。
すると下記のような表示になります。

右が現在のデバイスの状態。
左が.hexファイルのレイアウト。
この状態で、Erase&writeをクリックするとソフトデバイスが書き込まれます。
書き込み後にReadをクリックして、書き込み後の状態が.hexファイルと同様になっているかを確認します。

とりあえず、BLEビーコンを発射させる

とりあえず、サンプルソフトを書き込んで走らせます。
BLEビーコンを出してみることにします。
下記プロジェクトをDebug&Runします。

nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_beacon\pca10056\s140\ses

と、ここで、コンパイルエラーが発生します。

SEGGER_RTT_Syscalls_SES.c:76:10: fatal error: __vfprintf.h: No such file or directory

今回もDevZoneを調べてみると、下記のような書き込みがありました。
devzone.nordicsemi.com

There has been a change in recent Segger Embedded Studio versions that require you to remove the SEGGER_RTT_Syscalls_SES.c file from the project.

というわけで、深く考えずにBuild対象から除外します。
ProjectツリーのところでSEGGER_RTT_Syscalls_SES.cを右クリックして、
Exclude from Buildをクリックです。

これでDebug & Runすると、ビーコン(アドバタイズパケット)が発射されます。
確認方法としては、スマホでLightBlueというアプリを実行すると、
NordicのManufacturer Specific Dataが載ったパケットが確認できるので、
それでうまく実行できていることがわかります。

次回はGatt通信や、セントラル側も走らせてみたいなぁと思います。