わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

nRF52 Global Tech Tour 2015 に参加してきました

nRF52 Global Tech Tour 2015 Nordic Semiconductor は、Nordic Semiconductor社のBluetooth Low EnergyシングルモードチップnRF52の開発者向けイベントです。

世界各国で開催されていますが、日本では12月8日に東京そして12月10日に大阪で開催されます。東京 六本木ヒルズでの回に参加してきたので、レポートします。

ツアーの雰囲気や飲食

ツアーに参加すると最後に、9500円位するnRF52版開発ボードが参加者全員にプレゼントされました。各国の電波法の適用は受けていないので、外部に電波が出てしまわないようにシールドボックス内部などで使う必要がありますが、太っ腹です。

会場や集まった方々の雰囲気

場所は アカデミーヒルズ でした。360席ほどある会場が満員でした。
周りをざっと見渡すと、年齢は30代から50代、9割位の方がスーツ、またほとんど9割以上が男性でした。
日本の電気工学系の学部は、女性比率が2%程度だったりするので、こうなってしまうのだろうと思います。

プレゼンテーションは英語ですが、日本語の同時通訳が提供されていました。質疑応答も通訳の方がサポートしてくれるので、日本語で大丈夫でした。
同時通訳のイヤホンを使われている方は、見渡すと1割くらいで、普通に英語に慣れている方ばかりなのだな(大手電機メーカの方もきっと多いと思うので、それが当然なのかもしれませんが)
と思いました。

フロアにあるお手洗いは1つで、男性12人程度で一杯になるもので、休憩のたびに少し行列ができていました。私は出口付近の席にいたので、いの一番に外に出られたので、並ばなくてすみました。座る場所は指定されず、どこでもよいので、早めに出かけて場所を確保しておくのが、いいのかもしれません。

飲食など

お昼にはお弁当が出ました。

会場の直ぐ側には、飲み物とお菓子がたくさんありました。
紅茶、コーヒー、ペットボトルの水、そしてマフィンのようなお菓子が常に補充されていました。紅茶ばかり頂いていましたが、美味しい紅茶でした。

スライド抜粋

nRF52の概要

nRF52シリーズは、Nordic Semiconductor社にとって第3世代となるBluetooth Smart Socです。

nRF51シリーズは、2.4GHz帯の汎用無線回路と周辺回路そしてプロセッサを組み合わせて、通信処理をプロセッサに担わせることで規格の機能追加に柔軟に対応できる構成をとっています。

nRF52でも、その構成はnRF51と同じです。プロセッサの処理能力を高めフラッシュおよびRAM容量を増加、電源制御や周辺回路の数や能力を強化、そしてNFCを搭載しています。

nRF51はBluetooth 4.0までの無線通信技術に対して最適化されている感じがします。

nRF52は、Bluetooth4.2で追加されたセキュリティおよびIoTに向けた機能、また今後のBlueototh無線通信技術に追加されていくかもしれない、通信の高速化、音情報のやりとり、またIoTに向けたネットワーク技術への対応などに対応できる構成となっています。

プレゼンの構成

セミナーの流れとその雰囲気は、 nRF52 セミナー のまとめ がよくまとまっています。とくに@ksksueさんの一連のTWは、詳細までまとまっていて、素晴らしいです。

セミナーの資料は当日ダウンロード配布されていました。セミナーで配布された資料全体を不特定多数に勝手に配布したりするのは、やめてくれという話でしたが、ブログで技術紹介をするときに、スライドの一部を参照するのはできるっぽいらしいので、このブログでは必要な部分を掲載しています。

全体のプレゼンテーションは、半導体のハードウェア構成、その特徴と活用のポイント、そしてソフトウェア・スタックやSDKのファームウェア・開発、そしてIoT系の話題で構成されていました。また最後に、日本のモジュール・メーカ各社(太陽誘電、富士通、ブレイブリッジ、ホシデン)から、nRF52の無線モジュールについてのプレゼンテーションがありました。

