2014年6月30日

[ble][nrf51]S110をひもとこう (1)

とりあえず第1回としてみた。

https://www.bluetooth.org/ja-jp/Documents/Shenzhen%20Noridc_BLE%20sensor%20app.pdf

この資料がわかりやすかった。
bluetooth.orgって書いてあるから、本家でのプレゼンテーション資料とかかな?

  • BLEのプロトコルスタック
  • アプリケーションドライバ

この2つがメインかな、と今の感触として思っている。

[ble][nrf51]どこから手を付けようか

nRF51822というチップが手元にある。
デバッガもあるし、開発環境もある。

さて、どこから手を付けようか?

nRF51 SDKという環境と、それに付随してS110というSoftDeviceなるBLEスタックを含んだファームウェアというかミドルウェアというかがある。
私だってなるべく楽をしたいし、安全に使えるものであれば使いたい。


まず、SoftDeviceにはいくつかあるが、nRF51822には「S110」と「S120」が使える。
S110はBLEのperipheral用、S120はBLEのcentral用だ。
BLE_STACK_SUPPORT_REQDって定義を付けてビルドすると、peripheralとして使えるらしい(SoftDevice Handler Library)。

HPの内容をそのまま抜粋。

S110 SoftDevice

The S110 SoftDevice is a Bluetooth® low energy (BLE) Peripheral/Broadcaster protocol stack solution.
It integrates a Bluetooth low energy controller and host, and provides a full and flexible API for building Bluetooth low energy System on Chip (SoC) solutions.

Key Features

  • Bluetooth 4.1 compliant low energy single-mode protocol stack
  • Link layer
  • L2CAP, ATT, and SM protocols
  • GATT, GAP, and L2CAP pぢc  
  • Concurrent Peripheral and Broadcaster roles
  • GATT Client and Server
  • Full SMP support including MITM and OOB pairing
  • Complementary nRF51 SDK including Bluetooth profiles and example applications
  • Master Boot Record for over-the-air device firmware update
  • Memory isolation between application and protocol stack for robustness and security
  • Thread-safe supervisor-call based API
  • Asynchronous, event-driven behavior
  • No RTOS dependency
  • Any RTOS can be used
  • No link-time dependencies
  • Standard ARMR Cortex™-M0 project configuration for application development
  • Support for concurrent and non-concurrent multiprotocol operation
  • Concurrent multiprotocol timeslot API
  • Alternate protocol stack running in application space

nRF51 SDKを補完するものらしい。
ただ、SoftDeviceを使うようにしておくと、いろいろと面倒なことをせずに済む、という記事もあった。

うーん、もう少し絞りたい。
S110について知ればいいのかな?

2014年6月28日

[ble]nRF51の省電力はどういうのがあるんだろう?

比較的、小さいものを作ることが多い。
私がハードを作れないので、そういうのは仕事でしかやれないんだけど、だいたい「省電力」が課題になる。
まあ、小さい→電池で動かす→長持ちさせねば!となるのは、当然な流れだ。

基本的な手段は、こんなところ。

  • 動作クロックを落とす
  • 使わない機能ブロックを止める

他にもあるけど、まあこんなところで。
マイコンの資料を見ると、消費電流が出ている。
この機能を使うとこのくらい、みたいなことが書いてあるので、じゃあ使うのをやめよう、とか、使う時間を短くしよう、とか、そういうことを考えるのだ。

では、nRF51822はどうかというと・・・ああっ!
スペックシートも、リファレンスマニュアルも、ユーザ登録が必要じゃないか!
ええい、もどかしい。。。

http://www.nordicsemi.com/eng/Products/Bluetooth-R-low-energy/nRF51822

ここにおおざっぱな消費電流が出ている。
送受信がmAオーダーなのに対して、待機中はμAオーダーだ。
これだけでも、送受信する時間を短くすれば消費電流が抑えられることがわかる。

とはいえ、BLEなんだから送受信しないと始まらない。
あるいは、Beacon端末であれば送信しっぱなしでいいのかもしれない。
送信しっぱなし、とはいえ、送信間隔が長くなればなるほど、消費電流は抑えられる。

じゃあ、その間隔を製品の性格に合わせて最大にしたとしよう。
次に待つのは、送信するまでの間をどうするか、だ。
本当に何もしなければ良いのなら、タイマを割込設定して、割込が発生するまで眠らせる、ということもできる。

