SlideShare a Scribd company logo
Nordic nRF51822 で BLE してみました
● Bluetooth Low Energy(BLE) をやってみたのだ。
●
入手しやすく、開発環境も無料で手に入る nRF51822 を使った。
● mbed ではない、ほぼ素の nRF51822 である Braveridge 社の
ボードを購入した。
●
買ったときは mbed 版が無かったということもあるが、素の環境でやった方
が応用が利きやすいと思ったこともある。
試したときの環境
nRF51822
●
IC revision : 2
● HWID : 004D
● FLASH : 256KB
● RAM : 16KB
● SoftDevice : S110 v7.1.0
● nRF51 SDK : v7.2.0
● Compiler : GCC – gcc-arm-none-eabi-4_9-2014q4
● Debugger : SEGGER J-Link LITE CortexM
● IDE : eclipse LUNA + CDT
● Monitor : TI SmartRF Packet Sniffer
nRF51822 のボード
● Braveridge 社の BVMCNDT52
● J-Link とのセットで売られていたので、これを選んだ。
● mbed のボードも売られているが、その場合はこの資料は役に立
たない ( と思う ) 。
デバッガを接続
● SWD タイプ
●
書くのを忘れていたが、 nRF51822 は ARM Cortex-M0 が載って
いる。
● 赤で塗っているところに書いてある数字を入力しないと使えない
開発環境の入手先
● SoftDevice : S110 v7.1.0
● http://www.nordicsemi.com/eng/nordic/Products/nRF51822/S110-SD-v7/30082
●
nRF51 SDK : v7.2.0
● https://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v7.x.x/
● nRF51 Tools : v6.2.2
● http://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF51-Tools/33444
●
Compiler : GCC – gcc-arm-none-eabi-4_9-2014q4
● https://launchpad.net/gcc-arm-embedded
● Debugger : SEGGER J-Link LITE CortexM
● https://www.segger.com/jlink-software.html
● nRF51 Tools に入っているので、個別に入れなくてもよいかも。
● IDE : eclipse LUNA for C/C++ Developers
● https://eclipse.org/downloads/
● Keil : MDK-ARM Lite
● https://www.keil.com/demo/eval/arm.htm
● GCC+eclipse を書いておいてなんだが、 32KB 制限はあるもののこちらの方がはるかに楽。
SoftDevice ?
●
nRF51822 アプリで BLE する場合は、 nRF51822 のレジスタを操作す
るのでは無く、 SoftDevice に依頼する形を取る。
●
例:アドバタイジングの開始
●
アプリ : sd_ble_gap_adv_start() を呼び出す
➢
SoftDevice への依頼に置き換えられる
SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start...)
●
OS ではないが、 Linux でシステムコールしているような感じ
●
略称は SD 。主に以下だが、 S130 はメジャーバージョンになってない
●
S110 : Peripheral/Broadcaster 専用
●
S120 : Central 専用
●
S130 : Central/Peripheral/Observer/Broadcaster
注意すること
● バージョンの関係
● SoftDevice のバージョンと、 SDK のバージョンは密接に関係している
● nRF51822 の revision と SoftDevice のバージョンも制限があるらしい
● 範囲外でも動かないことはないのかもしれないが、動かなくても文句が言えない。
● “Compatibility Matrix”(ATTN-51) を見ないとわからない。
● nRF51822 に焼いてある SoftDevice と SDK でビルドしたアプリ
が不一致だと、アプリが動かない場合がある
● enum の値が変わっていたりとか。
●
動かなくてもソースには間違いが無いので、かなり悩むことになる。
●
購入した nRF51822 に焼かれている SoftDevice が何かわからない場合は、ま
ず焼き直した方が無難。
サンプルアプリはどれにする?
● nRF51 SDK にはサンプルアプリも入っているので、それを使う。
● ble_app_hrs がお手頃か。
● ble_app_beacon がいわゆる iBeacon 形式なのだが、
確か今の iOS は iBeacon が MFi の承認を取らないと
通知しないようになったと思う。
●
以前はアプリケーションノート nAN-29 に
GCC+eclipse での説明があり、そこで ble_app_hrs を
動かすようになっていたのだ。
●
なので、 BLE の Advertising を確認できるツールを
持っているならば、どれでもよいと思う。
サンプルアプリを自分の環境に合わせる
● nRF51822 ボードに合わせて書き直す
●
例えば ble_app_hrs の場合、 pca10028 と pca10031 というフォルダがある
●
その中に、 s110/armgcc/makefile がある
●
差分を取るとわかるが、違うのは定義名だけ
●
それは examples/bsp フォルダのなかで吸収している
● 自分のボードに合わせて書き直すなり、設定を増やすなりしよう
●
それでも吸収できないソースの変更
●
SOFTDEVICE_HANDLER_INIT() の引数
https://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v7.x.x/doc/7.2.0/s110/html/a01070.ht
ml#gaef6aabaa8887cb4d7265d7e21b3ec242
● デフォルトでは外部に水晶発振子が接続されていることになっているため、接続されていな
いボードでは「外部クロックの安定待ち」で待ったままになってしまう。
"_XTAL_" は外部発振子用、 "_RC_" は内部発振子用なので、書き換える。