プレゼンテーションは、ほとんどがハードウェアよりの内容でした。BLEは2015年時点では、スマートフォンと連携するハードウェアによく使われています。ですから、スマートフォンおよびそのアプリケーションとの連携や開発情報は重要だと思うのですが、そういったものは今回はカバーされていませんでした。その代わり、2015年はいろいろなところで話題にされたIoTについて、1セッションが取られていました。

プロセッサとその周辺

  • プロセッサの処理能力の強化
  • EasyDMAとPPIを組み合わせたプロセッサを使わずに済む仕組み
  • スリープ時の消費電流をより低減

などが特徴です。

処理能力の強化

nRF52は、デジタル信号制御市場向けに開発されたARM社のプロセッサCortex-M4Fをコアに採用しています。

Cortex-M4自体、デジタル信号処理に適した命令が追加されてDSP機能が強化されています。Cortex-M4Fは、Cortex-M4に、さらに32ビットの単精度浮動小数点ユニットというハードウェアを追加したものです。

nRF52の動作周波数は 64MHz RAM 64 kByte フラッシュROM 512 kByte です。

nRF51は、Cortex-M0 で、動作周波数 16MHz、 RAM 16 kB または 32kB、 フラッシュROM 128 kB または 256 kB です。

nRF52はnRF51よりも、単純にクロックで4倍、また浮動小数点演算は専用の演算回路がハードウェアであるため10倍ほどの演算能力があります。

プロセッサを使わずに済む仕組み

nRF52は、nRF51にもあったPPIおよびEasyDMAという2つの機能を強化して、プロセッサがスリープしたままでも、例えばTWIで接続された加速度センサーから一定周期でデータを読み込む、ような処理ができます。

PPIはnRF51からある機能です。これは周辺回路にあるイベントとタスクを、ソフトウェアで結びつけて、周辺回路を組み合わせた機能を実現するものです。

例えば、パルス幅変調信号を生成したいとします。

PPIでは、周辺回路にはイベントとタスクという概念があります。

TIMERには、オーバフローやカウント値が設定値と同じになった等の、いくつかのイベントがあります。またTIMERには、カウント値をカウントアップする、または0クリアする等のタスクがあります。

TIMERの、カウント値が設定値と同じになったイベントを、カウント値を0クリアするタスクに、プログラムで結びつけるように設定します。こうすると、カウント値ごとにイベントが発生させられます。

また、汎用IOであるGPIOTEには、出力値をトグルするタスクがあります。先ほどのTIMERのイベントを、このトグルするタスクにも結びつけましょう。すると、一定期間ごとにGPIOの出力がトグルする、つまりカウント値で指定した期間の2倍のパルスが出力できます。

例にあげた、PWM信号の生成は、プロセッサではよく使われる機能です。ですから、一般にPWM信号を生成してGPIOから出力する機能は、マイコンメーカ各社がそれぞれ工夫してタイマー自体の機能として提供しています。nRF51およびnRF52は、これ以上シンプルにできないところまで機能を簡素にして、それらの機能をソフトウェアで組み合わせられるPPIという仕組みを使って、複雑で多種多様な機能を組み上げるというアプローチをとっています。

EasyDMAはnRF51でも採用されていましたが、無線回路やSPIスレーブなど一部の周辺回路のみにありました。nRF52では周辺回路全てにEasyDMAが入りました。

EasyDMAは、周辺回路が64kBのRAM領域に直接読み書きする機能です。例えば、TWI(いわゆるI2Cです)などのシリアル・インタフェースで加速度センサーの値を読みだす時に、プロセッサを起動することなく、TWIから設定されたRAM領域に直接データを書き込ませられます。

PPIとEasyDMAを組み合わせると、例えば、TWIで指定したメモリ領域から2バイトを出力(加速度センサーのアドレスと読み出し指示)して、3バイトを読み込みメモリポインタをインクリメントしつつRAMに書き込む、これを10回繰り返したら、プロセッサに割り込みをかける、といったシーケンスを組み立てられます。