でも、場合によっては間に受信をしないといけないかもしれない。
その時間がタイマで良いならば、同じようにタイマ割込にしておけば良い。
そうではなくユーザ操作が絡むとかだと、じゃあどうしよう。
いやいや、実は受信が不定期に来るから受信もやらないと、とか・・・。

そういう製品の仕様を考えながら省電力のことをやると、かなり電力を抑えることができる。
できるけど、汎用的なやり方ではなく、かなりOSみたいなことになってくる。
省電力を中心とした仕様設計や実装になる、という感じだろうか。


そういう細々したことをやってるから日本は・・・っていわれるのかもなあ、と思わなくもない。
そんな暇があったら、新しいサービスとかに力を入れろよ、みたいな。
でも、誰かがやらんといかんのよねぇ、とも思う私で、そういう方面が好きなのであった。

[ble][nrf51]センサーをつなげてみる

では、BVMCN5102-BKにセンサーでも付けてみよう。
まずは付けて動かすだけだ。

うちにあるセンサーで動きがわかりやすいのは・・・FeliCa Plugか。
あれも、13.56MHzの搬送波を検出するセンサーと見なせなくもないだろう。

image

それっぽく書いてみたが、意味があるのはFeliCa Plugの/RFDETとP0.21につないだLEDだけ。

#include "nrf_gpio.h"
static void set_gpio(void)
{
    //P0.21にLED接続。
    //HIGHで消灯。LOWで点灯。
    nrf_gpio_cfg_output(21);
    nrf_gpio_pin_write(21, 1);
    //P0.08 : /RFDET
    nrf_gpio_cfg_input(8, NRF_GPIO_PIN_PULLUP);
}
int main(void)
{
    set_gpio();
    while (true)
    {
        nrf_gpio_pin_write(21, nrf_gpio_pin_read(8));
    }
}

 

/RFDETを読み、GPIOに出力しているだけだ。
プルアップにしているので、LEDは1出力で消灯、0出力で点灯になる。
/RFDETも負論理なので、未検出時は1、検出時は0になる。

PaSoRiでFeliCaランチャーを立ち上げておくと定期的にポーリングするので、そのタイミングでLED点滅することを確認。
おめでとう、私!

 

うん、動作に意味はないんだけど、gccのテンプレートからプロジェクトを作ってビルドして動いた、という作業としてはちょうど良かった。
LEDにプルアップ抵抗を付けてたんだけど、大きすぎるのか点灯せず、結局直づけになった。
まずい気はするんだけど、まあいいや。

image

これがPlugじゃなくてLinkの方だったら、読んだIDmを転送、なんてのもできるんだけどね。

[ble]nRF51822のGPIO

nRF51のブロック図を見ると、SPIやらI2C互換やらのシリアル通信ブロックがあるのだけど、ピンアサインを見てもGPIOくらいしか出てない。
どうなっとるんじゃ?


nRF51のリファレンスマニュアル「9. Peripheral interface」を見ると、APBとAHBをtask/event/interruptレジスタで触ることができるって書いてある。

機能ごとに0x1000の固定ブロック=1024レジスタが割り当てられていて、それを使ってAPBにアクセスするようだ。
このブロックがID0~31ある。これをPeripheral IDと呼んでいる。
メモリマップではAPB peripheralsって書いてあるところだな。
Table 3にPeripheral instantiationという表があり、IDと機能の対応が見て取れる。

 

Tasksは、機能に働きかけるトリガ。「開始せよ」みたいな。
Eventsは、機能の変化通知。「状態が変わった」みたいな。
Shortcutsは、taskとeventの接続。接続・・・? eventが発生するとtaskが自動的にたたかれるらしい。
Interruptsは、CPU例外処理の、いわゆる割込。

え、これで説明終わり?
どうやってGPIOの割り当てを変更したりするの?


しょうがない、SPIの説明を読んでみるか。

ふむふむ、PSELSCK / PSELMOSI / PSELMISOのレジスタがあり、それにピン番号を書き込むようだ。
動的に変更できるってことですか。。。まさにGeneral Purpose。

しかし、ソフト的に変更できるっていうことは、多少の遅延が発生するのかな?
まあ私が作るようなソフトだったら影響はないだろうけど。

 

