• 検索結果がありません。

RE01Bグループ Bluetooth Low Energy サンプルコード (using CMSIS Driver Package) アプリケーションノート

N/A
N/A
Protected

Academic year: 2021

シェア "RE01Bグループ Bluetooth Low Energy サンプルコード (using CMSIS Driver Package) アプリケーションノート"

Copied!
110
0
0

読み込み中.... (全文を見る)

全文

(1)

RE01B グループ

Bluetooth Low Energy サンプルコード (using CMSIS Driver Package)

要旨

本アプリケーションノートは RE01B グループ CMSIS Driver Package を使用した Bluetooth® Low

Energy 通信の制御を行うアプリケーション(以降、BLE アプリケーションと記載)のサンプルコードについ て説明します。

対象デバイス

RE01B グループ

関連ドキュメント

Bluetooth Core Specification (https://www.bluetooth.com)

RE01B グループ(1.5M バイトフラッシュメモリ搭載製品) ユーザーズマニュアル ハードウェア編 (R01UH0903) RE01B グループ CMSIS パッケージを用いた開発スタートアップガイド (R01AN5310)

e2 studio ユーザーズマニュアル 入門ガイド (R20UT4204)

RE01B グループ Bluetooth 専用クロック周波数の調整手順 (R01AN5488) Bluetooth Low Energy プロファイル開発者ガイド (R01AN5638)

RE01B グループ Bluetooth Low Energy アプリケーション開発者ガイド (R01AN5643) Bluetooth Low Energy MCU Bluetooth Test Tool Suite 操作説明書 (R01AN4554)

RE01B グループ IAR Embedded Workbench for Arm patch セットアップガイド (R20AN0596)

Bluetooth®のワードマークおよびロゴは、Bluetooth SIG,Inc. が所有する登録商標であり、ルネサス エレ

(2)

目次

1.

概要 ... 4

1.1 BLE モジュール ... 5 1.2 ソフトウェア構成 ... 6 1.3 ディレクトリ/ファイル構成 ... 7

2.

サンプルコード ... 8

2.1 動作環境 ... 8 2.2 起動方法 ... 9 2.3 使用方法 ... 9 2.4 ファームウェア書き込み ... 10 2.5 インポート方法 ... 14 2.5.1 e2 studio の場合 ... 14 2.5.2 EWARM の場合 ... 15 2.6 ビルドおよびデバッグ... 16 2.6.1 e2 studio の場合 ... 16 2.6.2 EWARM の場合 ... 16 2.7 GATT Server サンプルコード ... 17 2.8 GATT Client サンプルコード ... 21 2.9 A/D コンバータ(ADC)+Bluetooth 動作サンプルコード ... 23 2.10 HCI モードサンプルコード ... 25

3.

BLE モジュール詳細 ... 26

3.1 BLE プロトコルスタック ... 26 3.1.1 構成 ... 26 3.1.2 機能概要 ... 29 3.1.3 動作概要 ... 32 3.2 app_lib(アプリケーションライブラリ) ... 34 3.2.1 構成 ... 34 3.2.2 機能概要 ... 34 3.3 コンフィグレーションオプション ... 35 3.4 抽象 API ... 40 3.5 ソフトウェアタイマ ... 40 3.6 プロファイル共通部 ... 43 3.7 ロガー ... 44 3.8 コマンドライン ... 46 3.8.1 標準コマンド ... 47 3.8.2 ユーザコマンド作成手順 ... 67

3.9 LED and Switch 制御機能 ... 68

3.9.1 ボードの変更 ... 68

3.10 MCU 低消費電力機能 ... 69

(3)

4.4 リンカ設定 ... 73

5.

ユーザコードの実装方法 ... 76

5.1 スケルトンプログラムの動作 ... 78 5.2 app_main 関数 ... 79 5.2.1 初期化処理(ble_init 関数)... 80 5.2.2 メインループとスケジューラ(R_BLE_Execute) ... 83 5.3 GAP のイベント(gap_cb 関数) ... 84 5.4 GATTS のイベント(gatts_cb 関数) ... 86 5.5 GATTC のイベント(gattc_cb 関数) ... 87 5.6 VS のイベント(vs_cb 関数) ... 88 5.7 サーバ側プロファイル API のイベント([サービス名]s_cb 関数) ... 89 5.8 クライアント側プロファイル API のイベント([サービス名]c_cb 関数)... 90 5.9 L2CAP のイベント ... 91 5.10 イベント通知機能(R_BLE_SetEvent) ... 92 5.11 RF 通信タイミング通知機能 ... 94

6.

オプション機能 ... 95

6.1 RF 通信タイミング通知機能 ... 95 6.1.1 Connection イベントの通知タイミング ... 96 6.1.2 Advertising イベント通知タイミング ... 97 6.1.3 Scan/Initiator イベント通知タイミング ... 97 6.1.4 RF スリープモードイベント通知タイミング ... 98 6.1.5 RF 通信タイミング通知仕様 ... 99 6.2 デバイス固有データ管理機能 ... 100 6.2.1 デバイス固有データの配置ブロック指定 ... 100 6.2.2 デバイス固有データのフォーマット ... 101 6.2.3 コードフラッシュメモリへの書き込み ... 101 6.2.4 BD アドレスの決定方法 ... 103

7.

HCI モード ... 104

7.1 ソフトウェア構成 ... 104 7.2 プロジェクトの設定 ... 105 7.3 UART-HCI ドライバ ... 105 7.3.1 UART-HCI ドライバの設定 ... 105

8.

ツール... 106

8.1 CLVALTune ... 106

9.

付録 ... 107

9.1 コードサイズ ... 107

改訂記録 ... 108

製品ご使用上の注意事項 ... 109

(4)

1. 概要

本アプリケーションノートは BLE アプリケーションの実装例としてサンプルコードを提供します。BLE アプリケーションは BLE モジュールを使用して作成可能です。サンプルコードについては「2 サンプル コード」、BLE モジュールについては「1.1 BLE モジュール」と「3 BLE モジュール詳細」、BLE アプリ ケーションの作成方法については「4 プロジェクトの作成」以降を参照してください。本アプリケーション ノートに付属するパッケージ(REN_r01an5606xx0xxx-re01b-ble_xxx_yyyymmdd.zip)は表 1.1 のディレクト リとファイルで構成されます。 表 1.1 パッケージ内容 ディレクトリ/ファイル 説明 Documents¥ CMSIS ドライバのドキュメントです。 ROM_Files¥ サンプルコードのバイナリファイルです。

tools¥ CLVALTune¥ HCI モード向けキャリブレーション操作ツールです。

ble_project_server.zip EB-RE01B ボード用の GATT Server のサンプルコードです。

詳細については「2.7 GATT Server」を参照してください。

ble_project_client.zip EB-RE01B ボード用の GATT Client のサンプルコードです。

詳細については「2.8 GATT Client」を参照してください。

ble_project_server_adc.zip EB-RE01B ボード用の ADC 自動読み取り GATT Server のサンプルコードです。詳

細については「2.9 A/D コンバータ(ADC)+Bluetooth 動作」を参照してください。

ble_project_client_adc.zip EB-RE01B ボード用の ADC 自動読み取り GATT Client のサンプルコードです。詳

細については「2.9 A/D コンバータ(ADC)+Bluetooth 動作」を参照してください。

ble_project_uart_hci.zip EB-RE01B ボード用の HCI モードのサンプルコードです。

詳細については「2.10 HCI モード」を参照してください。

r_ble_api_spec.chm API ドキュメント(英文)です。

r01an5606ej0xxx-re01b-ble.pdf

(5)

1.1 BLE モジュール

BLE モジュールはプロジェクトに組み込まれ、ライブラリ形式で API を提供するドライバおよびミドル ウェアです。図 1.1 に赤枠で BLE モジュールの位置付けを示します。

図 1.1 BLE モジュールの位置付け

BLE モジュールは Bluetooth SIG が規定する Bluetooth Core Specification version 5.0 に準拠した以下の機 能を提供します。

Bluetooth 5.0 機能 ⚫ LE 2M PHY ⚫ LE Coded PHY

⚫ LE Advertising Extensions

⚫ LE Channel Selection Algorithm #2

⚫ High Duty Cycle Non-Connectable Advertising Bluetooth 4.2 機能

⚫ LE Secure Connections ⚫ Link Layer privacy

⚫ Link Layer Extended Scanner Filter policies ⚫ LE Data Packet Length Extension

Bluetooth 4.1 機能

⚫ LE L2CAP Connection Oriented Channel Support ⚫ Low Duty Cycle Directed Advertising

⚫ 32-bit UUID Support in LE ⚫ LE Link Layer Topology ⚫ LE Ping

(6)

1.2 ソフトウェア構成

本サンプルコードのソフトウェア構成について図 1.2 に示します。

図 1.2 ソフトウェア構成

BLE プロトコルスタックが提供する R_BLE API 関数をコールすることにより、BLE アプリケーションは BLE 機能の制御が可能となります。

抽象 API とプロファイル共通部は BLE アプリケーションが利用可能な補助機能を提供します。抽象 API を使うことで、よく使う BLE 機能を簡単に使用することができます。

QE for BLE はアプリケーションとプロファイル開発用のスケルトンプログラムを生成します。 ルネサスでは、QE for BLE を使用した、BLE アプリケーション開発を推奨しています。

BLE

アプリケーション

BLE Profile

app_lib

BLE Protocol Stack

BLE (H/W)

Software provided by BLE Module Hardware

Software provided by QE for BLE

BLE

基本スケルトンプログラム

R_BLE API

抽象API Profile API

統合開発環境e  studio

QE for BLE

生成

2 プロファイル 共通部

(7)

1.3 ディレクトリ/ファイル構成

本サンプルコードのディレクトリ/ファイル構成を表 1.2 に示します。 表 1.2 ディレクトリ/ファイル構成 ディレクトリ/ファイル構成 概要 .settings¥ e2 studio の設定保存フォルダ CMSIS¥ CMSIS

config¥ RE01B_1500KB_ble.icf IAR 用リンカ設定ファイル

Device¥ BLE¥ app_lib¥ abs¥ 抽象 API(GAP) board¥ ボード上の LED・SW 制御 cli¥ コマンドライン (ターミナルソフトへの入出力処理) cmd¥ コマンドライン (コマンド実装部分) discovery¥ プロファイル共通部(discovery 機能) logger¥ ロガー profile_cmn¥ プロファイル共通部 sec_data¥ セキュリティデータ管理 timer¥ ソフトウェアタイマ platform¥ 周辺機能用ドライバ rble_lib¥ BLE プロトコルスタックライブラリ (GCC ARM/EWARM) CMSIS_Driver¥ CMSIS ドライバ Config¥ r_ble_cfg.h コンフィグレーションオプションファイル

Driver¥ Include¥ r_ble_api.h

BLE インタフェース定義ファイル すべての API 呼び出しと使用されるインタフェース 定義 qe_gen¥ ble¥ app_main.c BLE アプリケーションメインコード gatt_db.c GATT データベース gatt_db.h GATT データベース r_ble_xxx.c プロファイルコード r_ble_xxx.h プロファイルヘッダ script¥ RE01B_1500KB_ble.ld GCC 用リンカスクリプトファイル settings¥ IAR の設定保存フォルダ src¥ main.c プロジェクトメインコード r_ble_[任意の名前].c その他 BLE アプリケーションコード r_ble_[任意の名前].h その他 BLE アプリケーションヘッダ SVD¥ RE01B_1500KB.svd 周辺機能のレジスタ情報 .cproject .project ble_project_xxx HardwareDebug.launch GCC 用プロジェクトファイル

(8)

2. サンプルコード

2.1 動作環境

本サンプルコードの使用に必要なハードウェア条件を表 2.1 に示します。 表 2.1 ハードウェア条件 ハードウェア 説明 ホスト PC USB インタフェースを搭載した Windows® 10 PC MCU ボード EB-RE01B ボード https://www.tessera.co.jp/eb-re01b.html オンチップデバッギング エミュレータ GCC 環境:下記いずれかのエミュレータ E2 エミュレータ [RTE0T00020KCE00000R] E2 エミュレータ Lite [RTE0T0002LKCE00000R] J-Link IAR 環境:下記いずれかのエミュレータ I-jet® J-Link USB ケーブル MCU ボードとの接続に使用します。 USB A-microB 1 本 本サンプルコードの使用に必要なソフトウェア条件を表 2.2 に示します。 表 2.2 ソフトウェア条件 ソフトウェア バージョン 説明 GCC 環境 統合開発環境 e² studio v21.1.0 以降 ルネサス製デバイス用の統合開発環境 GCC ARM Embedded v6.3.1 以降 C/C++コンパイラ (e² studio のインストーラからダウンロード選択できます)

CMSIS Driver Package v1.0.0 以降 RE マイコンでアプリケーション開発を行うためのソフトウェアパッケージ QE for BLE[RA,RE] v1.2.0 以降 アプリケーションとプロファイル開発用のスケルトンプログラムを生成しま す。 IAR 環境 統合開発環境 IAR Embedded Workbench for ARM (EWARM)

v8.50.5 以降 IAR 製の ARM デバイス用の統合開発環境

【注】v8.50.5 および v9.10.1 環境では RE01B デバイスファイルパッチのセッ トアップが必要です。セットアップ方法は「RE01B グループ IAR Embedded Workbench for Arm patch セットアップガイド (R20AN0596)」を参照してく ださい。

IAR C/C++ Compiler for ARM

v8.50.5 以降 IAR 製の C/C++コンパイラ

CMSIS Driver Package v1.0.0 以降 RE マイコンでアプリケーション開発を行うためのソフトウェアパッケージ QE for BLE[RA,RE] - e2 studio の QE for BLE で生成したコードを IAR のプロジェクトに上書きして

使用してください。

Renesas Flash Programmer v3.06.01 以降 ルネサス製マイコンのフラッシュメモリ書き込みツール

整数型 ISO C99 を使用しています。これらの型は stdint.h で定義されています。

(9)

2.2 起動方法

EB-RE01B ボードは USB コネクタからの電源供給をサポートします。ボードスイッチが表 2.3 のように なっていることを確認し、USB コネクタ CN4 と PC の USB ポート(もしくは電源)を USB ケーブルで接 続してください。 表 2.3 ボードスイッチ設定 ボードスイッチ 設定 JP1 ショート(ON) JP2 ショート(ON) JP3 ショート(ON)

JP4 / JP5 2-3(Regulator Out) / 1-2(USB)

JP7 / JP8 / JP9 1-2(Normal mode) / 1-2(Normal mode) / 1-2(Normal mode)

JP10 / JP11 2-3(UART) / 2-3(UART) JP12 オープン(OFF) JP13 ショート(ON) SW3 1-2(S_Chip) SW4 1-2(Normal) 電源投入後、LED1 が点灯していることを確認してください。点灯しない場合は、ボードスイッチが表 2.3 のようになっていることを確認してください。

2.3 使用方法

サンプルコードのバイナリファイルを書き込んで使用する場合は「2.4 ファームウェア書き込み」を参照 してください。サンプルコードをビルドして使用する場合は「2.5 インポート方法」と「2.6 ビルドおよび デバッグ」を参照してください。

(10)

2.4 ファームウェア書き込み

Renesas Flash Programmer(以下、RFP)を使用してファームウェアを書き込みます。

【注】RFP は v3.06.01 以降のバージョンを使用してください。 1. ボードスイッチを表 2.4 のように変更し、PC と CN4 コネクタとを A-microB USB ケーブルで接続して ください。 表 2.4 RFP を使用するためのボードスイッチ設定 ボードスイッチ 設定 JP1 ショート(ON) JP2 ショート(ON) JP3 ショート(ON)

JP4 / JP5 2-3(Regulator Out) / 1-2(USB)

JP7 / JP8 / JP9 1-2(Normal mode) / 1-2(Normal mode) / 1-2(Normal mode)

JP10 / JP11 1-2(RFP) / 1-2(RFP) JP12 オープン(OFF) JP13 ショート(ON) SW3 1-3(Boot) SW4 1-2(Normal) 2. RFP を起動し、[ファイル]→[新しいプロジェクトを作成]を選択します。 図 2.1 プロジェクト作成

(11)

3. [新しいプロジェクトの作成]ウインドウで、以下の設定を行い、[接続]ボタンをクリックします。 • マイクロコントローラ: RE を選択 • プロジェクト名: 任意のプロジェクト名を入力 • 作成場所:任意のフォルダを選択 • 通信 ツール: “COM port” を選択 図 2.2 プロジェクト設定 4. 接続に成功すると、「操作が成功しました。」と表示されます。 図 2.3 接続成功

(12)

ます。

図 2.4 ファイル選択

6. [操作]タブの[スタート]ボタンをクリックし、ファームウェア書き込みを開始します。

(13)

7. 書き込みが正常に終了すると、「操作が成功しました。」および「正常終了」と表示されます。

図 2.6 書き込み終了

(14)

2.5 インポート方法

サンプルコードを追加する方法を以下に説明します。

e2 studio のインストールに関しては「e2 studio ユーザーズマニュアル 入門ガイド (R20UT4204)」をご

参照ください。

2.5.1 e

2

studio の場合

(1) [ファイル]メニューから[インポート]を選択します。 図 2.7 ファイルメニュー (2) [インポート]ダイアログから[一般]の[既存プロジェクトをワークスペースへ]を選択して [次へ]ボタンをクリックします。 図 2.8 インポートの選択画面

(15)

(3) [インポート]ダイアログで[アーカイブ・ファイルの選択]ラジオボタンを選択し、[参照]ボタンをク リックし、サンプルコードの zip ファイルを選択します。[終了]ボタンをクリックすると、サンプル コードプロジェクトがインポートされます。 図 2.9 インポートするプロジェクトの選択画面

2.5.2 EWARM の場合

[プロジェクト]→[既存プロジェクトの追加]をクリックし、プロジェクトの.ewp ファイルを選択します。

(16)

2.6 ビルドおよびデバッグ

2.6.1 e

2

studio の場合

「e2 studio ユーザーズマニュアル 入門ガイド (R20UT4204)」をご参照ください。

【注】サンプルコードのデバッガは J-Link が設定されています。E2 Lite を使用する場合は下記を設定してください。 [実行]→[デバッグの構成]→[Renesas GDB Hardware Debugging]→[Debugger]→[Debug hardware] : E2 Lite (ARM)

2.6.2 EWARM の場合

EWARM のメニュー[ヘルプ]→[IDE プロジェクト管理およびビルドガイド]、[C-SPY デバッグガイド]をご 参照ください。

【注】サンプルコードのデバッガは J-Link が設定されています。I-jet を使用する場合は下記を設定してください。 [プロジェクト]→[オプション]→[デバッガ]→[設定]→[ドライバ] : I-jet

(17)

2.7 GATT Server サンプルコード

GATT Server サンプルが書き込まれた EB-RE01B ボードは以下のような動作を行います。

【注】リモートデバイスの例としてスマートフォンを使用します。表 2.5 に示す OS が搭載されたスマート フォンとルネサス製スマホアプリ「GATTBrowser」をご用意ください。 表 2.5 対応 OS OS バージョン iOS 9.0 以降 Android 5.0.1 以降 GATTBrowser iOS 版: https://apps.apple.com/app/gattbrowser/id1163057977 Android 版: https://play.google.com/store/apps/details?id=com.renesas.ble.gattbrowser

⚫ GATT Server サンプルは起動後、Advertising を開始します。

⚫ リモートデバイスから Scan を行うと、GATT Server サンプルは”RBLE-DEV”という名前で検出されま す。

(18)

⚫ リモートデバイスから GATT サービス検索を行うと、以下が検出されます(サービスディスカバリ)。 ➢ LED Switch サービス(LSS, UUID : 58831926-5F05-4267-AB01-B4968E8EFCE0)

➢ Switch State キャラクタリスティック(UUID : 58837F57-5F05-4267-AB01-B4968E8EFCE0) ➢ LED Blink Rate キャラクタリスティック(UUID : 5883C32F-5F05-4267-AB01-B4968E8EFCE0)

図 2.11 リモートデバイスのサービス検出画面 GATT Server サンプルは以下の標準サービスとカスタムサービスを提供します。 表 2.6 GATT Server サンプルのサービス サービス プロパティ サイズ (バイト) 説明 GAP サービス 標準サービス GATT サービス 標準サービス LED Switch サービス カスタムサービス

→Switch State キャラクタリスティック Notify 1 Switch 押下で 1 を Notification 送

→Client Characteristic Configuration ディスクリプタ Read / Write 2 Notification 有効/無効

(19)

⚫ gatt_db.c の gs_gatt_service 内の LED Switch サービスの設定にて、2 番目のパラメータを

BLE_GATT_DB_SER_SECURITY_UNAUTH に設定すると、リモートデバイスから LED Switch サー ビスのキャラクタリスティックへアクセスする場合にペアリングが必要となります。0 の場合、ペアリ ングは必要ありません。

図 2.12 LED Switch サービスへのアクセス時のセキュリティ設定

static const st_ble_gatts_db_serv_cfg_t gs_gatt_service[] = { ... /* LED Switch */ { /* Num of Services */ { 1, }, /* Description */ 0,

/* Service Start Handle */ 0x0010,

/* Service End Handle */ 0x0015,

/* Characteristic Start Index */ 6,

/* Characteristic End Index */ 7,

}, };

static const st_ble_gatts_db_serv_cfg_t gs_gatt_service[] = { ... /* LED Switch */ { /* Num of Services */ { 1, }, /* Description */ BLE_GATT_DB_SER_SECURITY_UNAUTH, /* Service Start Handle */ 0x0010,

/* Service End Handle */ 0x0015,

/* Characteristic Start Index */ 6,

/* Characteristic End Index */ 7,

}, };

ペアリング必要

(20)

GATT Server サンプルとリモートデバイスの使用例を図 2.13 に示します。

図 2.13 GATT Server サンプルとリモートデバイスの使用例

⚫ リモートデバイスから Switch State キャラクタリスティックの Notification を有効にした後、ボード上 の SW2 を押すと、Notification を送信します。

⚫ リモートデバイスから LED Blink Rate キャラクタリスティックに値を書き込むと、書き込まれた数値 に応じて LED が点滅します。0 を書き込むと、LED が消灯します。

(21)

2.8 GATT Client サンプルコード

GATT Client サンプルは以下のような動作を行います。 ⚫ 起動後、コマンド入力待ちの状態となります。

⚫ GATT Server の起動を確認する場合、ターミナルソフトより gap scan コマンドを入力し、GATT Server の Advertising を受信します。gap scan コマンドの詳細については「3.8.1.1(2) Scan コマン ド」をご参照ください。GATT Server から Advertising を受信したら、ターミナルソフトより CTRL + C キーを入力し、Scan を停止します。

⚫ GATT Server サンプルとの接続のため、ターミナルソフトから gap conn コマンドを入力します。gap conn コマンドの詳細については「3.8.1.1(3) 接続コマンド」をご参照ください。

⚫ 接続完了後、パケット長更新を行います。

⚫ パケット長更新後、MTU 変更要求をリモートデバイスに送信します。

⚫ リモートデバイスから MTU 変更要求への応答を受信すると、GATT サービス検索を開始します。 ⚫ GATT Server サンプルプロジェクトがペアリングを要求する設定

(BLE_GATT_DB_SER_SECURITY_UNAUTH 図 2.12 参照)になっている場合、LED Switch クライア ントコマンド実行前にペアリングが必要となります。ペアリング開始のため、gap auth コマンドを入 力します。gap auth コマンドの詳細については「3.8.1.1(9) セキュリティコマンド」をご参照くださ い。 ⚫ 上記の処理が完了した後、下記の LED Switch クライアントコマンドが可能となります。 ➢ Notification の有効化/無効化 lsc set_switch_state_ntf [コネクションハンドル] [0(無効) or 1(有効)] ➢ LED blink rate の書き込み

lsc write_led_blink_rate [コネクションハンドル] [blink_rate] [blink_rate] x 100ms の間隔で LED が点滅します。範囲は 0-255 です。 0 を書き込んだ場合、消灯します。

⚫ GATT Server サンプルと切断する場合、ターミナルソフトより gap disconn コマンドを入力します。 gap disconn コマンドの詳細については「3.8.1.1(4) 切断コマンド」をご参照ください。

(22)

GATT Client サンプルと GATT Server サンプルの使用例を図 2.14 に示します。

図 2.14 GATT Client サンプルと GATT Server サンプルの使用例 opt GATT Server Advertising開始 GATT Client GATT Serverのアクション BLE Event GATT Clientのアクション Scan開始 Advertising Packet 接続完了 (BLE_GAP_EVENT_CONN_IND) 接続要求 サービス検索開始 R_BLE_DISC_Start() GATT Serverのデバイスを 検出したら、Scan停止。 サービス検索完了 ペアリング開始 ペアリング完了 (BLE_GAP_EVENT_PAIRING_COMP) Notification 有効化 SW1押下 Notification lscコマンドで Notificationを有効化

LED blink rateライト要求

LED点滅 切断完了 (BLE_GAP_EVENT_DISCONN_IND) 切断要求 Advertising開始 パケット長更新完了 (BLE_GAP_EVENT_DATA_LEN_CHG) MTU変更要求 R_BLE_GATTC_ReqExMtu() MTU変更完了 (BLE_GATTC_EVENT_EX_MTU_RSP) ペアリング開始 [LED Switchサービスへの  アクセスにセキュリティを  設定している場合] ターミナルソフト

gap conn D0:12:34:56:78:9A rnd gap scan   [BDアドレス]   D0:12:34:56:78:9A   [アドレスタイプ]   ランダムアドレス   [コネクションハンドル]   0x0020 CTRL + Cを押下 Scan停止 GATT Serverのデバイスに接続 [GATT Serverの起動を確認する場合] gap auth start  0x0020  lsc set_switch_state_ntf 0x0020 1 lscコマンドで LED blink rateを設定 lsc write_led_blink_rate 0x0020 1 GATT Serverのデバイスとの切断 gap disconn 0x0020 ターミナルソフトへの出力 ターミナルソフトからの入力 receive BLE_GAP_EVENT_DATA_LEN_CHG result : 0x0000, conn_hdl : 0x0020 D0:12:34:56:78:9A rnd ff 0000 disc finished

lsc: Receive Switch State Ntf. receive BLE_GAP_EVENT_ENC_CHG result : 0x0000 receive BLE_GAP_EVENT_PEER_KEY_INFO LTK : 00112233445566778899aabbccddeeff

receive BLE_GAP_EVENT_PAIRING_COMP result : 0x0000 sec : 0x01, mode : 0x02, bond : 0x01, key_size : 0x10

receive BLE_GAP_EVENT_CONN_IND result : 0x0000 gap: connected conn_hdl:0x0020, addr:D0:12:34:56:78:9A rnd

receive BLE_GAP_EVENT_DISCONN_IND result : 0x0000 gap: disconnected conn_hdl:0x0020, addr:D0:12:34:56:78:9A rnd,         reason:0x16

Scan開始

opt

(23)

2.9 A/D コンバータ(ADC)+Bluetooth 動作サンプルコード

GATT Server ADC サンプルと GATT Client ADC サンプルは以下のような動作を行います。

⚫ 起動後、GATT Server ADC サンプルは Advertising を開始します。GATT Client サンプルはコマンド入 力待ちの状態となります。

⚫ gap scan コマンド、gap conn コマンド、gap auth コマンド、gap disconn コマンドの動作は GATT Client サンプルと同じです。

⚫ リモートデバイスから GATT サービス検索を行うと、以下が検出されます(サービスディスカバリ)。 ➢ Auto Read ADC サービス(ARAS, UUID : 0x7777)

➢ ADC Data キャラクタリスティック(UUID : 0x7778) ➢ ADC reserved キャラクタリスティック(UUID : 0x7779)

【注】 本サンプルプロジェクトではデバッグしやすいように 16 ビット UUID を使用していますが、カスタムサー

ビスでは規格上 128 ビット UUID を使用する必要がありますのでご注意ください。

⚫ 上記の処理が完了した後、下記の Auto Read ADC クライアントコマンドが可能となります。 ➢ Notification の有効化/無効化

arac set_adc_data_ntf [コネクションハンドル] [0(無効) or 1(有効)]

⚫ GATT Server ADC サンプルは A/D 変換インターバル(デフォルト:10ms) * 送信カウント(デフォル ト:10 回) = 100ms の間隔で A/D データ Notification を送信します。 ADC サンプルは以下の MCU リソースを使用します。 表 2.7 ADC サンプルが使用する MCU リソース リソース ポート 説明 AGT0 - A/D 変換読み取りトリガのタイマとして使用されます。 S14AD P000 センサデータのキャプチャに使用されます。 DMAC0 - A/D 変換結果の自動読み取りに使用されます。 I/O P704 AMP 制御に使用されます。

GATT Server ADC サンプルは以下の標準サービスとカスタムサービスを提供します。 表 2.8 GATT Server ADC サンプルのサービス

サービス プロパティ サイズ

(バイト)

説明

GAP サービス 標準サービス

GATT サービス 標準サービス

Auto Read ADC サービス カスタムサービス

→ADC Data キャラクタリスティック Notify / Read /

Write

31 A/D データを Notification 送信 /

Read / Write

→Client Characteristic Configuration ディスクリプタ Read / Write 2 Notification / Read / Write 有効/無

(24)

図 2.15 GATT Client ADC サンプルと GATT Server ADC サンプルの使用例 opt

GATT Server ADC

Advertising開始

GATT Client ADC

GATT Serverのアクション BLE Event GATT Clientのアクション Scan開始 Advertising Packet 接続完了 (BLE_GAP_EVENT_CONN_IND) 接続要求 サービス検索開始 R_BLE_DISC_Start() GATT Serverのデバイスを 検出したら、Scan停止。 サービス検索完了 ペアリング開始 ペアリング完了 (BLE_GAP_EVENT_PAIRING_COMP) Notification 有効化 Notification aracコマンドで Notificationを有効化 切断完了 (BLE_GAP_EVENT_DISCONN_IND) 切断要求 Advertising開始 パケット長更新完了 (BLE_GAP_EVENT_DATA_LEN_CHG) MTU変更要求 R_BLE_GATTC_ReqExMtu() MTU変更完了 (BLE_GATTC_EVENT_EX_MTU_RSP) ペアリング開始 [Auto Read ADCサービスへの

 アクセスにセキュリティを  設定している場合]

ターミナルソフト

gap conn D0:12:34:56:78:9A rnd gap scan   [BDアドレス]   D0:12:34:56:78:9A   [アドレスタイプ]   ランダムアドレス   [コネクションハンドル]   0x0020 CTRL + Cを押下 Scan停止 GATT Serverのデバイスに接続 [GATT Serverの起動を確認する場合] gap auth start  0x0020  arac set_adc_data_ntf 0x0020 1 GATT Serverのデバイスとの切断 gap disconn 0x0020 ターミナルソフトへの出力 ターミナルソフトからの入力 receive BLE_GAP_EVENT_DATA_LEN_CHG result : 0x0000, conn_hdl : 0x0020 D0:12:34:56:78:9A rnd ff 0000 disc finished

arac: Receive ADC data Ntf. receive BLE_GAP_EVENT_ENC_CHG result : 0x0000 receive BLE_GAP_EVENT_PEER_KEY_INFO LTK : 00112233445566778899aabbccddeeff

receive BLE_GAP_EVENT_PAIRING_COMP result : 0x0000 sec : 0x01, mode : 0x02, bond : 0x01, key_size : 0x10

receive BLE_GAP_EVENT_CONN_IND result : 0x0000 gap: connected conn_hdl:0x0020, addr:D0:12:34:56:78:9A rnd

receive BLE_GAP_EVENT_DISCONN_IND result : 0x0000 gap: disconnected conn_hdl:0x0020, addr:D0:12:34:56:78:9A rnd,         reason:0x16

Scan開始

opt

receive BLE_GAP_EVENT_SCAN_OFF result : 0x0000

Notification arac: Receive ADC data Ntf. Notification arac: Receive ADC data Ntf.

Notification arac: Receive ADC data Ntf. Notification arac: Receive ADC data Ntf.

(25)

2.10 HCI モードサンプルコード

HCI モードサンプルは起動後、HCI コマンド待ちの状態となります。RF 特性評価用の HCI コマンドを入 力するか、BTTS(Bluetooth Test Tool Suite: R01AN4554)と接続してご使用ください。

(26)

3. BLE モジュール詳細

BLE モジュールは Bluetooth Low Energy の通信機能を提供する BLE プロトコルスタックと、BLE アプリ ケーションが利用可能な補助機能を提供する app_lib(アプリケーションライブラリ)を含みます。

3.1 BLE プロトコルスタック

3.1.1 構成

BLE プロトコルスタックの構成について図 3.1 に示します。

図 3.1 BLE プロトコルスタックの構成

BLE プロトコルスタック は R_BLE API, Host Stack, Link Layer, Scheduler から構成されます。

BLE Protocol Stack

Host Stack

R_BLE API

L2CAP

Link Layer

GAP L2CAP

Vendor Specific MCU Low Power Consumption

Common HCI ATT SMP HCI Scheduler Vendor Specific GAP GATT GATT Client GATT Server  GATT Common BLE (H/W) BLE Application Layer

(27)

⚫ R_BLE API

R_BLE API は BLE アプリケーションに BLE 機能を提供するために表 3.1 の API を提供します。各 API の詳細な仕様については API ドキュメント(r_ble_api_spec.chm)をご参照ください。

表 3.1 R_BLE API 概要

R_BLE API プロトコル/

プロファイル 説明

Common API -

BLE の起動/終了処理や Scheduler を制御する API です。 主な機能

• MCU に搭載されている BLE の開始/終了処理

• BLE プロトコルスタック内の task の処理

• Scheduler へのイベントの登録

GAP API GAP

SMP GAP, SMP に規定されている手続きをサポートする API です。 主な機能 • GAP Advertising, Scan, 接続, セキュリティ • SMP ペアリング

GATT Server API ATT

GATT

サービスに関連した Attribute とデータのセット(GATT Database)を公開する GATT Server 用の API です。

主な機能

• GATT Database へのアクセス

• Notification/Indication

GATT Client API ATT

GATT

GATT Server へ要求を発行する GATT Client 用の API です。 主な機能

• Service/Characteristic の Discovery

• Characteristic の Read/Write

GATT Common API ATT

GATT

GATT Server/Client 共通で使用する機能についての API です。

L2CAP API L2CAP

クレジットベースのフロー制御を行うチャネル上のデータ転送用の API で す。

Vendor Specific API -

ルネサス独自の拡張機能を提供する API です。 主な機能

• 拡張版 Direct Test Mode

• BD アドレスの設定/取得

MCU Low Power

Consumption API -

MCU の消費電力低減のための API です。

BLE プロトコルスタックのタイプにより、サポートする API が異なります。各ライブラリがサポートす る API については表 3.3 をご参照ください。

(28)

⚫ Host Stack

Host Stack は Bluetooth SIG が規定したプロトコルおよびプロファイルの機能を提供します。各プロト コル、プロファイルで規定された手続に応じて、R_BLE API より受信したデータを Link Layer に送信 し、Link Layer より受信したデータを R_BLE API のイベント、またはデータとして通知します。 ⚫ Link Layer

Link Layer は MCU に搭載された BLE ハードウェアを制御し、Advertising, Scan, 接続、データ通信な どの BLE 機能を HCI(Host Controller Interface)経由で、Host Stack に提供します。BLE のコマンド、 送信データは Host Stack から Link Layer に送信されます。BLE コマンドの結果やリモートデバイスか らの受信データは Link Layer から Host Stack に送信されます。

⚫ Scheduler

Scheduler は Common API の R_BLE_Execute()により、BLE プロトコルスタックの各レイヤのタスク 宛に送信されたメッセージキューに従ってタスクを処理します。図 3.2 に BLE プロトコルスタックの 基本シーケンスチャートを示します。

図 3.2 BLE プロトコルスタックの基本シーケンスチャート

R_BLE API Scheduler Host Stack Link Layer(LL) BLE H/W Application

Call R_BLE API

return R_BLE API

Send Message to Host Stack  Call R_BLE_Execute() return R_BLE_Execute() Execute Task return Send Message to LL Execute Task return Access BLE H/W Send Message to Host Stack

BLE Interrupt Execute Task

return return callback R_BLE event callback

return Send Message to LL Call R_BLE_Execute() return R_BLE_Execute() Execute Task return Access BLE H/W Send Message to Host Stack

Execute Task

return callback

return R_BLE event callback

return Function Call Send Message return BLE Interrupt Access BLE H/W Software Hardware Source Code Library

(29)

3.1.2 機能概要

BLE プロトコルスタックが提供する機能は「3.3 コンフィグレーションオプション」の BLE_CFG_LIB_TYPE の設定値により変わります。表 3.2 に BLE プロトコルスタックの各タイプがサポー トする機能を示します。 表 3.2 BLE プロトコルスタックの各タイプがサポートする機能 BLE Feature BLE プロトコルスタックのタイプ

All features Balance Compact

LE 2M PHY Yes Yes No

LE Coded PHY Yes Yes No

LE Advertising Extensions Yes No No

LE Channel Selection Algorithm #2 Yes Yes No

High Duty Cycle Non-Connectable

Advertising Yes Yes Yes

LE Secure Connections Yes Yes Yes

Link Layer privacy Yes Yes Yes

Link Layer Extended Scanner Filter

policies Yes Yes No

LE Data Packet Length Extension Yes Yes Yes

LE L2CAP Connection Oriented Channel

Support Yes No No

Low Duty Cycle Directed Advertising Yes Yes Yes

LE Link Layer Topology Yes Yes No

LE Ping Yes Yes Yes

GAP Role Central Peripheral Observer Broadcaster Central Peripheral Observer Broadcaster Peripheral Broadcaster

GATT Role Sever

Client

Sever Client

Sever Client

(30)

⚫ LE 2M PHY

2Msym/s PHY での BLE 通信をサポートします。 ⚫ LE Coded PHY

Coded PHY での BLE 通信をサポートします。

1M PHY, 2M PHY より長い距離での通信が可能となります。 ⚫ LE Advertising Extensions Advertising の拡張機能です。本機能の特徴は以下の通りです。 ➢ 4 つまでの独立した Advertising の同時実行が可能。 (コンフィグレーションオプションの BLE_CFG_RF_ADV_SET_MAX で同時実行する Advertising の数を設定します。)

➢ Advertising Data/Scan Response Data のサイズを最大 1650 バイトまで拡張。

(コンフィグレーションオプションの BLE_CFG_RF_ADV_DATA_MAX で最大サイズ(バイト)を設 定します。)

➢ Periodic Advertising が可能。 ⚫ LE Channel Selection Algorithm #2

Version 5.0 で追加されたホッピングチャネルを選択するアルゴリズムにより、チャネルを選択する機 能です。

⚫ High Duty Cycle Non-Connectable Advertising

最小のインターバルが 20 msec までの non-connectable の Advertising をサポートする機能です。 ⚫ LE Secure Connections

Elliptic curve Diffie-Hellman 鍵共有方式(ECDH)により、passive eavesdropping に対応したペアリング をサポートします。

⚫ Link Layer privacy

定期的に Bluetooth デバイスアドレスを変更することにより、他の BLE デバイスからの追跡を回避す る機能です。

⚫ LE Data Packet Length Extension

BLE データ通信のパケットサイズを拡張する機能です。 251 バイトまで拡張することが可能です。

(コンフィグレーションオプションのBLE_CFG_RF_CONN_DATA_MAXで最大サイズ(バイト)を設定しま

す。)

⚫ LE L2CAP Connection Oriented Channel Support

L2CAP の credit based flow control チャネルを使った通信をサポートする機能です。 ⚫ Low Duty Cycle Directed Advertising

既知のデバイスとの再接続用に Low Duty Cycle の advertising をサポートする機能です。 ⚫ LE Link Layer Topology

Master, Slave の両方のロールをサポートし、あるリモートデバイスとの接続では Master として、別 のリモートデバイスとの接続では Slave として動作できる機能です。

(31)

⚫ LE Ping 接続の暗号化後、MIC を含むパケットの送信要求により、接続が維持されているかどうかをチェック する機能です。 ⚫ GAP Role GAP Role として、以下をサポートします。 ➢ Central : 接続要求を Peripheral デバイスに送信するデバイスです。 ➢ Peripheral : Central からの接続要求を受け入れ、接続を確立するデバイスです。 ➢ Observer : Advertising をスキャンするデバイスです。 ➢ Broadcaster : Advertising を送信するデバイスです。 ⚫ GATT Role GATT Role として、以下をサポートします。

➢ Server : GATT Database にサービスが提供する Characteristic を用意し、Client からの要求に応答 するデバイスです。

➢ Client : Server が提供するサービスに対して、要求を発行するデバイスです。 ⚫ 32-bit UUID Support in LE

32-bit の UUID をサポートします。GATT で使用する場合は、128-bit に拡張して使用します。

BLE プロトコルスタックの各タイプの R_BLE API サポートを表 3.3 に示します。

表 3.3 各 BLE プロトコルスタックの R_BLE API サポート

R_BLE API

BLE プロトコルスタックのタイプ

All features Balance Compact

Common API Yes Yes Yes

GAP API Yes C.1 C.1

GATT Common API Yes Yes Yes

GATT Server API Yes Yes Yes

GATT Client API Yes Yes Yes

L2CAP API Yes No No

Vendor Specific API Yes Yes Yes

MCU Low Power Consumption API Yes Yes Yes

C.1 : BLE プロトコルスタックのタイプによって、各 GAP API のサポートは異なります。 詳細については「API ドキュメント(r_ble_api_spec.chm)」をご参照ください。

(32)

3.1.3 動作概要

BLE プロトコルスタックは BLE 周辺機能を制御し、RF イベントの実行を管理します。RF イベントと は、Bluetooth LE で規定される以下 4 つの動作状態におけるインターバルごとの 1 回の通信動作を指しま す。 ⚫ Advertising ⚫ Scanning ⚫ Initiating ⚫ Connection

BLE プロトコルスタックは Bluetooth LE 動作の制御インタフェースを R_BLE API として提供します。 BLE 周辺機能は RF イベントに応じて割り込み(BLEIRQ)を MCU へ発行します。BLEIRQ 発生時は R_BLE_Execute をコールし、RF イベントの状況に応じたタスク処理を行う必要があります。また、各種 R_BLE API をコールした場合も R_BLE_Execute をコールして BLE プロトコルスタックの API タスク処理 を行う必要があります。 「3.3 コンフィグレーションオプション」の BLE_CFG_RF_DEEP_SLEEP_EN が 1 に設定されている場 合、BLE プロトコルスタックが実行するタスクがなく、かつ次の RF イベント時間開始までに 40msec 以上 の時間がある場合には消費電流を抑えるために R_BLE_Execute 内で RF 部をスリープモードに遷移させま す。この時間は RF イベントのインターバル時間ではなく、RF イベント完了から次の RF イベント開始ま での RF アイドル時間を指します。そのため、RF 部をスリープモードに遷移させるためには各レイヤの処 理時間を考慮し RF イベントのインターバルを 60ms 以上に設定する必要があります。Scanning では、ス キャンインターバルとスキャンウインドウとの時間差も 60ms 以上に設定する必要があります。 RF 部をスリープモードに遷移させるために、BLE プロトコルスタックは RF スリープ処理と RF ウェイ クアップ処理を行います。図 3.3 に RF スリープを伴う場合の MCU/RF 動作概要を示します。 図 3.3 RF スリープを伴う場合の MCU/RF 動作概要 R_BLE_Execute RF Wakeup Processing R_BLE_Execute Event callback, RF Sleep Processing RF W ak eu p RF Event (Tx/Rx) RF IDLE RF IDLE MCU RF RF event interval RF idle time RF sleep time RF W ak eu p RF Event (Tx/Rx) RF IDLE RF IDLE RF SLEEP RF SLEEP RF SLEEP MCU IDLE MCU IDLE MCU IDLE R_BLE_Execute RF Wakeup Processing R_BLE_Execute Event callback, RF Sleep Processing MCU IDLE MCU IDLE BLEIRQ (RF Wakeup) BLEIRQ (RF event) BLEIRQ (RF Wakeup) BLEIRQ (RF event) MCU IDLE R_BLE_Execute アプリケーション処理可能な区間 R_BLE_Execute による必須処理区間

(33)

MCU アイドル中は、MCU を低消費電力モードに遷移させることや、アプリケーション処理を実行するこ とが可能です。ただし、R_BLE_Execute による RF ウェイクアップ処理が RF イベント開始前までに行わ れない場合、RF イベントを実行することができません。そのため、アプリケーション処理は R_BLE_Execute コールを妨げないように実装する必要があります。 「3.3 コンフィグレーションオプション」の BLE_CFG_RF_DEEP_SLEEP_EN が 0 に設定されている場 合、または BLE_CFG_RF_DEEP_SLEEP_EN が 1 に設定されていても RF スリープ遷移の条件を満たして いない場合、BLE プロトコルスタックは RF 部をスリープモードに遷移させません。この場合、RF アイド ル時間中の消費電流は増加しますが、RF スリープ処理および RF ウェイクアップ処理を行わないためアプ リケーションで使用可能な MCU アイドル時間が増加します。図 3.4 に RF スリープを伴わない場合の MCU/RF 動作概要を示します。 図 3.4 RF スリープを伴わない場合の MCU/RF 動作概要 RF スリープの状態に関わらず、アプリケーション処理が継続的に MCU を占有してしまい R_BLE_Execute がコールされない場合、コネクション維持が行えない場合があります。そのため、アプリ ケーション処理は短時間であることが推奨されます。長時間となる処理は「5.10 イベント通知機能 (R_BLE_SetEvent)」を参照して処理内容を複数回に分割して実行してください。 R_BLE_Execute Event callback RF Event (Tx/Rx) RF IDLE RF IDLE MCU RF RF event interval RF idle time RF Event (Tx/Rx) RF IDLE MCU IDLE MCU IDLE R_BLE_Execute Event callback MCU IDLE BLEIRQ (RF event) BLEIRQ (RF event) MCU IDLE R_BLE_Execute アプリケーション処理可能な区間 R_BLE_Execute による必須処理区間

(34)

3.2 app_lib(アプリケーションライブラリ)

3.2.1 構成

app_lib の構成について図 3.5 に示します。 図 3.5 app_lib の構成

3.2.2 機能概要

app_lib が提供する機能については下記の節をご参照ください。 ⚫ 3.4 抽象 API ⚫ 3.5 ソフトウェアタイマ ⚫ 3.6 プロファイル共通部 ⚫ 3.7 ロガー ⚫ 3.8 コマンドライン

⚫ 3.9 LED and Switch 制御機能

app_lib

抽象

API

(Abstraction API)

ソフトウェアタイマ

(Software Timer)

プロファイル共通部

(profile_cmn)

ロガー

(Logger)

コマンドライン

(Command Line Interface)

LED and Switch制御 (LED and Switch Control)

(35)

3.3 コンフィグレーションオプション

BLE モジュールのコンフィグレーションオプションの設定は r_ble_cfg.h で設定できます。オプション名 および設定値に関する説明を以下に示します。 表 3.4 コンフィグレーションオプション コンフィグレーションオプション(r_ble_cfg.h) BLE_CFG_LIB_TYPE ※デフォルト値は"1" BLE プロトコルスタックのタイプを設定します。 0: All features 1: Balance 2: Compact "0"~"2"の範囲で設定してください。 各タイプがサポートする BLE の機能については表 3.2をご 参照ください。 BLE_CFG_RF_DBG_PUB_ADDR ※デフォルト値は "{0xFF,0xFF,0xFF,0x50,0x90,0x74}" パブリックアドレスの初期値を設定します。このパブリック アドレスはコードフラッシュメモリのパブリックアドレスの 領域が ALL 0x00 or 0xFF の場合に採用されます。ただし、 設定した値が ALL 0x00 or 0xFF の場合、74:90:50:FF:FF:FF がパブリックアドレスとして採用されます。 詳細については「6.2 デバイス固有データ管理機能」を ご参照ください。 BLE_CFG_RF_DBG_RAND_ADDR ※デフォルト値は "{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF} " スタティックアドレスの初期値を設定します。このオプショ ンのスタティックアドレスはコードフラッシュメモリのラン ダムアドレスの領域が ALL 0x00 or 0xFF の場合に採用され ます。 ただし、設定した値が ALL 0x00 or 0xFF の場合、MCU 固有 のスタティックアドレスが採用されます。 詳細については「6.2 デバイス固有データ管理機能」を ご参照ください。 BLE_CFG_RF_CONN_MAX ※デフォルト値は"2" 同時最大接続数を設定します。 "1"~"7"の範囲で設定してください。 BLE_CFG_RF_CONN_DATA_MAX ※デフォルト値は"251" 最大パケットデータサイズ(バイト)を設定します。 "27"~"251"の範囲で設定してください。 BLE_CFG_RF_ADV_DATA_MAX ※デフォルト値は"252" 最大 Advertising データサイズ(バイト)を設定します。 "31"~"1650"の範囲で設定してください。

BLE プロトコルスタックのタイプが"0: All features"以外の場 合は"31"固定となります。

BLE_CFG_RF_ADV_SET_MAX ※デフォルト値は"1"

最大 Advertising セット数を設定します。 "1"~"4"の範囲で設定してください。

BLE プロトコルスタックのタイプが"0: All features"以外の場 合は"1"固定となります。

BLE_CFG_RF_SYNC_SET_MAX ※デフォルト値は"1"

最大 Periodic Sync セット数を設定します。 "1"~"2"の範囲で設定してください。

BLE プロトコルスタックのタイプが"0: All features"以外の場 合はこの値は使用しません。

BLE_CFG_EVENT_NOTIFY_CONN_START ※デフォルト値は"0"

接続イベントの開始割り込み発生通知機能の有効/無効を設 定します。

(36)

BLE_CFG_EVENT_NOTIFY_CONN_CLOSE ※デフォルト値は"0" 接続イベントの完了割り込み発生通知機能の有効/無効を設 定します。 0: Disable 1: Enable 各動作の停止コマンドを実行した場合、完了イベントは通知 されません。 BLE_CFG_EVENT_NOTIFY_ADV_START ※デフォルト値は"0" Advertising イベントの開始割り込み発生時通知機能の有効/ 無効を設定します。 0: Disable 1: Enable 下記のタイミングで通知します。 ➢ Primary Adv Ch の開始

➢ Secondary Adv Ch(AdvExt)の開始

➢ Periodic Adv の開始 ※対応する AdvExt が Enable であること が前提 開始通知は割り込みを契機としていることから、実際の RF イベントの事後通知となります。 BLE_CFG_EVENT_NOTIFY_ADV_CLOSE ※デフォルト値は"0" Advertising イベントの完了割り込み発生時通知機能の有効/ 無効を設定します。 0: Disable 1: Enable 下記のタイミングで通知します。 ➢ Primary Adv Ch の完了

➢ Secondary Adv Ch(AdvExt)の完了

➢ Periodic Adv の完了 ※対応する AdvExt が Enable であること が前提 各動作の停止コマンドを実行した場合、完了イベントは通知 されません。 BLE_CFG_EVENT_NOTIFY_SCAN_START ※デフォルト値は"0" Scan イベントの開始割り込み発生通知機能の有効/無効を設 定します。 0: Disable 1: Enable Interval=Window の場合、通知されません。 開始通知は割り込みを契機としていることから、実際の RF イベントの事後通知となります。 BLE_CFG_EVENT_NOTIFY_SCAN_CLOSE ※デフォルト値は"0" Scan イベントの完了割り込み発生通知機能の有効/無効を設 定します。 0: Disable 1: Enable Interval=Window の場合、通知されません。 各動作の停止コマンドを実行した場合、完了イベントは通知

(37)

コンフィグレーションオプション(r_ble_cfg.h) BLE_CFG_EVENT_NOTIFY_INIT_START ※デフォルト値は"0" Initiator イベントの Scan 開始割り込み発生通知機能の有効 /無効を設定します。 0: Disable 1: Enable Interval=Window の場合、通知されません。 開始通知は割り込みを契機としていることから、実際の RF イベントの事後通知となります。 BLE_CFG_EVENT_NOTIFY_INIT_CLOSE ※デフォルト値は"0" Initiator イベントの Scan 完了割り込み発生通知機能の有効 /無効を設定します。 0: Disable 1: Enable Interval=Window の場合、通知されません。 各動作の停止コマンドを実行した場合、完了イベントは通知 されません。 BLE_CFG_EVENT_NOTIFY_DS_START ※デフォルト値は"0" RF_DEEP_SLEEP start 通知機能の有効/無効を設定しま す。 0: Disable 1: Enable BLE_CFG_EVENT_NOTIFY_DS_WAKEUP ※デフォルト値は"0" RF_DEEP_SLEEP wakeup 通知機能の有効/無効を設定し ます。 0: Disable 1: Enable BLE_CFG_RF_CLVAL ※デフォルト値は"7" 32MHz 水晶振動子の調整値をボード環境に応じて設定しま す。 "0"~"15"の範囲で設定してください。 関連ドキュメント「Bluetooth 専用クロック周波数の調整手 順 (R01AN5488)」を参照してください。 BLE_CFG_RF_DDC_EN ※デフォルト値は"1" RF 部の DC-DC の有効/無効を設定します。 0: Disable 1: Enable BLE_CFG_RF_SCA ※デフォルト値は"250"

RF slow clock 用の Sleep Clock Accuracy(SCA)を設定しま す。 "250"~"500" ppm の範囲で設定してください。 BLE_CFG_RF_MAX_TX_POW ※デフォルト値は"0" 最大送信パワーを設定します。 "0"~"1"の範囲で設定してください。 0: max +0dBm 1: max +4dBm

(38)

BLE_CFG_RF_DEF_TX_POW ※デフォルト値は"0" デフォルトの送信パワーを設定します。 "0"~"2"の範囲で設定してください。 デフォルト送信パワーは BLE_CFG_RF_MAX_TX_POW の 設定に依存します。 BLE_CFG_RF_MAX_TX_POW が 0(0dBm)の場合、 本設定は以下のようになります。 0(High) : 0dBm 1(Mid) : 0dBm 2(Low) : -18dBm BLE_CFG_RF_MAX_TX_POW が 1(+4dBm)の場合、 本設定は以下のようになります。 0(High) : +4dBm 1(Mid) : 0dBm 2(Low) : -20dBm BLE_CFG_RF_DEEP_SLEEP_EN ※デフォルト値は"1" RF Deep Sleep 機能の有効/無効を設定します。 0: Disable 1: Enable BLE_CFG_DEV_DATA_CF_BLOCK ※デフォルト値は"383"

デバイス固有データを格納する Code Flash(ROM)の Block を設定します。 "-1"~"383"の範囲で設定してください。 "-1"が設定された場合、Code Flash のデバイス固有データを 使用しません。 "0"から"15"はスタートアップ領域選択機能の Block となって いますので、スタートアップ領域選択機能を使用する場合 は、”0”から”15”を指定しないでください。 詳細については「6.2 デバイス固有データ管理機能」を ご参照ください。 BLE_CFG_DEV_DATA_DF_BLOCK ※デフォルト値は"-1" RE01B では非対応です。 BLE_CFG_GATT_MTU_SIZE ※デフォルト値は"247" GATT 通信で使用する MTU サイズ(バイト)を設定します。 "23"~"247"の範囲で設定してください。 BLE_CFG_NUM_BOND ※デフォルト値は"7" RE01B では非対応です。 BLE_CFG_EN_SEC_DATA ※デフォルト値は"0" RE01B では非対応です。 BLE_CFG_SECD_DATA_DF_BLOCK ※デフォルト値は"0" RE01B では非対応です。 BLE_CFG_CMD_LINE_EN ※デフォルト値は"1" コマンドライン機能の有効/無効を設定します。 0: D isable 1: Enable BLE_CFG_BOARD_LED_SW_EN ※デフォルト値は"1” ボードの LED と SW の制御コードの有効/無効を設定しま す。 0: Disable 1: Enable

(39)

コンフィグレーションオプション(r_ble_cfg.h) BLE_CFG_LOG_LEVEL ※デフォルト値は"3" ログレベルを設定します。 "0"~"3"の範囲で設定してください。 0 : disable 1 : Error

2 : Error & Warning

3 : Error & Warning & Debug BLE_CFG_ABS_API_EN ※デフォルト値は"1" 抽象 API の有効/無効を設定します。 0: Disable 1: Enable BLE_CFG_SOFT_TIMER_EN ※デフォルト値は"1" RE01B では”1”から変更することはできません。 BLE_CFG_MCU_LPC_EN ※デフォルト値は"1" MCU の低消費電力機能の有効/無効を設定します。 0: Disable 1: Enable BLE_CFG_HCI_MODE_EN ※デフォルト値は"0" HCI モードでの起動を設定します。 0: 通常起動 1: HCI モードでの起動 BLE_CFG_SOFT_TIMER_AGT_CH ※デフォルト値は"1" ソフトウェアタイマによって使用される AGT チャネルを設 定します。 0: AGT0 1: AGT1 BLE_CFG_AUTO_READ_ADC_EN ※デフォルト値は"0" AD コンバータ(ADC)の自動読み取りの有効/無効を設定し ます。 0: Disable 1: Enable BLE_CFG_MCU_PSM_OPE ※デフォルト値は"1" オペレーティングモード(OPE)中の MCU パワーサプライ モードを設定します。 0: ALLPWON 1: EXFPWON (※1) ※1:EXFPWON を選択した場合、一部を除くプログラム コードは RAM 上に配置する必要があります。 BLE_CFG_MCU_VBB_SSTBY ※デフォルト値は"1" ソフトウェアスタンバイモード(SSTBY)中の MCU パワー制 御モードのバックバイアスボルテージ(VBB)制御の有効/無 効を設定します。

(40)

3.4 抽象 API

抽象 API は BLE プロトコルスタックでよく使う機能をより簡単に使うための API です。抽象 API の詳細 な仕様については「API ドキュメント(r_ble_api_spec.chm)」をご参照ください。

3.5 ソフトウェアタイマ

ソフトウェアタイマは MCU の非同期汎用タイマ(AGT)を使用します。使用する AGT のチャネルは BLE_CFG_SOFT_TIMER_AGT_CH により設定されます。この機能を使用する場合、

BLE_CFG_SOFT_TIMER_EN を”1”に設定してください。 ソフトウェアタイマの特徴を以下に示します。

⚫ 非同期汎用タイマ(AGT)の AGT0 または AGT1 の 1 チャネルを使用します。(デフォルト AGT1) AGT のカウントソースは AGTLCLK (MCU の低速オンチップオシレータ(LOCO))を使用するため、 MCU のソフトウェアスタンバイでもタイマ動作が可能となります。 ⚫ ソフトウェアタイマのタイムアウト時間はミリ秒で指定します。ソフトウェアタイマを起動し、タイ ムアウト時間が経過すると、コールバック関数で通知されます。 ⚫ ソフトウェアタイマは 2 つの動作モードを持ちます。 ➢ 周期通知モード(BLE_TIMER_PERIODIC):ソフトウェアタイマのチャネルを起動すると、タイム アウト時間の経過を周期的に通知します。 ➢ 単発通知モード(BLE_TIMER_ONE_SHOT):ソフトウェアタイマのチャネルを起動すると、タイ ムアウト時間の経過を 1 回だけ通知します。 ⚫ ソフトウェアタイマは複数のチャネルを持ちます。 各チャネルには独立してタイムアウト時間、動作モード、コールバック関数を登録できます。 ⚫ ソフトウェアタイマのチャネル数は BLE_TIMER_NUM_OF_SLOT マクロ(デフォルト 10)で定義され ており、変更できます。なお 1 チャネルにつき、RAM 上に 24byte の管理領域を必要とします。 ソフトウェアタイマ利用時の注意点を以下に示します。 ⚫ 長いタイムアウト時間を指定した場合、または複数のチャネルを使用した場合、AGT の停止と再起動 を繰り返すため、タイムアウトが指定したタイムアウト時間より遅延します。

⚫ 抽象 API および BLE プロトコルスタックは本ソフトウェアタイマを使用します。抽象 API を使用する 場合は、抽象 API の初期化関数である R_BLE_ABS_Init()の実行前に、ソフトウェアタイマの初期化関 数である R_BLE_TIMER_Init()を実行してください。

⚫ BLE プロトコルスタックでも本ソフトウェアタイマを使用するため、本機能を無効にすることはでき ません。

(41)

ソフトウェアタイマは以下の API を提供します。API 仕様の詳細は、API ドキュメント (r_ble_api_spec.chm)を参照してください。 表 3.5 ソフトウェアタイマの API ソフトウェアタイマ API 概要 R_BLE_TIMER_Init ソフトウェアタイマを初期化 R_BLE_TIMER_Terminate ソフトウェアタイマを終了 R_BLE_TIMER_Create ソフトウェアタイマのチャネルを確保し、動作パラメータを登録 R_BLE_TIMER_Delete ソフトウェアタイマのチャネルを解放 R_BLE_TIMER_Start ソフトウェアタイマのチャネルを起動 R_BLE_TIMER_Stop ソフトウェアタイマのチャネルを停止 R_BLE_TIMER_UpdateTimeout ソフトウェアタイマのチャネルのタイムアウト時間を更新して起動 R_BLE_TIMER_GetRemainingTime ソフトウェアタイマのチャネルの残時間を取得 ソフトウェアタイマの状態遷移を図 3.6 に示します。 R_BLE_TIMER_Init R_BLE_TIMER_Create R_BLE_TIMER_Delete R_BLE_TIMER_Start / R_BLE_TIMER_UpdateTimeout チャネル確保状態 (チャネル停止状態) R_BLE_TIMER_Stop R_BLE_TIMER_UpdateTimeout R_BLE_TIMER_PERIODIC タイムアウト時間経過 R_BLE_TIMER_ONE_SHOT チャネル起動状態 R_BLE_TIMER_Terminate 初期化状態 未初期化状態 タイムアウト状態 コールバック通知 図 3.6 ソフトウェアタイマの状態遷移 ⚫ R_BLE_TIMER_UpdateTimeout()はタイムアウト状態からも実行できます。 ⚫ R_BLE_TIMER_Delete()はチャネル起動状態またはタイムアウト状態からも実行できます。 ソフトウェアタイマの利用例を以下に示します。 ⚫ ソフトウェアタイマのヘッダファイルをインクルードし、R_BLE_TIMER_Init()でソフトウェアタイマ を初期化します。 /* ソフトウェアタイマ ヘッダファイルのインクルード */ #include "timer/r_ble_timer.h" { /* ソフトウェアタイマの初期化 */ R_BLE_TIMER_Init(); }

(42)

⚫ R_BLE_TIMER_Create()で以下の動作パラメータを指定し、ソフトウェアタイマのチャネルを生成し ます。また R_BLE_TIMER_Create()はチャネルを識別するためのチャネルハンドルを返します。 ➢ タイムアウト時間(ms) ➢ タイムアウト通知コールバック関数 ➢ 動作モード:BLE_TIMER_PERIODIC または BLE_TIMER_ONE_SHOT 【注】 生成可能なチャネル数(BLE_TIMER_NUM_OF_SLOT)を超えた場合、R_BLE_TIMER_Create()は BLE_ERR_LIMIT_EXCEEDED エラーを返します。

static void timer_cb(uint32_t timer_hdl)

{ } {

/* ソフトウェアタイマのチャネル確保 */

ble_status_t status;

status = R_BLE_TIMER_Create(&gs_timer_hdl, 1000, BLE_TIMER_PERIODIC, timer_cb);

/* ソフトウェアタイマのチャネル起動 */ R_BLE_TIMER_Start(gs_timer_hdl); } ⚫ R_BLE_TIMER_Start()または R_BLE_TIMER_UpdateTimeout()でソフトウェアタイマのチャネルを起 動します。タイムアウト時間が経過すると、R_BLE_TIMER_Create()で登録したコールバック関数で 通知されます。 ⚫ チャネル動作は R_BLE_TIMER_Stop()で停止できます。 ⚫ 確保したチャネルは何度でも再利用できます。 /* ソフトウェアタイマ チャネルハンドル */

static uint32_t gs_timer_hdl;

{ /* ソフトウェアタイマのチャネル起動 */ R_BLE_TIMER_Start(gs_timer_hdl); /* ソフトウェアタイマのチャネルタイムアウト更新と起動 */ R_BLE_TIMER_UpdateTimeout(gs_timer_hdl, 500); /* ソフトウェアタイマのチャネル停止 */ R_BLE_TIMER_Stop(gs_timer_hdl); }

(43)

⚫ 生成したチャネルが不要となった場合、R_BLE_TIMER_Delete()で解放します。 { /* ソフトウェアタイマのチャネル解放 */ R_BLE_TIMER_Delete(&gs_timer_hdl); } ⚫ ソフトウェアタイマが不要となった場合、R_BLE_TIMER_Terminate()で終了します。 【注】 R_BLE_TIMER_Terminate()は必ず全チャネルを解放後に実行してください。 { /* ソフトウェアタイマの終了 */ R_BLE_TIMER_Terminate(); }

3.6 プロファイル共通部

プロファイル共通部は BLE Profile で共通する処理です。QE for BLE が生成したプロファイルのソース コードからコールされます。プロファイル共通部、および、プロファイル開発の詳細については、 「Bluetooth Low Energy プロファイル開発者ガイド(R01AN5638)」をご参照ください。

(44)

3.7 ロガー

ロガー機能は以下のログ出力機能を提供します。 ⚫ 3 段階のログレベル(ERROR, WARNING, DEBUG) ⚫ ログ出力は printf と同様のフォーマットで記述 ⚫ BD アドレスおよび UUID を文字列に変換する関数の提供 ログメッセージはコマンドライン機能のコンソールに出力されます。そのため、ロガー機能を使用する場 合は BLE_CFG_CMD_LINE_EN を 1 に設定する必要があります。 ログレベルの設定は、プロジェクト全体のログレベルを指定する、BLE_CFG_LOG_LEVEL コンフィグ レーションオプションにより行います。BLE_CFG_LOG_LEVEL の設定値とログ出力の設定は表 3.6 の通り です。 表 3.6 BLE_CFG_LOG_LEVEL の設定 BLE_CFG_LOG_LEVEL 設定値 説明 0 ログ出力なし 1 ERROR ログ出力

2 ERROR & WARNING ログ出力

3 ERROR & WARNING & DEBUG ログ出力

ログの内容は r_ble_logger.h で定義されている、表 3.7 のログ出力用マクロを使用します。

表 3.7 ログ出力用マクロ

ログ出力マクロ LOG_LABEL 説明

BLE_LOG_ERR ERR ERROR ログ出力用

BLE_LOG_WRN WRN WARNING ログ出力用

BLE_LOG_DBG DBG DEBUG ログ出力用

ログ出力用マクロにより、printf と同じフォーマットで下記のようにログを設定します。 BLE_LOG_DBG("BLE_GAP_EVENT_STACK_ON ¥n");

ログは以下のフォーマットで出力されます。

module_tag: [LOG_LABEL] (function:line) log_body ¥n

“module_tag”はモジュール毎にログに付加するタグを” BLE_LOG_TAG”マクロにより指定すること ができます。タグの指定は r_ble_logger.h をインクルードする前に行ってください。

#define BLE_LOG_TAG “app_main”

#include “logger/r_lib_logger.h”

(45)

また、BD アドレス、16bit/128bit UUID のログ出力用に、BLE_BD_ADDR_STR(), BLE_UUID_STR()関数 を用意しています。BLE_BD_ADDR_STR()は BD アドレスバイト配列とアドレスタイプをパラメータとし て渡すと、BD アドレスを示す文字列を返します。BLE_UUID_STR()は UUID バイト配列とタイプをパラ メータとして渡すと、UUID を示す文字列を返します。詳細については API ドキュメント (r_ble_api_spec.chm)を参照してください。 BLE_ADDR_STR()および BLE_UUID_STR()は、以下のように使用します。 BLE_LOG_DBG(“Connected to %s¥n”, BLE_ADDR_STR(addr, addr_type)); BLE_LOG_DBG(“UUID: %s¥n”, BLE_UUID_STR(uuid, uuid_type));

図 1.1  BLE モジュールの位置付け
図 2.5  ファームウェア書き込み
図 2.6  書き込み終了
図 2.10  リモートデバイスの Scan 画面
+7

参照

関連したドキュメント

The component that measures the rate computes the rate, outputs an analog voltage depending on the rate, and communicates with other devices using UART and/or I 2 C. The

Amortized efficiency of list update and paging rules.. On the

SUSE® Linux Enterprise Server 15 for AMD64 & Intel64 15S SLES SUSE® Linux Enterprise Server 12 for AMD64 & Intel64 12S. VMware vSphere® 7

ESET Server Security for Windows Server、ESET Mail/File/Gateway Security for Linux は

The performance measures- the throughput, the type A and type B message loss probabilities, the idle probability of the server, the fraction of time the server is busy with type r,

Another new aspect of our proof lies in Section 9, where a certain uniform integrability is used to prove convergence of normalized cost functions associated with the sequence

mkdocs serve - Start the live-reloading docs server.. mkdocs build - Build the

・Microsoft® SQL Server® 2019 Client Access License (10 User)ライセンス証書 オープン価格. オープン価格 Microsoft SQL