More Related Content

PDF
HDMI探検隊
PDF
レシピの作り方入門
PDF
スクリプトエンジンをつくる話
PDF
無線LANデバイスについて(kernelレベル)
PDF
About GStreamer 1.0 application development for beginners
PDF
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
PDF
Wireguard 実践入門
PPTX
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
HDMI探検隊
レシピの作り方入門
スクリプトエンジンをつくる話
無線LANデバイスについて(kernelレベル)
About GStreamer 1.0 application development for beginners
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
Wireguard 実践入門
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-

What's hot (20)

PDF
Pcapngを読んでみる
PDF
BGP Unnumbered で遊んでみた
PDF
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
PPTX
MediaRecorder と WebM で、オレオレ Live Streaming
PDF
エンジニアから飛んでくるマサカリを受け止める心得
PDF
ライブストリーミングの基礎知識
PPTX
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
PPTX
ドメイン駆動開発 勉強会 ①
PDF
Proxmox VE 開源伺服器虛擬化應用經驗分享 [2019/11/12] @OpenInfra Days Taiwan 2019
PDF
ネットワークエンジニアはどこでウデマエをみがくのか?
PDF
大規模サービスを支えるネットワークインフラの全貌
PDF
パケットキャプチャの勘どころ Ssmjp 201501
PPTX
0円でできる自宅InfiniBandプログラム
PPTX
Python製BDDツールで自動化してみた
PDF
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
PDF
こわくない Git
PDF
インターネットの仕組みとISPの構造
PDF
初心者向けCTFのWeb分野の強化法
PDF
セキュアエレメントとIotデバイスセキュリティ2
PPTX
設計と実装で 抑えておきたい サービスクラスと例外
Pcapngを読んでみる
BGP Unnumbered で遊んでみた
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
MediaRecorder と WebM で、オレオレ Live Streaming
エンジニアから飛んでくるマサカリを受け止める心得
ライブストリーミングの基礎知識
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
ドメイン駆動開発 勉強会 ①
Proxmox VE 開源伺服器虛擬化應用經驗分享 [2019/11/12] @OpenInfra Days Taiwan 2019
ネットワークエンジニアはどこでウデマエをみがくのか?
大規模サービスを支えるネットワークインフラの全貌
パケットキャプチャの勘どころ Ssmjp 201501
0円でできる自宅InfiniBandプログラム
Python製BDDツールで自動化してみた
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
こわくない Git
インターネットの仕組みとISPの構造
初心者向けCTFのWeb分野の強化法
セキュアエレメントとIotデバイスセキュリティ2
設計と実装で 抑えておきたい サービスクラスと例外
Ad

Similar to Nordic nRF51822でBLEしてみました (20)