サンプルソースも見てみた。
SDKにレジスタを初期化するソースまで入っているので、全部書かなくてもよいみたいだ。
まあ、自分で書いた方がサイズは小さくなるかもしれんがね。

ちょっと嫌なのは、引数で初期値を渡すのではなく、"spi_master_config.h"というファイルに決められたマクロでピン番号などを書いておかないといかんところか。
まあ、メモリも少ないことだし、引数渡しなんかするよりは直接埋め込んだ方がよいってことなのかな。

[ble]BVMCN5102-BKにビルドして焼く

まだnRF51822自体がよくわかってないので、サンプルを焼くだけだ。

まず、Nordicのユーザ登録をしよう。
http://www.nordicsemi.com/eng/Products/Bluetooth-R-low-energy/nRF51822

image

Registerをクリックした先で、いくつか入力して登録。
メールが来たりして登録が完了したら、ログイン。

左側に「MY KEYS」があるので、クリック。

image

ここで、BVMCN5102-BKを購入したときに入っていた紙に書いてあるプロダクトキーを打ち込んでADD。
そうすることで、ダウンロード保護されていた開発環境などがダウンロードできるようになる。
今の私は、これがダウンロードできるようになった(スペックシートなどは保護されてない)。

image

とりあえず、全部ダウンロードしてから考えることにした。

image

nANはアプリケーションノートのPDF。RMはリファレンスマニュアル。PSはスペックシート。
nRF-MCPはMaster Control Panelなんだけど、いるかどうかわからん。
この中でインストールがいると思うのは、これらか。

  • nRFgo Studio
  • S110-SD-v?(今は6.0.0が最新なので、v6にした)
  • nRF518-SDK

SDKは統合開発環境とかじゃなくて、ヘッダやサンプルソースのような、純粋の開発環境。
nRFgo Studioは、焼かれているSoftDeviceの確認や、焼き換えに使う。


次は、デバッガの準備。
SEGGER社のJ-Link LITE CortexMが付属しているので、そのドライバをインストールする。

上記サイトに行くと、左側にDownloadsがあるので、クリック。
Productでコンボボックスから「J-Link LITE CortexM」を選択。
ドライバのダウンロードっぽいリンクが出てくるので、クリック。
そうすると、J-Link downloadsに飛ぶ。画像はLITEのじゃないけど、問題なさそう(J-Linkって黄色かと思ってた)。
今回はWindows環境なので、Windows用をダウンロード。
そうすると、シリアル番号の入力を求められる。
シリアル番号は、J-Linkのチップの上に書いてある。下画像の赤いところだ。

image

打ち込むとダウンロードできるので、ダウンロードして展開してインストール。
なお、このシリアル番号は接続の時にも使う。


BVMCN5102とJ-Link LITEはこんな接続になる。
ピンの穴が埋まっているのだが、逆にすると差し込めてしまうので注意だ。
ケーブルに油性マジックで3本の線が引かれている方がJ-Link側だと思う。

image

が、もう少し待とう。
まだクロスコンパイラが入っていないのだ。

今回は、gcc + eclipseを使う。
通常のARM開発と一緒のようなので、使い慣れた環境があるならそれでもよさそうだ。
私はあまり考えたくなかったので、NordicのアプリケーションノートnAN29に従うことにした。
「nRF51 Development with GCC and Eclipse」がそのタイトルだ。

では、順番にやっていこう。

1. Required tools

  • nRF51 SDKのインストール
  • GNU Tools for ARM Embedded Processorsのインストール
    • v4.7 2013q1と指定されてるけど、めんどうだったので右側から安定版っぽいのを探した
      • バージョンが上がって、warningがデフォルトでエラー扱いになってうっとうしいかも
    • CodeSourceryのとは、また別なの?
    • Makefile.windowsの編集
  • Core Utilityのインストール
  • Makeのインストール
    • cygwin入ってるけど、もういわれるがままにインストールした
  • J-Link
    • これは、さっき入れたやつ
  • eclipse
    • JunoのC/C++とあるけど、Android SDKがあったのでそれを使った。
      • 分けた方が良かったか・・・。
        • よし、せっかくなのでLunaでやり直そう!

 

