nRF51822をずっとPeripheralで使っていたが、SoftDeviceのS130はどちらにもなれるということなので、まずはS110→S130へ移行してみようとした。
結果として、動きはしたのだが、情報を集めきれなくて正しくはないかもしれないという思いがある。
github
元々は、nRF51822でBluetooth Developer Studioを使ってServiceを作ってAD/Cするサンプルアプリだったのだが、もうその形をとどめていない。
なので、あまり気にしないように。
変更点
- nRF51822にSoftDevice S130 v2.0.0-7alphaをnRFgo Studioで焼く。
- GCCなので、リンカスクリプトをnRF51 SDK v10.0.0からコピーする。
- FLASH, RAMともに違いがあるので、適当に直す。
- nRF51 SDK v10.0.0はS130 v1.0.0向けなので、いくつか変更する。
- components/softdevice/s130/headersを、S130のincludeと置き換える。
- Makefileも、S110からS130のパスに変更する。
- マクロ名変更でエラーが発生することがあるので、適当に直す。
- コールバック関数型の名称も変わっていてwarningが出るので、warningをエラーと見なすオプションを外す。
- 他にもAPI仕様が変わったりしているので、適当に直す。
だいたい、こんな感じだ。
感想
SDKが対応していないので、サンプルもない。
そこが一番面倒だ。
nRF52 S132と同じ系統のAPIになろうとしているので、そちらから情報を検索した方が集まりやすいかもしれない。
特にsd_ble_enable()にどういう値を与えたら良いかは、nRF52のQAが役立った。
リリースノートには「最低4.5KBのRAMがいる」としか書かれておらず、リンカでどのくらい確保して良いのかがわからなかった。
上記QAを参考に取得し、いまはもうちょっと余裕を持たせたサイズで確保している。
まだわかってないこと
ATTテーブルにどのくらいのサイズを与えたら良いかがわかっていない。
BLE_GATTS_ATTR_TAB_SIZE_MINで与えたのだが、これでは自分で用意したServiceが出てこなかったのだ。
かといって、BLE_GATTS_ATTR_TAB_SIZE_DEFAULTを指定するのも悔しいので、計算方法を見つけたいところだ。