PDF
PF部第19回資料 poor man's JTAG
PDF
NetBSD/evbarm on Raspberry Pi
ODP
NetBSD/Zynq
PDF
Beginner for install US$40 JUNK Intel Macbook in 2020 はじめての4,500円ジャンクIntel Ma...
PDF
retrobsd-2012-JUL-07 at JNUG BSD BoF
PDF
Beginner for install Android applications in Xiaomi MiReader  はじめてのXiaomi MiR...
PPTX
BlackMagic ProbeでARMをデバッグする
PDF
Big Raspberry JAM TOKYO 2013 Hardware
PPTX
LLILUM and TinyCLR OS
PDF
Pdp11 on-fpga
PDF
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
PDF
WireGurad in the FreeBSD kernel
PPT
20110715 osc2011 kyoto
PDF
Symfony2 Behat/BDD (#Symfony2study 4)
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PDF
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
PDF
Hacking with x86 Windows Tablet and mobile devices on Linux #FOSSASIA
PDF
Dpdk環境の話
PDF
BVMCN5102-BK Kit+開発環境構築まとめ‬
PPTX
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
PF部第19回資料 poor man's JTAG
NetBSD/evbarm on Raspberry Pi
NetBSD/Zynq
Beginner for install US$40 JUNK Intel Macbook in 2020 はじめての4,500円ジャンクIntel Ma...
retrobsd-2012-JUL-07 at JNUG BSD BoF
Beginner for install Android applications in Xiaomi MiReader  はじめてのXiaomi MiR...
BlackMagic ProbeでARMをデバッグする
Big Raspberry JAM TOKYO 2013 Hardware
LLILUM and TinyCLR OS
Pdp11 on-fpga
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
WireGurad in the FreeBSD kernel
20110715 osc2011 kyoto
Symfony2 Behat/BDD (#Symfony2study 4)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
Hacking with x86 Windows Tablet and mobile devices on Linux #FOSSASIA
Dpdk環境の話
BVMCN5102-BK Kit+開発環境構築まとめ‬
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
Ad

More from Hirokuma Ueno (20)

PDF
nRF51のGPIOTEについて
PDF
Nordic nRF51822でBLEしてみました 2
PDF
About FeliCa Lite-S
PDF
月刊NDEF 2013年12月号
PDF
月刊NDEF 2013年8月号
PDF
月刊NDEF 5月号
PDF
月刊NDEF 2013年 1、2、3月号
PDF
旅行カバンとNFC
PDF
NDEF WriterとOSとPaSoRi
PDF
NDEF Writerを使ってみよう
PDF
月刊NDEF 2013年3月号(卒業号)
PDF
月刊NDEF 2013年2月号(臨時号)
PDF
月刊NDEF 2013年1月号
ODP
MIFARE ClassicのAccess Conditions
PPT
FeliCa Liteの片側認証
PDF
SNEPは大変だった
PDF
NFC切手
PDF
NFCの汎化
PDF
一人でもSNEP開発
PDF
NFCIP-1を斜め読み
nRF51のGPIOTEについて
Nordic nRF51822でBLEしてみました 2
About FeliCa Lite-S
月刊NDEF 2013年12月号
月刊NDEF 2013年8月号
月刊NDEF 5月号
月刊NDEF 2013年 1、2、3月号
旅行カバンとNFC
NDEF WriterとOSとPaSoRi
NDEF Writerを使ってみよう
月刊NDEF 2013年3月号(卒業号)
月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年1月号
MIFARE ClassicのAccess Conditions
FeliCa Liteの片側認証
SNEPは大変だった
NFC切手
NFCの汎化
一人でもSNEP開発
NFCIP-1を斜め読み

Nordic nRF51822でBLEしてみました

  • 1. Nordic nRF51822 で BLE してみました ● Bluetooth Low Energy(BLE) をやってみたのだ。 ● 入手しやすく、開発環境も無料で手に入る nRF51822 を使った。 ● mbed ではない、ほぼ素の nRF51822 である Braveridge 社の ボードを購入した。 ● 買ったときは mbed 版が無かったということもあるが、素の環境でやった方 が応用が利きやすいと思ったこともある。
  • 2. 試したときの環境 nRF51822 ● IC revision : 2 ● HWID : 004D ● FLASH : 256KB ● RAM : 16KB ● SoftDevice : S110 v7.1.0 ● nRF51 SDK : v7.2.0 ● Compiler : GCC – gcc-arm-none-eabi-4_9-2014q4 ● Debugger : SEGGER J-Link LITE CortexM ● IDE : eclipse LUNA + CDT ● Monitor : TI SmartRF Packet Sniffer
  • 3. nRF51822 のボード ● Braveridge 社の BVMCNDT52 ● J-Link とのセットで売られていたので、これを選んだ。 ● mbed のボードも売られているが、その場合はこの資料は役に立 たない ( と思う ) 。
  • 4. デバッガを接続 ● SWD タイプ ● 書くのを忘れていたが、 nRF51822 は ARM Cortex-M0 が載って いる。 ● 赤で塗っているところに書いてある数字を入力しないと使えない
  • 5. 開発環境の入手先 ● SoftDevice : S110 v7.1.0 ● http://www.nordicsemi.com/eng/nordic/Products/nRF51822/S110-SD-v7/30082 ● nRF51 SDK : v7.2.0 ● https://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v7.x.x/ ● nRF51 Tools : v6.2.2 ● http://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF51-Tools/33444 ● Compiler : GCC – gcc-arm-none-eabi-4_9-2014q4 ● https://launchpad.net/gcc-arm-embedded ● Debugger : SEGGER J-Link LITE CortexM ● https://www.segger.com/jlink-software.html ● nRF51 Tools に入っているので、個別に入れなくてもよいかも。 ● IDE : eclipse LUNA for C/C++ Developers ● https://eclipse.org/downloads/ ● Keil : MDK-ARM Lite ● https://www.keil.com/demo/eval/arm.htm ● GCC+eclipse を書いておいてなんだが、 32KB 制限はあるもののこちらの方がはるかに楽。
  • 6. SoftDevice ? ● nRF51822 アプリで BLE する場合は、 nRF51822 のレジスタを操作す るのでは無く、 SoftDevice に依頼する形を取る。 ● 例:アドバタイジングの開始 ● アプリ : sd_ble_gap_adv_start() を呼び出す ➢ SoftDevice への依頼に置き換えられる SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start...) ● OS ではないが、 Linux でシステムコールしているような感じ ● 略称は SD 。主に以下だが、 S130 はメジャーバージョンになってない ● S110 : Peripheral/Broadcaster 専用 ● S120 : Central 専用 ● S130 : Central/Peripheral/Observer/Broadcaster
  • 7. 注意すること ● バージョンの関係 ● SoftDevice のバージョンと、 SDK のバージョンは密接に関係している ● nRF51822 の revision と SoftDevice のバージョンも制限があるらしい ● 範囲外でも動かないことはないのかもしれないが、動かなくても文句が言えない。 ● “Compatibility Matrix”(ATTN-51) を見ないとわからない。 ● nRF51822 に焼いてある SoftDevice と SDK でビルドしたアプリ が不一致だと、アプリが動かない場合がある ● enum の値が変わっていたりとか。 ● 動かなくてもソースには間違いが無いので、かなり悩むことになる。 ● 購入した nRF51822 に焼かれている SoftDevice が何かわからない場合は、ま ず焼き直した方が無難。
  • 8. サンプルアプリはどれにする? ● nRF51 SDK にはサンプルアプリも入っているので、それを使う。 ● ble_app_hrs がお手頃か。 ● ble_app_beacon がいわゆる iBeacon 形式なのだが、 確か今の iOS は iBeacon が MFi の承認を取らないと 通知しないようになったと思う。 ● 以前はアプリケーションノート nAN-29 に GCC+eclipse での説明があり、そこで ble_app_hrs を 動かすようになっていたのだ。 ● なので、 BLE の Advertising を確認できるツールを 持っているならば、どれでもよいと思う。
  • 9. サンプルアプリを自分の環境に合わせる ● nRF51822 ボードに合わせて書き直す ● 例えば ble_app_hrs の場合、 pca10028 と pca10031 というフォルダがある ● その中に、 s110/armgcc/makefile がある ● 差分を取るとわかるが、違うのは定義名だけ ● それは examples/bsp フォルダのなかで吸収している ● 自分のボードに合わせて書き直すなり、設定を増やすなりしよう ● それでも吸収できないソースの変更 ● SOFTDEVICE_HANDLER_INIT() の引数 https://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v7.x.x/doc/7.2.0/s110/html/a01070.ht ml#gaef6aabaa8887cb4d7265d7e21b3ec242 ● デフォルトでは外部に水晶発振子が接続されていることになっているため、接続されていな いボードでは「外部クロックの安定待ち」で待ったままになってしまう。 "_XTAL_" は外部発振子用、 "_RC_" は内部発振子用なので、書き換える。