このシーケンスの実行に一切プロセッサは必要ないので、プロセッサはスリープ状態、つまり電力を低減できるというわけです。

スリープ時の消費電流をより低減

nRF52には、スリープ時の消費電力も、より低減できる工夫が入っています。プロセッサのコア動作時の消費電力は、3V電源でDCDCが有効なとき3.3mAです。RTCが有効なアイドル時の消費電流が1.6マイクロアンペア、スリープから40マイクロ秒でスタートアップします。

また、RAMの値保持は、4kBごとに保持するしないが指定できて、保持する場合は4kBごとに40nAです。nRF51はRAM全体で保持する保持しないを指定できて、保持する場合の消費電力は1.2マイクロアンペアでした。

消費電流を極限まで低減したい場合に、ファームウェア開発者がよりハードウェアにより手が届くようになっています。電源がACアダプタなどであれば、マイクロアンペア程度の消費電流の増減が問題にはならないなら、そのような作り込みをする必要はまったくありませんが。

周辺回路

無線回路

無線回路の消費電流は、動作電圧3VでDCDCが有効なとき < 6mA です。送信電力が最大+4dBm、最小-20dBmに設定できるので、消費電流に幅がでます。

受信感度は-96dBm、nRF51が-93dBmですから2倍高感度化、またオンチップバランにより外付け部品は回路図上では2つにまで簡素化されます。

nRF51に対してnRF52は、受信時の消費電流を半減、送信時の消費電力を3割減となっています。この値はnRF52のオンチップDC/DCが有効な場合での値です。DC/DCを使わない構成をとった場合は、オンチップのLDOのみが使われます。この時、nRF51に対してnRF52の受信時消費電流は1割減、送信時消費電力は4パーセント増となります。

またオンザフライでパケットの暗号化/復号化、またペアリングした相手がランダムアドレスを使っている時に、そのアドレスを復号する機能が無線回路に入りました。

Bluetooth4.0では、ホワイトリストに指定できるアドレスは、パブリック・アドレスのみでした。Bluetooth4.2では、ランダム・アドレスも指定できます。

nRF51ではランダム・アドレスの解読はプロセッサで処理する他ありませんでした。これが無線回路で処理されるので、消費電力を増やすことなく、Bluetooth4.2で追加されたホワイトリストの機能が活用できます。

またIoTなどの通信では、パケットの暗号化/復号化は常に使われる機能となっていくでしょう。そのような処理を無線回路で行うことは、消費電力低減に役立ちそうです。

電源回路

nRF51はDC/DCを使う/使わないで、外部配線が異なりました。nRF52はDC/DCに必要なコイルとコンデンサが、あるかないかだけのシンプルな違いだけになります。

GPIOの入出力電圧には、VDDがそのまま使われます。

DC/DCとLDOを組み合わせて、コア電圧は無線回路などが使う1.3V、プロセッサが使う0.9Vの2種類が作られます。これらはチップ内部でのみ使われます。

システムの動作状態で、DC/DCおよびLDOの動作状態が自動的に切り替わります。

リフレッシュモードの消費電流波形をみると、例えばスライドの例では、350マイクロ秒ごとに、15mA 10マイクロ秒のスパイク状の電流が流れています。

消費電流を計測するときに、普通のテスターをDC電流モードで直接使うと、このようなスパイク状の電流をサンプリングできずに、正しく計測できません。デジタル・マルチメーターの中には、電流値を積分して平均値を表示するもの、例えばADCMTの76461Aなど、がありますが、サンプリング周波数は20kサンプル/秒、5マイクロ秒周期で、10マイクロ秒のパルス電流を測るには、足りません。

nRF52の開発ボードのHardware Filesにある回路図 PCA10036_Schematic_And_PCB.pdf の6シート目を見ると、電流測定用に、P22があり、SB9をパターンカット、R6に適当な抵抗をつければ電流測定に使えるようになっています。