1.1. Setting up Eclipse

  • CDTのMain FeatureとGDB Hardware Debuggingにチェックを入れてインストール
  • http://embsysregview.sourceforge.net/updateをインストール
    • これでレジスタ値が見やすくなる
  • eclipseのpluginsの中にembsysregviewがあるので、その中にnRF51 SDKに入っているnRF51.xmlをコピー
    • うちの環境だと、こんな感じ
      C:\Winappli\eclipse-cdt\plugins\org.eclipse.cdt.embsysregview.data_0.2.4.r168\data\cortex-m0\Nordic

 

1.2. Import existing Eclipse project to Workspace

  • ここら辺をImportする。
    C:\Nordic Semiconductor\nRF51 SDK_v5.2.0.39364\Nordic\nrf51822\Board\nrf6310\s110\ble_app_hrs

 

2. Setting up a project for debugging in Eclipse

  • 書いてある通りにやる。
  • SEGGER J-Link GDB Serverを立ち上げる
    image
    image
  • BVMCN51に電源供給してなかったら、少しすると上ダイアログが消えるので、USBで電源供給してから起動すること。
  • このダイアログが出た状態でeclipseのDebugを開始させると、ビルドし直して、焼いて、main()の先頭で止まってくれる。
    • 毎回cleanしてビルドされるので、ちょっとうっとうしいかも・・・。
      • まあ、書き換えればいいんだけどね。
  • あとは、走らせるなりなんなり・・・。

と行きたいところだが、サンプルそのままではたぶん動作しない。


理由は前の方のブログ記事を見てほしいが、BVMCN5102は素のままでは32Kの外部クロックがない。
で、サンプルは外部がある前提で書かれている。
内蔵32Kがあるんだから、そっち前提にしてほしいような・・・。

ぶつぶつ言っていても仕方ないので、サンプルを修正する。

その前に、STATIC_ASSERTの解決をしよう。
Include/app_common/app_util.hにSTATIC_ASSERTマクロの定義があるのだが、gccのバージョンが新しいとエラー扱いになってしまうのだ。
https://devzone.nordicsemi.com/question/4192/static_assert-and-gcc-instead-of-keil/

#define STATIC_ASSERT(EXPR) typedef char static_assert_failed[(EXPR) ? 1 : -1] __attribute__((unused))

 

そして本題の32Kクロック。

main.cのble_stack_init()を書き換え。

元:
SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, false);

変更後:
SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);

4000MSじゃなくてもいいけど、とにかくRC_250_PPMを選ぶ。

これをやっても動かないなら、SoftDeviceのバージョン違いを疑ってnRFgo Studioを使って焼き直そう。
動くと、こんな感じのパケットが吐き出される。

image

[ble]BVMCN5102-BKを接続する

Amazonで購入したBVMCN5102-BK KIT PLUSには、以下が付属していた。

  • (BVMCN5102-BK + 14pin x 2セット + DIP-SW) x 2セット
  • J-Link LITE CortexMとケーブル
  • BVMCN5102-BKのパターン図?
  • BVMCNDT52、SEGGER、USBの回路図

 

image

これは半田付け後の写真だ。
付けるのは、ムカデみたいなピンと、DIP-SWだけなので簡単。
ただ、DIP-SWのしたにはジャンパピンが半田付けできそうなところもあり、HPの写真ではなぜかそこも半田で埋まっていたので、実は何かするべきなのでは・・・と悩んだ。
テスターで計測し、SWだけで問題なかったので、それは忘れることにした。

 

image

SEGGERと接続すると、こんな感じ。
MicroUSBは、PCとの接続はないので、ACアダプタと接続することにした。
上がSEGGERというか、J-Link LITE CortexM。

 

ソフト的な環境は、ドキュメント通りだ。
nRFgo Studioは、最初にインストールすべきものだ・・・私の反省から。
組み込み技術者たるもの、すべてを疑ってかかるべきなのだ。
ああ、刑事の寂しい性だとは思いつつもな。

eclipse + gccでのことについては、また明日以降。

2014年6月27日

[ble]nRF51822の勉強を始めよう

