前回までで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通信や、セントラル側も走らせてみたいなぁと思います。