オシロを使うなり、適当な抵抗と大きめの電解コンデンサを組み合わせて、十分なまった波形にするなりして、測定するようにします。

HFCLK

nRF52の32kHzのクロックと32MHzのクロックがあります。HFCLKは32MHzのクロックのことを指します。このクロックはnRF52内部のPLLが出力しています。

外部の32MHzの水晶は、常に発振しているとは限りません。ソフトウェアあるいは内部ハードウェアから、XO REQUESTという信号がHIGHになった時に、水晶発振回路が動作を開始して、それにPLLがロックします。

XO REQUESTがLOWであれば、PLLはフリーラン状態です。またXO REQUESTがたってからPLLがロックするするまで、いくらか時間がかかります。

ADC

8/10/12-bitの逐次比較型ADC(Successive approximation ADC)です。0からVDDまでのフルスケール入力レンジ、シングルエンドまたは差分入力、最大8チャンネル、外部タイマーを必要とせず連続サンプリング(~200kHz)できます。

ADCに限らずnRF52の周辺回路は、通常であれば別にタイマーが必要になる場面でも、そもそもタイマーが必要になる周辺回路には、外部からタイマーを必要としないようになっています。タイマーは貴重な資源ですから、周辺回路に取られずにすむのは、ありがたいです。

nRF51のADCとは、ハードウェアが違うADCが採用されています。ファームウェアからの使い方も、まったく異なります。nRF51からnRF52にコードを移植するときは、ADCを使っているならば、書き直します。

4回サンプルして平均を求めるオーバサンプリングなど、音声用途などに使える機能があります。

PDM, I2S, PWM

PDMは、Two wire digital audio interfaceの略です。マイクロホンに使われる、パルス幅信号入力です。L/Rの2つのマイクロホンから信号を取り込むことができます。

I2Sは、SPIをベースにオーディオ向けに変更されたシリアル・バスインタフェースです。コーデックを内蔵したオーディオ用半導体によく使われています。それらの半導体の接続に使えます。

nRF52のPWMは任意波形の生成にも使えるほど、強力です。おもちゃ品質の音出力であれば、PWMつまりnRF52単体でも、波形を生成、出力できます。またLEDのフェードイン/フェードアウトなどにも使えます。

NFC

nRF52には、NFC-A Listen mode compliant な機能があります。NFC-Aは、13.56MHzの磁界を発生するイニシエータと、その磁界を受け取り負荷変動でイニシエータに信号を返すタグの2つがあります。nRF52がなれるのはタグで、Read/Write Modeをサポートします。nRF52はイニシエータには、なれません。

BluetoothはNFCを、無線通信を使わない鍵交換手段として活用します。無線以外の媒体で鍵を交換することで、セキュリティをより強固にできます。また、NFCはモノ自体に近づかないと反応しないので、いま接続したいものが何かが物理的にわかりやすくなることも利点です。

NFCで鍵を交換する場合、Just works、OOB(Out-of-Band)ペアリング ができます。

nRF52のNFCは3つのモードがあります:

  • DISABLE
    – すべてが電源オフ
  • SENSE
    – システムはオンまたはオフ
    – 消費電流は100nA程度
  • ACTIVATED
    – フレームの送受信ができる
    – 400uA程度

NFC-Aのプリコンパイルされたライブラリで、Type 2 Tagの次の機能が使えます。

  • NFC NDEFメッセージフォーマット
  • コネクション・ハンドオーバ・レコード
  • アプリケーション・ランチ・レコード
  • URIレコード

これらを使うと、BLE機器が対応しているアプリケーションを開く、(商品や解説などの)ウェブページを開く、などもできます。

このライブラリがサポートしているのはreadモードだけです。writeモードはメモリ消費量などを考慮して、今は対応されていません。対応はできるので、要望があればwriteも提供するとのことです。