うちには、BLEものが3つある。
1つ目は、PaSoRi RC-S390。
SDKが一般公開されていないので、使いようがない。
うう、残念・・・。
2つ目は、TIのSensorTag。
こいつでばりばり遊ぶぜ!と思ってたんだけど・・・開発環境がお高い。
趣味でやるお値段じゃなかったわ・・・。
でもこれと、BLEスニファを一緒に買ったので、いろいろと調査に役立っている。
でもでも、やっぱり自分で動かさないと、わからないよなあ。
ということで3つ目に買ったのが、BraveridgeのBVMCN5102-BK KIT PLUS。
転職先を探していて、ちょうど見つけて買ったというものだ。
(転職エージェントから、あんたは年齢層が高いから紹介をやめとくっていわれた(T_T) )

いかん、テンションが下がってしまったが、続けよう・・・。
この評価ボードは、GPIOもほどほどにあるが、Analog INも多い。
しかし・・・あまり初心者には親切じゃあない。
回路図がちょっと読みづらい・・・。
JP1, 2とあるけど、それが基板のどこになるかが書いてないので、テスターで確認したし。
それよりも、電源が不安だった。
MicroUSBのポートと、SEGGERのポートがある。
USBからはVout、SEGGERはVdd。
私はどちらも電源だろうと思い、USBを使わずにいたのだが、SEGGERに「ターゲットが見つからない」といわれる・・・。

えーーい、この基板を使っている人がどんだけいるかわからないけど、わかったことを書いていってやる!
と、SonyのRC-S620/Sを買ったときと同じような衝動を覚えた私であった。

2014年6月25日

[ble]nRF51822評価環境の個人まとめ

サンプルソースが動いたので、これからちゃんと見ていくことにしよう。
まずは、自分が使おうとしている環境がどういうものか、まとめておく。


買ったもの

BLE開発キット with J-Link segger (amazon)

 

評価基板

BVMCNDT52

  • nRF51822搭載
  • 外部16MHzクロック / 内蔵32.768KHzクロック(外部32K用のピンもある)
  • SoftDevice書き込み済み(だが、バージョンが仕様書と違うような・・・)
  • BLEが使えるように実装されている以外は、ほぼ素のnRF51822っぽい。
  • nRF58122の開発環境をするためのプロダクトキー付き

 

デバッガ

SEGGER J-Link LITE Cortex

  • JTAGデバッガみたいなもの。SWDっていう接続方法らしい。
  • デバッガのチップにシリアル番号が書いてあり、それを入力しないとドライバなどがダウンロードできない。

 


開発環境を作るのに手間取った。
記憶が薄れかかっているので、メモ程度に。

  • Nordic社のアカウントを作る。ここの右上に「Register」とあるので、そこからできる。
  • ログインするとMy Pageに入れるので、My Keysに行く。
  • プロダクトキーを入力する。
  • そうすると、いろいろダウンロードできるようになる。

ここで、何をインストールすれば良いかだが・・・とりあえず全部入れてみようって感じでやってしまった。
思うに、以下があればよいと思う。

  • nRF51 SDK
  • nRFgo Studio
  • S110-SDのどれか

nRF51 SDKでは、ヘッダとソースとサンプルソースがインストールされる。
このヘッダの中に、S110-SD(SoftDevice)に対応したインクルードファイルがあるのだが、おそらく最新の安定版が入っているようだ。
使うnRF51822にどういうSoftDeviceが入っているかは、nRFgo Studioで確認できる。
SDKと一致してなかったら、S110-SDに入っているインクルードファイルを入れ替えるか、同じく入っているHEXファイルを焼いてしまうかだろう。
前回の私は、焼きかえることで対応した。

 

nRFgo Studioのインストール時に、もしかしたらJ-Linkのドライバもインストールされたかも。
私はnRFgo Studioをインストールしてなかったので、自分でダウンロードした。

nRF51822にはCortex-M0が入っているので、開発環境はARMのものが使えそうだ。
私は、Nordicのドキュメントを見ながら、gcc+eclipse環境を作った。
gccはドキュメントに書いてあるバージョンじゃなくて最新のを使ったから、それに関する変更は行ったけど、それくらいでほぼPDFそのままできた気がする。
そこに書いてあった、hrsサンプルがようやく動いたのが、昨日だ。


次は、hrsサンプルをいじくって、自分で動かしてみるというところかな。
BLEよりも、まずはボードを動かしてみるというのが先だ。

[ble]意外ッ! それはバージョン違い!