nRF52のファームウェア・開発

Bluetoothの認証を確保したまま、ユーザアプリケーションを動作させるために、半導体と一緒にソフトウェア・デバイスという、スタックや時間制御を行うものをバイナリで提供しています。

ユーザアプリケーションは、タイミング制御などをこのライブラリに任せることで、Bluetoothの認証制度の恩恵を受けることができます。

nRF51ではS110, S120が提供されてきました。これらはメンテナンスモードに。新機能などはS130に移行。S130はnRF52のSDKとAPIが近い。もしもnRF51からnRF52に移行するならば、S130を使っておけば、移行しやすくなるかも。

nRF52のソフトウェア・デバイスは、S132。リリースは2016年2月予定。

  • S132
    – タイムスロットAPI。マルチプロトコル。
    – メモリの効率、セキュアDFU。
    – セントラルとペリフェラルの数、選択設定できる。
    – バンド幅、それぞれのリンクごと。設定。

タイムスロットAPIとは、無線回路がBLEに使われていな空き時間に、ファームウェアから利用するAPI。例えば、独自のメッシュネットワークや、独自の無線通信プロトコルを、BLEと共存させながら、ファームウェアで実装できる。

S132はANTを含む。リアルタイムOS、RTXとFreeRTOSに対応している。ソフトウェア・デバイスの上に、リアルタイムOSが乗る形。

  • S132の次
    – IPv6 over BLE
    – L2CAP チャンネル
    – Long MTUサイズ
    – 1パケットの255バイトまで

SDKには、標準的なSDKに加えて、他に:

  • IoT SDK
  • HomeKit SDK

がある。

IoT系の話題

省略。メッシュネットワークはどうなる?の質問が多かった。

日本の会社からの無線モジュールのリリース予定

2016年2月あたりから日本の各社から無線モジュール。

質疑応答のまとめ

  • iBeacon用にはnRF51よりもnRF52がおすすめなのか?
    – nRF52はDCDCまわりが変更されている。自動的にダイナミックにモードを切り替えるから、DCDCを有効にして使え。
  • 電源の入力電圧範囲が最大3.7V。最近のLi-ionでは、3.8Vとかそれ以上になる。Li-po等は想定外か。
    – nRF52とは別にDCDCを用意して対応すればよい。(注釈:充電管理ICをつけることになるので、大抵そうなる)
  • Q: nRF52内部のフラッシュには、どのタイミングで書き込まれるのか。
    – pstorageというライブラリを通じて行うことで、ソフトウェアデバイスを通じて、フラッシュ書き込みがされる。
  • Q: フラッシュの書き込み位置の分散しているのか
    – それはしてない。
    – (注:)
  • S130とS132の互換性は?
    – スタックの内部とかは異なってくる。その辺りは違う。まぁいけるか。
    – APIは互換。
    – 移植、ピン配置まわり、PWMの設定。
  • BLEのセントラル、ペリフェラル、ANT、3つを統合したスタックは出るのか?
    – nRF51では現在のスタックで、メンテナンス。つまり、でない。
    – nRF52で提供。
  • nRF52に対して、ShockwaveやGazelは提供がある?
    – 提供される。
  • ソフトウェアデバイスにとられる最大の処理時間はどの程度か。
    – 60us、最大で。
  • QDID、いままでS110/S130でIDが違う。今後は1つに統合されて?
    – 統合される。
  • RTOS2つあるけど、どっちがおすすめ?
    – どっちでも。自分はFreeRTOSが好み。
  • IoT SDK タイムライン?
    – アルファステート。nRF52のみ。別途マーケティングから。
  • NFC的な、技適みたいななにか制度が必要?
    – NFCフォラームのロゴ認証程度?
  • サービスとキャラクタリスティクス、数の上限はあるのか?
    – メモリとチップでの制限。
  • nRF51、キャラクタリスティクス8つくらいだと、繋がりにくかった時が。
    – 通信相手の問題じゃない?