コメントをいただき、やはり内蔵クロックがうまく出てないのじゃないかという気になってきた。

では、まずなんでマクロが終わらないかを見ていこう。
SOFTDEVICE_HANDLER_INITで止まっている理由を見るのだ。

 

image

 

この範囲をぐるぐる回っていた。
- r1 : 0x4000_0100
- r3 : 0x0000_0000

イベント待ち
0x4000_0104の値をr3にロード
r3が0かどうか比較
0だったら、戻る

0x4000_0104は、LFCLKSTARTEDだ。
それが0以外、つまり開始したらループを抜ける。
値が0なので、ぐるぐる回っている。

でもね・・・

image

LFCLKSTATのSTATEはRUNNINGなのよねぇ。
うーん・・・アセンブラレベルで追っていくか・・・。

あ、

image

ぐるぐる回る前に、32Kが外部クロックに指定されてる!
でも、sd_softdevice_enable()呼ぶまでは設定されてなかったし、sd_softdevice_enable()から抜けてないとなると、この中で設定されたことになる。

第Ⅰ引数は10進数で13。enumの順番とは一致している。
うーん・・・・?

今回私が使っているのは、SoftDevice6.0.0が焼かれている、と書いてあった。
6.0.0のenumは、こんな並び。

/**@brief Possible lfclk oscillator sources. */
enum NRF_CLOCK_LFCLKSRCS
{
  NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM,                       /**< LFCLK Synthesized from HFCLK.                    */
  NRF_CLOCK_LFCLKSRC_XTAL_500_PPM,                        /**< LFCLK crystal oscillator 500 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_250_PPM,                        /**< LFCLK crystal oscillator 250 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_150_PPM,                        /**< LFCLK crystal oscillator 150 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_100_PPM,                        /**< LFCLK crystal oscillator 100 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_75_PPM,                         /**< LFCLK crystal oscillator 75 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_XTAL_50_PPM,                         /**< LFCLK crystal oscillator 50 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_XTAL_30_PPM,                         /**< LFCLK crystal oscillator 30 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_XTAL_20_PPM,                         /**< LFCLK crystal oscillator 20 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION,        /**< LFCLK RC oscillator, 250ms  calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION,        /**< LFCLK RC oscillator, 500ms  calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION,       /**< LFCLK RC oscillator, 1000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION,       /**< LFCLK RC oscillator, 2000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION,       /**< LFCLK RC oscillator, 4000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION,       /**< LFCLK RC oscillator, 8000ms calibration interval.*/
};

その1つ前、5.2.1は、こんな並び。

/**@brief Possible lfclk oscillator sources. */
enum NRF_CLOCK_LFCLKSRCS
{
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION,  /**< LFCLK RC oscillator, 500ms  calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION, /**< LFCLK RC oscillator, 1000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION, /**< LFCLK RC oscillator, 2000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, /**< LFCLK RC oscillator, 4000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, /**< LFCLK RC oscillator, 8000ms calibration interval.*/
  NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM,                 /**< LFCLK Synthesized from HFCLK.                    */
  NRF_CLOCK_LFCLKSRC_XTAL_500_PPM,                  /**< LFCLK crystal oscillator 500 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_250_PPM,                  /**< LFCLK crystal oscillator 250 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_150_PPM,                  /**< LFCLK crystal oscillator 150 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_100_PPM,                  /**< LFCLK crystal oscillator 100 PPM accuracy.       */
  NRF_CLOCK_LFCLKSRC_XTAL_75_PPM,                   /**< LFCLK crystal oscillator 75 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_XTAL_50_PPM,                   /**< LFCLK crystal oscillator 50 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_XTAL_30_PPM,                   /**< LFCLK crystal oscillator 30 PPM accuracy.        */
  NRF_CLOCK_LFCLKSRC_XTAL_20_PPM,                   /**< LFCLK crystal oscillator 20 PPM accuracy.        */
};

赤文字は、13番目。
もしかして・・・6.0.0じゃなくて、5.2.1が焼かれているのでは?

nRFgo Studioをインストールしてみてみると・・・当たり!
バージョン違いだったー--

そりゃ動かんですな。
細かいことはわからんけど、サンプルのHeartRateも動いて、以前買ったスニファにも出てきた。

 

ふいー、ようやく地面に降りたった、というところだ。