Silicon Labs UG136: Bluetooth ® C アプリケーション開発者ガイド(SDK v2.x用) ユーザーガイド

タイプ
ユーザーガイド
UG136Silicon Labs Bluetooth
®
C アプリ
ケーション開発者ガイド
このドキュメントは、Silicon
Labs Bluetooth スタックを使用し
て、Silicon Labs Wireless Gecko 製品向け C ベースアプリケー
ションを開発する際に非常に役立つ資料です。このガイドでは、
Bluetooth スタックのアーキテクチャ、アプリケーション開発フ
ローMCU コアおよびペリフェラルの使用と制限、スタック構
成オプション、およびスタック・リソースの使用について説明し
ますこのバージョンは、Silicon Labs Bluetooth SDK バージョ
2.13.x 以降に適用されます。
本書はWireless Gecko 向け Bluetooth アプリケーションの開発において、Bluetooth
スタック API リファレンス、Gecko SDK API リファレンス、および Wireless Gecko
ファレンス・マニュアルに記載されていなかった部分を補うことを目的としています。
本書では、開発者が利用可能なハードウェアリソースを最大限活用できるように、
しく説明します。
要点
プロジェクト構造と開発フロー
Bluetooth スタックと Wireless Gecko
構成
割り込み処理
イベントおよびスリープ管理
リソースの使用方法と利用可能なリソー
silabs.com | Building a more connected world. Rev. 1.7
目次
1 はじめに ...............................4
1.1 本バージョンについて ...........................4
1.2 前提条件 ................................4
2 アプリケーション開発フロー ........................5
2.1 アプリケーション構築フロー .........................6
3 プロジェクト構造 ............................7
3.1 Bluetooth ファイル ............................7
3.2 GATT データベース ............................9
3.3 デバイス・ファームウェア・アップグレード ...................10
3.4 RTOS のサポート .............................10
3.5 マルチプロトコルのサポート .........................10
3.6 ハードウェアのサポート ..........................11
4 Bluetooth スタックと Wireless Gecko デバイスの構成 .............12
4.1 Wireless Gecko MCU とペリフェラルの構成 ....................12
4.1.1 適応型周波数ホッピング .........................12
4.1.2 Bluetooth クロック ...........................13
4.1.3
DC-DC 構成 .............................14
4.1.4 LNA ................................14
4.1.5 定期的なアドバタイジング ........................15
4.1.6 PTI ................................15
4.1.7 送信電力 ..............................15
4.1.8 ホワイトリスト登録...........................16
4.1.9 Wi-Fi の共存 .............................16
4.2 gecko_stack_init() を使用した Bluetooth 構成 ...................17
4.2.1 CONFIG_FLAGS............................17
4.2.2 Mbedtls ...............................17
4.2.3 マルチプロトコル優先度構成 .......................18
4.2.4 スリープ ..............................18
4.2.5 Bluetooth スタック構成 .........................19
4.2.6 OTA 構成 ..............................20
4.2.7 PA.................................20
4.2.8 ソフトウェア・タイマ ..........................20
4.2.9 RF 経路 ...............................20
5 Bluetooth スタックのイベント処理 .....................21
5.1 ブロッキング・イベント・リスナ .......................21
5.2 ノンブロッキング・イベント・リスナ ......................21
5.2.1 スリープとノンブロッキング・イベント・リスナ ................22
5.2.2 イベント・リスナのアップデートに関する通知 .................22
5.3 Micrium OS を使用したイベント・リスナ .....................23
5.3.1 複数のタスクからのコマンド .......................23
silabs.com | Building a more connected world. Rev. 1.7 | 2
6 割り込み ..............................24
6.1 外部イベント ..............................24
6.2 優先度 .................................25
7 Wireless Gecko のリソース .......................26
7.1 フラッシュ ...............................27
7.1.1 フラッシュ使用率の最適化 ........................28
7.2 リンク方法 ...............................28
7.3 RAM .................................29
7.3.1 Bluetooth スタック ...........................29
7.3.2 Bluetooth 接続プール ..........................29
7.3.3
Bluetooth GATT データベース .......................29
7.3.4 呼び出しスタック ...........................29
7.3.5 ヒープ・メモリ ............................30
7.4 RTCC .................................30
8 アプリケーション ELF ファイル ......................31
9 資料 ................................32
silabs.com | Building a more connected world. Rev. 1.7 | 3
1 はじめに
本書は、Silicon Labs Bluetooth スタック用の C 開発者ガイドです。
本書は、
開発についてさまざまな角度から説明するもので、Bluetooth スタックを使用する Wireless Gecko 製品向けに C 言語で開発を
行う際の重要な資料になります。
本書では以下のトピックについて説明します。
セクション 2 アプリケーション開発フロー では、アプリケーション開発フローについて説明します。
セクション 3 プロジェクト構造 では、プロジェクト構造についてレビューします。
セクション 4 Bluetooth スタックと Wireless Gecko デバイスの構成 では、プロジェクトに含まれるライブラリと、アプリケ
ーション・コード内の実際の Wireless Gecko の構成について説明します。
セクション 5 Bluetooth スタックのイベント処理 は、Silicon Labs Bluetooth スタックを使用する開発者にとって重要なセクシ
ョンです。ここではイベントベースのアーキテクチャ内でアプリケーションがスタックとどのように同期して動作するかを説明し
ます。
セクション 6 割り込み とセクション 7 Wireless Gecko のリソース では、ペリフェラルとチップセット・リソースにつ
いて簡単に説明し、スタックの使用向けに予約されるリソース、割り込みの処理、スタックのメモリ・フットプリントとアプリケー
ションに使用可能なメモリについて取り上げます。
1.1 本バージョンについて
Silicon Labs Bluetooth SDK の現在のバージョンは 2.13.x です。
現在サポートされているコンパイラおよび IDE のバージョンは以下のとおりです。
IDESimplicity Studio 4.1.11 以降
コンパイラ:IAR v8.30.1 および GCC 7.2.1
1.2 前提条件
本書では、Silicon Labs Bluetooth SDK の最新バージョンが開発マシンWindowsMAC OSX、または Linuxに適切にインストー
ルされ、読者がクイックスタート・ガイドおよび SDK の事例に精通していることを前提としています。また、読者は Bluetooth 技術
の基礎を理解している必要があります。詳細については、UG104.13
Bluetooth
技術の基礎
』を参照してください。
Silicon Labs Simplicity Studio 開発環境でアプリケーション例を使用して開始する手順については、QSG139
Simplicity Studio
を使用
した
Bluetooth
開発
』を参照してください。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
はじめに
silabs.com | Building a more connected world. Rev. 1.7 | 4
2 アプリケーション開発フロー
次の図に
ファームウェア構造の概要を示します。開発者はアプリケーションをスタックの上に構築しますが、Silicon Labs はこのス
タックをプリコンパイル済みのオブジェクト・ファイルとして提供し、これによってエンド・デバイスの Bluetooth 接続が可能になり
ます。
2.1. Bluetooth スタック・アーキテクチャのブロック図
Bluetooth スタックには以下のブロックが含まれています。
ブートローダ Gecko ブートローダはスタックの一部ではありませんが、Bluetooth
SDK と共に提供されています。詳細について
は、UG266
Gecko
ブートローダユーザ・ガイド
およびAN1086
Silicon Labs Bluetooth
アプリケーションでの
Gecko
ブー
トローダの使用
』を参照してください。ブートローディングの一般的な情報についてはUG103.06
Bootloading Fundamentals
(ブートローディングの基礎)
』を参照してください。
Bluetooth スタック - リンク・レイヤ、汎用アクセス・プロファイル、セキュリティ・マネージャ、属性プロトコル、および汎用属
性プロファイルで構成される Bluetooth の機能。
Bluetooth AppLoader ブートローダの後に起動するアプリケーション。ユーザアプリケーションが有効かどうかをチェックし、
有効な場合は、AppLoader がアプリケーションを起動します。アプリケーション・イメージが無効な場合は、AppLoader OTA
ロセスを開始して有効なアプリケーション・イメージの受信を試みます。これを実行するには Gecko ブートローダが必要です。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
アプリケーション開発フロー
silabs.com | Building a more connected world. Rev. 1.7 | 5
2.1 アプリケーション構築フロー
2.2. Bluetooth プロジェクトの構築フロー
プロジェクトを構築するには、まず、Bluetooth サービスと特性
GATT 定義)を定義し、Silicon Labs が提供する例、または空のプロ
ジェクト・テンプレートからアプリケーション・ソース・コードを記述します。この手順については、QSG139
Simplicity Studio
使用した
Bluetooth
アプリケーション開発
』で説明しています。
SDK v2.1.0 以降では、Bluetooth サービスと特性を定義する 2 つの方法が用意されています。最初の方法は、Simplicity Studio Visual
GATT Editor GUI を使用します。これはGATT を設計し、gatt_db.c および gatt_db.h を生成するためのグラフィカル・ツールです。
またこのツールを使用して .xml ファイルと .bgproj GATT 定義ファイルをインポートできます。Visual GATT Editor Simplicity
Studio プロジェクトで GATT を定義し生成するためのデフォルト・ツールです。
2 番目の方法は.xml または .bgproj を『UG118
Blue Gecko Bluetooth® Profile Toolkit
開発者ガイド
』に従って作成し、次にプリコ
ンパイルステップで BGBuild 実行可能ファイルを使用して GATT 定義ファイルを .c および .h に変換する方法です。この方法は IAR
Embedded Workbench プロジェクトで使用されます。
プロジェクトをコンパイルすると、オブジェクトファイルが生成されます。このファイルはその後、SDK で提供されるプリコンパイ
ル・ライブラリとリンクされます。リンクにより、サポートされている Wireless Gecko デバイスに対してプログラム可能なフラッシ
ュ・イメージが生成されます。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
アプリケーション開発フロー
silabs.com | Building a more connected world. Rev. 1.7 | 6
3 プロジェクト構造
このセクションでは、アプリケーション・プロジェクト構造と、プロジェクトに含める必要のある必須のリソースおよびオプションの
リソースについて説明します。
3.1 Bluetooth ファイル
ライブラリ・ファイル
Bluetooth スタック・ライブラリは以下で構成されます。
binapploader.oBluetooth AppLoader のバイナリ・イメージ。オプションの OTA(無線)機能を提供します。
binapploader_nvm3.o: NVM3 に対応したシリーズ 1 Bluetooth AppLoader のバイナリ・イメージ。
libbluetooth.aBluetooth スタックのライブラリ。
libmbedtls.aBluetooth スタック用の mbed TLS 暗号化ライブラリ。
libpsstore.a:
Bluetooth スタックの PS ストア機能。EFR32BG2x デバイスでは使用できません。NVM3 を使用する必要がありま
す。
RAIL
Bluetooth スタックは RAIL を使用して無線にアクセスします。RAIL ライブラリは Bluetooth スタックとリンクさせる必要がありま
す。RAIL には、シングルプロトコル環境とマルチプロトコル環境に対応する、デバイス・ファミリごとの個別ライブラリがあります。
RAIL ライブラリは Gecko SDK で提供されます。詳細についてはUG103.13
RAIL Fundamentals
RAIL
の基礎
およびその他
RAIL ドキュメントを参照してください。
Note: 無線モジュールを規制に準拠させるために、無線モジュール用の Bluetooth スタックを RAIL ライブラリおよびラジオモジュー
ル用の構成ライブラリにリンクする必要があります。これらは、librail_module_<soc family><compiler>_release.a
librail_config<modulename>.a. です。
EMLIB および EMDRV
Bluetooth スタックは、EMLIB ライブラリと EMDRV ライブラリを使用して EFR32 ハードウェアにアクセスします。EMLIB および
EMDRV のペリフェラル・ライブラリはソース・コードで提供され、このライブラリはプロジェクトに含める必要があります。EMLIB
および EMDRV Gecko SDK の一部です。EMLIB および EMDRV の詳細については、<Simplicity Studio Gecko SDK>\platform
\bootloader\documentation\Gecko_Bootloader_API_Reference\index.html にある Gecko ブートローダ API のリファレンスと、
<Simplicity Studio Gecko SDK>\platform\ のそれぞれのフォルダにあるドキュメントを参照してください。
スリープ・タイマ
スリープ・タイマは単一ショットおよび定期タイマを提供するプラットフォーム・コンポーネントです。Bluetooth スタックはこれ
をディープ・スリープに使用します。スリープ・タイマはプロジェクトに含める必要があります。タイマ周波数デバイダ
(SL_SLEEPTIMER_FREQ_DIVIDER in sl_sleeptimer_config.h) 1 に構成する必要があります。
ヘッダ・ファイル
bg_version.h
このファイルには、Bluetooth スタックのバージョンが含まれます。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
プロジェクト構造
silabs.com | Building a more connected world. Rev. 1.7 | 7
API ヘッダ・ファイル
これらのファイルは
Bluetooth スタック API を定義します。さまざまな使用状況に対応するファイルが 3 種類あります。これらのフ
ァイルのうち 1 つのファイルのみを含めてください。native_gecko.h ベアメタル Bluetooth アプリケーションで使用します。
ncp_gecko.h は、NCP をサポートするために SoC アプリケーションを構築する際に使用します。rtos_gecko.h Micrium RTOS
使用します。
これらのファイルには 2 つの目的があります。最初の目的は、実際の Bluetooth スタック API と、そのスタックのコマンドとイベント
を含めること、2 番目の目的は、構成、イベント、およびスリープ管理 API Bluetooth スタックに提供することです。
構成、イベント、およびスリープ管理 API を以下で説明します。
errorcode_t gecko_init(const gecko_configuration_t*config)
この関数は、
単一の引数(gecko_configuration_t 構造体へのポインタ)を取ります。この関数の目的は、構造体に提供されたパラメー
タで Bluetooth スタックを構成し初期化することです。構成オプションと gecko_init() の使用方法についてはセクション
4.2 gecko_stack_init() を使用した Bluetooth 構成で詳しく説明します。gecko_init() は、Bluetooth スタックを初期化するためにアプリ
ケーションによって呼び出される必要があります。
この機能は便宜上備えられています。Bluetooth スタックのすべての機能を初期化します。構成の粒度をさらに高めるには、以下で説
明するように gecko_stack_init() を使用します。
errorcode_t gecko_stack_init(const gecko_configuration_t*config)
この関数は
、単一の引数gecko_configuration_t 構造体へのポインタ)を取りますこの関数の目的は、構造体に提供されたパラメー
タで Bluetooth スタックを構成し初期化することです。関数 gecko_stack_init() が呼び出された後、各スタックが使用するコンポーネン
トを個別に初期化する必要があります。個別に行うことで、不要なスタック・コンポーネントを含めずにメモリを最適化することがで
きます。
以下の API は、スタック・コンポーネントを個別に初期化するために使用できます。
gecko_bgapi_class_dfu_init();
gecko_bgapi_class_system_init();
gecko_bgapi_class_le_gap_init();
gecko_bgapi_class_le_connection_init();
gecko_bgapi_class_gatt_init();
gecko_bgapi_class_gatt_server_init();
gecko_bgapi_class_endpoint_init();
gecko_bgapi_class_hardware_init();
gecko_bgapi_class_flash_init();
gecko_bgapi_class_test_init();
gecko_bgapi_class_sm_init();
struct gecko_cmd_packet*gecko_wait_event(void)
これは
、イベントが Bluetooth スタックから送信されるのを待ち、イベントを受信するまでブロックする、ブロッキング関数です。イ
ベントが受信されると、gecko_cmd_packet 構造体へのポインタが返されます。
Bluetooth スタック構成で EM スリープ・モードが有効になっている場合、Bluetooth スタックからイベントを受信しないと、デバイス
は自動的に EM1 または EM2 モードになります。できるだけデバイスを消費電力の最も低いスリープ・モードにするには、
gecko_wait_event() を使用するのが一番簡単な方法です。
Bluetooth スタックのイベント処理は、セクション 5 Bluetooth スタックのイベント処理 で詳しく説明します。
struct gecko_cmd_packet* gecko_peek_event(void)
これは、Bluetooth スタックから Bluetooth イベントを要求する、
ノンブロッキング関数です。イベントが要求され、イベントキュー
が空でない場合、gecko_cmd_packet 構造体へのポインタが返されます。イベント・キューにイベントがない場合は NULL が返されます。
このノンブロッキング・イベントリスナを使用する場合、EM スリープ・モードは Bluetooth スタックで自動的に管理されないため
アプリケーション・コードで管理する必要があります。このスリープ・モード管理は gecko_can_sleep_ms() 関数と gecko_sleep_for_ms()
関数で行いますが、これらは後で説明します。
スタックのイベント処理は、セクション 5 Bluetooth スタックのイベント処理 で詳しく説明します。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
プロジェクト構造
silabs.com | Building a more connected world. Rev. 1.7 | 8
int gecko_event_pending(void)
この関数は
、イベントキューに保留中の Bluetooth スタックイベントがあるかどうかを確認します。保留中の Bluetooth イベント
が検出された場合、関数は 0 以外の値を返し、gecko_peek_event() または gecko_wait_event() によってイベントを処理する必要があるこ
とを示します。イベントが検出されない場合は、0 が返されます。
uint32 gecko_can_sleep_ms(void)
この関数を使用して、Bluetooth スタックをスリープ状態にできる時間を決定します。戻り値は、
次の Bluetooth 動作が発生するまでス
タックをスリープ状態にできるミリ秒数です。スリープ状態にできない場合は、0 が返されます。この関数は、ノンブロッキング
gecko_peek_event() イベント処理でのみ使用されます。
uint32 gecko_sleep_for_ms(uint32 max)
この関数は、
最大ミリ秒数(このミリ秒数は関数の単一パラメータで設定されます)スタックを EM スリープ状態にする場合に使用さ
れます。戻り値は、実際にスリープ状態になったミリ秒数です。外部イベントによって、スタックのスリープ状態が解除される可能性
があります。この関数は、ノンブロッキング gecko_peek_event() イベント処理でのみ使用されます。
native_gecko.h
このファイルは、RTOS を使用しないアプリケーションで使用します。直接関数呼び出しを使用して、Bluetooth スタックに IPC(プ
ロセス間通信)を提供します。
ncp_gecko.h
このファイルは、ホストの NCP 機能を提供するアプリケーションで使用します。関数呼び出しとして NCP ヘッダを使用することによ
って Bluetooth スタックに IPC を提供します。
host_gecko.h および gecko_bglib.h
これらのファイルは、外部ホストのアプリケーションを開発する場合に使用します。host_gecko.h には API 定義が含まれ、gecko_bglib.h
にはホスト・アプリケーションと BGAPI シリアル・プロトコル間のアダプテーション層が含まれます。
rtos_gecko.h
アプリケーションが Micrium OS 向けに構築されている場合は、rtos_gecko.h を使用します。Bluetooth スタックは、Micrium OS の独立
したタスクであるため、Micrium OS の電源、スリープおよびメモリ管理を使用します。rtos_gecko.h は、Micrium OS の任意のタス
クから Bluetooth スタックを使用する場合の IPC 用のラッパーを提供します。このファイルには、Bluetooth スタック APIそのスタッ
クのコマンドおよびイベント、Bluetooth スタックの構成 API が含まれています。
3.2 GATT データベース
GATT(汎用属性プロファイル)データベースは、Bluetooth デバイスの Bluetooth プロファイル、サービス、および特性を記述するた
めの標準的な方法です。Silicon Labs Bluetooth スタックを使用する場合、GATT 定義は、Simplicity Studio Visual GATT Editor GUI
で直接編集するか、または XML で記述して、プレビルド・タスクとして BGBuild 実行可能ファイルに渡します。GATT データベース
の作成方法と構文の詳細については、UG118
Blue Gecko Bluetooth® Smart Profile Toolkit
開発者ガイド
』を参照してください。
gatt_db.c および gatt_db.h
gatt_db.c GATT データベースの構造とコンテンツを定義し、BGBuild.exe または Visual GATT Editor によって自動的に生成されま
す。gatt_db.h には、このデータベースと、ローカルな特性とサービスのハンドルが含まれます。GATT のタイプ定義は、gatt_db_def.h
から gatt_db.h に自動的に含められます。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
プロジェクト構造
silabs.com | Building a more connected world. Rev. 1.7 | 9
3.3 デバイス・ファームウェア・アップグレード
デバイス
ファームウェア・アップグレード (DFU) とは、シリアル・リンクまたは無線 (OTA) を介してアプリケーションをアップグ
レードするプロセスのことです。いずれの場合もDFU のサポートを有効にするために、thr アプリケーションは以下のファイルを追
加する必要があります。
application_properties.c
このファイルには、タイプ、バージョン、セキュリティなどのアプリケーション・イメージに関する情報をなど、アプリケーション・
プロパティ構造体が含まれます。この構造体は Gecko ブートローダ API application_properties.h で定義されます(<Simplicity
Studio Gecko SDK>\platform\bootloader\documentation\Gecko_Bootloader_API_Reference\index.html Gecko ブートローダ API
ファレンスを参照)。事前に生成されたファイルは Simplicity Studio プロジェクトに含められ、アプリケーション固有のプロパティを含
めるように変更できます。アプリケーション・プロパティには Gecko ブートローダ API を使用してアクセスできます以下のメンバ
ーは定義を変更して更新することができます。
// Version number for this application (uint32_t)
#define BG_APP_PROPERTIES_VERSION
// Capabilities of this application (uint32_t)
#define BG_APP_PROPERTIES_CAPABILITIES
// Unique ID (e.g. UUID or GUID) for the product this application is built for (uint8_t[16])
#define BG_APP_PROPERTIES_ID
Bluetooth AppLoader OTA プロセスを使用する場合は、
アプリケーションプロパティ構造体をアプリケーションベクタ・テーブ
ルの直後に配置する必要があります。これはBluetooth スタックから提供されるリンカ・ファイルを使用すると自動的に有効になり
ます。
3.4 RTOS のサポート
Bluetooth スタックは Micrium RTOS でも実行できます。この場合、native_gecko.h rtos_gecko.h と置き換えられ、プロジェクトに
rtos_bluetooth.c ファイルと rtos_bluetooth.h ファイルが追加されます。
rtos_bluetooth.c rtos_bluetooth.h
rtos_bluetooth.c および rtos_bluetooth.h Bluetooth スタックおよびその他の Micrium OS タスクとの IPCプロセス間通信)の
Micrium OS タスクを提供します。Micrium OS を使用する場合は、以下で説明する rtos_gecko.h ヘッダ・ファイルも含める必要があり
ます。これは、任意の Micrium OS タスクから Bluetooth スタックを使用するための API IPC カプセル化を提供します。
gecko_configuration_t 構造体の Bluetooth スタック用に RTOS のサポートを構成する必要があります。config_flags フィールドには
GECKO_CONFIG_FLAG_RTOS を設定しておく必要があります。これにより、Bluetooth スタックは、スリープ状態に直接移行するのではなく、
Micrium OS によってスリープ状態に移行するようになります。scheduler_callback および stack_schedule_callback は、適切な関数を呼
び出すように設定する必要があります。これらのコールバックは、対応するタスクをウェイク・アップする場合に使用します。
Micrium OS で使用する Bluetooth スタック構成は以下のとおりです。
.config_flags = GECKO_CONFIG_FLAG_RTOS, .scheduler_callback = BluetoothLLCallback, .stack_schedule_callback = BluetoothUpdate,
gecko_stack_init() を呼び出した後に、bluetooth_start_task() を呼び出すことができます。
void bluetooth_start_task(OS_PRIO ll_priority, OS_PRIO stack_priority);
これは
タスクの優先度をパラメータとして取得します。ll_priority はリンク・レイヤstack_priority Bluetooth スタックです。
システムの性能にはリンク・レイヤのタイムリーな実行が重要であるため、システムでリンク・レイヤの優先度を最も高くする必要が
あります。
3.5 マルチプロトコルのサポート
マルチプロトコル環境で Bluetooth スタックを使用する場合は、以下の関数を使用して Bluetooth スタックのマルチプロトコル機能を
有効にする必要があります。
gecko_init_multiprotocol(const void *config);
現時点では、config パラメータは必ず NULL に設定され、今後の機能拡張に備えて予約されます。
マルチプロトコル環境で Bluetooth を使用するには、マルチプロトコルをサポートする RAIL ライブラリを使用する必要もあります。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
プロジェクト構造
silabs.com | Building a more connected world. Rev. 1.7 | 10
3.6 ハードウェアのサポート
以下のファイルは Gecko SDK の一部であり、これらのファイルによって、ハードウェア固有機能のサポートが追加されます。
hal-config.h
このヘッダ
ファイルには、クロックや電源管理のための MCU ペリフェラルの初期設定のほか、UARTSPI などのペリフェラルの初
期設定も含まれています。このファイルには、UART のボーレートのように、ペリフェラルのボードに固有でない設定のみが含まれ、
UART の入出力ピンのようなボード固有の設定は含まれないことに注意してください。
init_mcu.c および init_mcu.h
これらのファイルには、クロックや電源管理のような MCU の内部設定を初期化する、デバイス初期化関数が含まれています。
init_board.c および init_board.h
これらのファイルには、ボードの外部部品を初期化する、ボード初期化関数が含まれています。GPIO の有効化、無線ボードの外部フ
ラッシュの初期化などを行います。
init_app.c および init_app.h
これらのファイルには、アプリケーションに従って WSTK の外部部品を初期化する、アプリ初期化関数が含まれています。たとえば、
WSTK VCOM、センサー、および LCD ディスプレイを有効にします。
pti.c および pti.h
これらのファイルには、パケット・トレース・インターフェイスを有効にする、PTI 初期化関数が含まれています。
hal-config-board.h
このヘッダ・ファイルには、ボタンや LED ピン、UART および SPI ピンなどのボード初期化設定が含まれていますアプリケーショ
ンを Silicon Labs の無線ボード用に開発する場合、これらの設定は SDK で提供される例では正しく設定されていますが、カスタム・
ハードウェア設計用のアプリケーションを作成する開発者は、必要に応じて設定を構成する必要があります。
bspconfig.h / bsphalconfig.h
BSP(ボード・サポート・パッケージ)ヘッダには無線ボード固有の構成が含まれています。これらの構成は、WSTK IO のトグ
ル、スターターキットの LCD ディスプレイの駆動など、WSTK 固有の関数のパラメータとして使用されます。Hardware Configurator
ツールを使用する場合、例では bsphalconfig.h を使用します。それ以外の場合は、bspconfig.h を使用します。
mx25flash_spi.h
このヘッダファイルには、一部の無線ボードBRD4100A など) SPI フラッシュチップを低消費電力モードに構成するための関
数が含まれています。これは、たとえばSPI フラッシュが低消費電力モードでない場合は、最小の EM2EM3、または EM4 電流を
達成できないため、スリープ電流を測定する際に役立ちます。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
プロジェクト構造
silabs.com | Building a more connected world. Rev. 1.7 | 11
4 Bluetooth スタックと Wireless Gecko デバイスの構成
Wireless Gecko Bluetooth スタックとアプリケーションを実行するには、MCU とそのペリフェラルが適切に構成されている必要が
あります。ハードウェアを初期化した後、gecko_init() 関数を使用してスタックも初期化する必要があります。
4.1 Wireless Gecko MCU とペリフェラルの構成
initMcu()
initMCU() 関数は MCU コアの初期化に使用します。この関数は発振器を起動し、
デバイスのエネルギーモードを構成します。ボード
の設定に依存しないペリフェラルの初期化(タイマの初期化など)は、この関数に追加できます。この関数は、main() の最初に呼び出
す必要があります。
initBoard()
initBoard() 関数は、外部フラッシュの初期化など、ボード機能の初期化に使用します。ボードの設計に依存するペリフェラルの初期化
GPIO の初期化や UART の初期化など)は、この関数に追加できます。この関数は、initMcu() の後に呼び出す必要があります。
initApp()
initApp() 関数はWSTK SPI ディスプレイを有効にするなど、アプリケーション固有の機能を初期化するために使用します。この
関数は、initBoard() の後に呼び出す必要があります。
4.1.1 適応型周波数ホッピング
Bluetooth スタックが適応型周波数ホッピング (AFH) を実装しETSI EN 300 328 規格に準拠するようになりました。AFH は、+10
dBm 以上の送信電力を使用するときに必要です。AFH によってチャンネルの輻輳が回避され、パフォーマンスが向上する場合もあり
ます。
Bluetooth スタックで AFH を有効にするには、以下の初期化関数を呼び出す必要があります。
void gecko_init_afh();
マスタ/スレーブ接続では
、両端で個々に AFH を使用できます。マスタが非適応型でもスレーブは適応型でなければならないことが
あります。この規格では、ブロックされたチャンネルで制御転送を使用できます。規格に準拠するために、ブロックされたチャンネル
が使用中であることをスレーブが検知した場合は、スレーブはそのチャンネルで単一パケットのみを送信して、接続タイムアウトを防
ぎます。
Note: 従来のアドバタイジングは、適応型周波数ホッピングを使用しません。従来のアドバタイジングは 3 つのチャンネルを使用し、
AFH ETSI 規格の要件を満たすために少なくとも 15 個のチャンネルを必要とします。アドバタイジングで AFH を有効にするには
拡張アドバタイジングを使用する必要があります。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 12
4.1.2 Bluetooth クロック
クロック設定は initMcu_clocks() 関数で初期化されます。クロック設定には、チューニングなどのパラメータを含む発振器(HFXO
LFXO
および LFRCO)の初期化、クロック(HFCLKLFCLKLFALFBLFE)の初期化、および発振器へのクロックの割り当て
が含まれます。注:ペリフェラルのクロックGPIO クロック、TIMER クロックなど)は、この関数では無効です。ペリフェラルを初
期化する際に有効にする必要があります。
HFCLK
HFCLK は無線プロトコル・タイマ (PROTIMER) に使用されます。HFCLK は、精度が少なくとも ±50 ppm の範囲内に収まらなくては
ならない高周波数クロックです。このクロックの精度を十分に確保するには外部水晶が必要です (HFXO)
HFXO の初期化により、タイミングが重視される接続とスリープ管理を確保できるように外部水晶を構成します。HFXO は、高周波数
クロック (HFCLK) として設定し、Wireless Gecko HFXO 入力ピンに物理的に接続する必要があります。
LFCLK
LFCLK は、2 つの目的で使用されます。Bluetooth スタックでは、Bluetooth プロトコル・タイミング用に使用されます。また、スリー
プ・モードの間に時間をトラッキングするためにも必要です。
デバイスがスリープ・モードになる際、PROTIMER の現在の状態が保存されますデバイスは、ウェイクアップすると、経過した
スリープクロックのティック数を計算し、それに応じて PROTIMER を調整します。無線ボードでは、PROTIMER が動作を続けてい
たように見えます。
このクロックの精度は、デバイスの動作モードによって異なります。アドバタイズやスキャンの場合、精度はあまり重要ではありませ
んが、接続がオープンである場合は、±500 ppm 以上の精度が必要です。このクロックは、精度要件に応じて、LFXO または LFRCO
のいずれかで駆動できます。
クロックの精度は Bluetooth スタック構成構造で定義されます。4.2.5 Bluetooth スタック構成を参照してください。
デフォルトの構成では、LFXO Wireless Gecko に接続され、低周波数クロック (LFCLK) として設定されます。設計上 LFXO に接続
できない場合は、アプリケーションからスリープを明示的に無効にし、LFRCO がクロックソースとして使用されるように設定する
必要があります。セクション 4.2.4 スリープで説明するように、LFCLK の精度が十分でない場合、Bluetooth スタックを正確に動作さ
せるために、スリープ・モードを無効にする必要があります。
HFRCODPLL
HFRCODPLL シリーズ 2 デバイスで Bluetooth スタックとともにシステム・クロックとして使用される高周波クロックです。
EFR32xG21x では、HFRCODPLL 80 MHz に構成し、システム・クロック・ソースとして設定する必要があります。
CMU_HFRCODPLLBandSet(cmuHFRCODPLLFreq_80M0Hz); CMU_ClockSelectSet(cmuClock_SYSCLK, cmuSelect_HFRCODPLL);
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 13
CTUNE
下の例では、HFXO LFXO の両方の水晶チューニング (CTUNE) 設定が、Silicon Labs Bluetooth モジュール、
基準設計、および無
線ボードのすべてで動作するようにデフォルトで設定されています。ただし、最終製品の設計では、デバイスごとに、または設計ごと
に、個別に水晶校正が必要になる場合があります。CTUNE の値は、initMcu_clocks() 関数の hfxoInit.ctuneSteadyState lfxoInit.ctune
の設定を含む設計に応じて調整することができます。
// Initialize HFXO
CMU_HFXOInit_TypeDef hfxoInit = BSP_CLK_HFXO_INIT;
hfxoInit.ctuneStartup = BSP_CLK_HFXO_CTUNE;
hfxoInit.ctuneSteadyState = BSP_CLK_HFXO_CTUNE;
CMU_HFXOInit(&hfxoInit);
HFXO LFXO の構成の詳細については、
EFR32 リファレンス・マニュアル』を参照してください。
デフォルトの HFXO CTUNE
システムは、次の論理的順序を使用して、デフォルトの HFXO CTUNE 値について複数のソースをチェックします。
1. CTUNE PSKEY が設定されています。このキーには ID 5016 進数で 32)と、16 ビットの CTUNE 値の 2 バイトのデータが含まれ
ています。これは、BGAPI コマンド cmd_flash_ps_save でプログラムすることができます。
2. 校正値が DEVINFO に存在します。一部のモジュールには、工場出荷時にプログラムされた値が DEVINFO-page に含まれています。
3. 製造トークンがユーザ・データ・ページに存在します。これは開発者によってプログラムされます。または、ボード EEPROM にこ
の値が含まれる場合は Simplicity Studio によって自動的に設定されます。このトークンは、2 バイトで構成されます。EFR32xG1x デバ
イスのユーザ・データ・ページ、または EFR32xG21 デバイスの最後のフラッシュ・ページの開始アドレスからのオフセット 0x0100
の位置にあります。フルフラッシュマッピングに関する特定の EFR バリアントについては、EFR32 リファレンスマニュアル』
参照してください。
4. プロジェクトの生成時に無線ボードが選択されている場合は、ボードのヘッダ・ファイルのデフォルト値を使用します。
5. 何も見つからない場合は、CMU ヘッダ・ファイルのデフォルト値を使用します。
Bluetooth スタックでは 38.4 MHz HFXO 周波数のみをサポートしています。その他の HFXO 周波数はサポートされていません。
4.1.3 DC-DC 構成
DC-DC を備えたデバイスの場合、構成は initMCU() 関数で設定します。SDK の例では、DC-DC 構成が Silicon Labs Bluetooth モジ
ュール、無線ボードおよび基準設計で動作するように設定されていますが、カスタム設計では個別に DC-DC 設定を行う必要がある
場合があります。これらのカスタム設定は hal-config-board.h で設定できます。
#define BSP_DCDC_INIT \
{ \
emuPowerConfig_DcdcToDvdd, /* DCDC to DVDD */ \
emuDcdcMode_LowNoise, /* Low-noise mode in EM0 */ \
1800, /* Nominal output voltage for DVDD mode, 1.8V */ \
15, /* Nominal EM0/1 load current of less than 15mA */ \
10, /* Nominal EM2/3/4 load current less than 10uA */ \
200, /* Maximum average current of 200mA
(assume strong battery or other power source) */ \
emuDcdcAnaPeripheralPower_DCDC,/* Select DCDC as analog power supply (lower power) */ \
160, /* Maximum reverse current of 160mA */ \
emuDcdcLnCompCtrl_1u0F, /* 1uF DCDC capacitor */ \
}
DC-DC の構成の詳細については
EFR32 リファレンス・マニュアル』の第 11 章とAN0948
:電力構成と
DC-DC』を参照してく
ださい。
4.1.4 LNA
低ノイズ・アンプ (LNA) は、信号対ノイズ比を大幅に低下させることなく超低電力信号を増幅する電子アンプです。LNA によって RF
感度が向上します。
一部の MGM12P モジュールでは、フロントエンドモジュールFEMの一部として LNA がオンボードで提供されています。これら
のモジュールで LNA を使用するには、FEM を正しく構成して有効にする必要があります。FEM は、プレフィックス BSP_FEM_ を使用し
hal-config-board.h で構成します。
ボードが FEM をサポートしている場合、FEM initBoard() 関数内の initFem() で初期化されます。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 14
4.1.5 定期的なアドバタイジング
定期的なアドバタイジングにより、複数のリスナを単一のアドバタイジング・デバイスと同期させることができます。そのため、マル
チキャストの形式になります。
各リスナは、
データを受信する前にアドバタイジングデバイスと同期する必要があります。定期的なアドバタイジングはリスニング
デバイス上のスキャナを使用して、アドバタイジング・デバイスとの同期を確立します。同期後に、スキャナは停止します。これによ
り、ブロードキャスト・アドバタイズ用のリスニングの場合、フルタイムでスキャナを使用するよりも電力効率が高まります。
定期的なアドバタイジングは、定期的なアドバタイザの役割と、リスニング側での定期的なアドバタイジングの同期という 2 つのコン
ポーネントで構成されます。これら 2 つのコンポーネントはそれぞれ独立しており、個別に初期化する必要があります。
定期的なアドバタイザ
Bluetooth 構成の max_advertisers では、定期的なアドバタイザの最大数も構成します。
Bluetooth スタックで定期的なアドバイザを有効にするには、ジェネリック gecko_init 関数の後で以下の初期化関数を呼び出す必要
があります。
void gecko_init_periodic_advertising();
定期的なアドバタイジングの同期
Bluetooth 構成の max_periodic_sync を使用して、Bluetooth スタックがサポートする必要がある同期の最大数を構成します。
Bluetooth スタックで定期的なアドバタイジングの同期を有効にするには、ジェネリック gecko_init 関数の後で
以下の初期化関数を
呼び出す必要があります。
void gecko_bgapi_class_sync_init();
このコマンドは、BGAPI 同期クラスも初期化して、使用できるようにします。
4.1.6 PTI
PTI(パケット
トレース・インターフェイス) Wireless Gecko SoC の組み込みブロックで、上下双方向の無線パケットを生データ
としてデバッグ・インターフェイスにルーティングします。これらのパケットを Simplicity Studio のネットワーク・アナライザで取り
込んで表示することができます。ネットワーク・アナライザには、Bluetooth パケット用のデコーダがあり、Bluetooth ネットワークの
デバッグ、分析、および測定に使用できます。
PTI は、initApp() 関数内の configEnablePti() で初期化されます。ボーレートは HAL_PTI_BAUD_RATE 定義を使用して hal-config.h
設定でき、ピンは接頭辞 BSP_PTI_ を含む定義を使用して hal-config-board.h で構成できます。
Bluetooth 2.6.x 以降、PTI RAIL によって提供される関数で構成されます。
4.1.7 送信電力
Bluetooth の送信電力は、無線、ソフトウェア構成、RF パス・ゲイン補償、および適応型周波数ホッピング (AFH) の使用状況により許
容される最大電力で決まります。
ETSI EN 300 328 規格では、トランスミッタ電力が +10 dBm 以上の場合に AFH を使用する必要があります。
適応性要件に従って抑制されている場合、最大許容電力は +10 dBm 未満に制限されます。ETSI 規格では、AFH に少なくとも 15 個の
チャンネルを使用することが求められます。この要件により、十分な数のチャンネルを使用できない場合、従来のアドバタイジング、
スキャン応答、および接続に +10 dBm 以上を使用することはできません。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 15
4.1.8 ホワイトリスト登録
ホワイトリスト登録は、
デバイスのフィルタリングに使用します。現在は、デバイスの検出時にのみサポートされています。接続要求、
アドバタイジング時のリモート・デバイスからのスキャン要求、および接続の開始は、ホワイトリストによって制限されません。
ホワイトリストのサイズは、結合されているデバイスの最大数の構成と一致します。ホワイトリスト登録の使用時に、結合されている
デバイスの最大数が変更された場合は、新しい設定が有効になる前にデバイスをリセットする必要があります。
結合されているデバイスは、自動的にホワイトリストに追加されます。また、これらは BGAPI コマンド gecko_cmd_sm_add_to_whitelist()
により手動で追加することができます。
ランダム・アドレスの解決はサポートされていません。解決可能なランダム・アドレスを使用するデバイスは、スキャン時に表示され
ません。ほとんどの Android および iOS 電話は解決可能なランダムアドレスを使用しているため、これらのデバイスは、デバイスの
検出時にホワイトリスト登録機能によって効率的にブロックされます。
Bluetooth スタックでホワイトリスト登録を有効にするには、ジェネリック gecko_init 関数の後で以下の初期化関数を呼び出す必要
があります。
void gecko_init_whitelisting();
この関数が有効になっている場合は、BGAPI コマンド gecko_cmd_le_gap_enable_whitelisting() によって実行時に有効/無効にすることが
できます。
4.1.9 Wi-Fi の共存
Wi-Fi の共存 (COEX)
送信に無線を使用できるプロトコルを Bluetooth Wi-Fi が判別するプロトコルです。これを有効にすると
Wi-Fi および Bluetooth の性能が向上します。COEX は、接頭辞 BSP_COEX_ および HAL_COEX_ が付く定義を使用して hal-config-board.h
構成します。
COEX を有効にするには、gecko_stack_init() の後に以下の関数を呼び出します。
gecko_initCoexHAL();
COEX は、Wi-Fi IC への GPIO インターフェイスを実装しています。これは、EMLIB em_gpio.c および EMDRV gpiointerrupt.c によっ
て異なるため、両方のファイルをプロジェクトに含める必要があります。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 16
4.2 gecko_stack_init() を使用した Bluetooth 構成
gecko_stack_init() 関数は、
スリープ・モード構成、接続用のメモリ割り当て、OTA 構成などを含む、Bluetooth スタックを構成するた
めに使用されます。Bluetooth スタックが構成されていない場合は、どの Bluetooth スタック関数も使用することはできません。
Bluetooth スタック構成の例:
uint8_t bluetooth_stack_heap[DEFAULT_BLUETOOTH_HEAP(MAX_CONNECTIONS)];
static const gecko_configuration_t config = {
.config_flags=0,
.sleep.flags=SLEEP_FLAGS_DEEP_SLEEP_ENABLE,
.bluetooth.max_connections=MAX_CONNECTIONS,
.bluetooth.heap=bluetooth_stack_heap,
.bluetooth.heap_size=sizeof(bluetooth_stack_heap),
.bluetooth.sleep_clock_accuracy = 100, // ppm
.gattdb=&bg_gattdb_data,
.ota.flags=0,
.ota.device_name_len=3,
.ota.device_name_ptr="OTA",
.max_timers=4
};
gecko_stack_init() 関数の構成オプションは、
スリープの有効化/無効化、Bluetooth 接続カウント、ヒープ・サイズ、スリープ・クロッ
ク精度、GATT データベース、OTA 構成、および PA 構成です。
関数 gecko_stack_init() が呼び出された後、使用される各スタック・コンポーネントを個別に初期化する必要があります。個別に行う
ことで、不要なスタック・コンポーネントを含めずにメモリを最適化することができます。
以下の API は、スタック・コンポーネントを個別に初期化するために使用できます。
gecko_bgapi_class_dfu_init() デバイスファームウェアアップグレード (dfu) API を有効にし
ます。
gecko_bgapi_class_system_init() ローカル・デバイス(システム)API を有効にします。
gecko_bgapi_class_le_gap_init() 汎用アクセス・プロファイル (gap) API を有効にします。
gecko_bgapi_class_le_connection_init() 接続 API を介して、接続の確立、パラメータ設定、および切断手
順を管理できます。
gecko_bgapi_class_gatt_init() gatt API を介して、リモート GATT サーバ内の属性を参照/管理で
きます。
gecko_bgapi_class_gatt_server_init() gatt_server API を介して、
ローカル GATT データベース内の属性
を参照/管理できます。
gecko_bgapi_class_hardware_init() ソフトウェア・タイマのアクセスおよび構成を有効にします。
gecko_bgapi_class_flash_init() フラッシュ・メモリのユーザ・データを管理するために使用でき
る固定ストア・コマンド(フラッシュ)API を有効にします。
gecko_bgapi_class_test_init() DTM テスト API を有効にします。
gecko_bgapi_class_sm_init() セキュリティ・マネージャ (sm) API を有効にします。
gecko_bgapi_class_util_init() atoiitoa などのユーティリティ関数 API を有効にします。
4.2.1 CONFIG_FLAGS
現在のフラグ:
GECKO_CONFIG_FLAG_RTOS 1 = アプリケーションは RTOS を使用します。クロック、
ベクタ、TEMPDRVまたはスリープは RTOS から
提供されるためスタックでは構成しません。
4.2.2 Mbedtls
スタックによって使用される Mbedtls 暗号化ライブラリは、
サポートされるアルゴリズムや、実装でハードウェア・アクセラレーショ
ンを使用するか、またはソフトウェアで実行するかどうかを定義する構成ファイルを使用して構成されます。Mbedtls 構成ファイル・
パスは、#define MBEDTLS_CONFIG_FILE を使用して指定されます。デフォルトの構成ファイル mbedtls_config.h SDK 内にあり、構成を
変更する必要がある場合はテンプレートとして使用する必要があります。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 17
4.2.3 マルチプロトコル優先度構成
マルチプロトコル環境で
Bluetooth スタックが他のプロトコルと共に使用されている場合は、RAIL Bluetooth 優先度設定を変更し
て、使用事例を最適化する必要がある場合があります。
アプリケーションが構成構造体を割り当てて、Bluetooth スタックに提供する必要があります。
gecko_bluetooth_ll_priorities custom_priorities; static const gecko_configuration_t config = { // .bluetooth.linklayer_priorities =
&custom_priorities, // };
GECKO_BLUETOOTH_PRIORITIES_DEFAULT 定数により、gecko_bluetooth_ll_priorities 構造体をデフォルト状態に初期化する必要があります。
gecko_bluetooth_ll_priorities 構造には、以下のフィールドが含まれています。
scan_min & scan_max - スキャン動作の優先度範囲。
adv_min & adv_max - アドバタイズ動作の優先度範囲。
conn_min & conn_max - 接続パケットの優先度範囲。
init_min & init_max - 接続開始の優先度範囲。
threshold_coex - 優先度信号を発生するしきい値レベル (COEX が有効な場合にのみ使用)
rail_mapping_offset - Bluetooth 優先度が配置されている、RAIL 優先度レベル。
rail_mapping_range - Bluetooth 優先度が配置されている、RAIL 優先度範囲。
各優先度範囲で、0 が最大優先度、0xff が最小優先度です。Bluetooth 優先度は、RAIL 優先度とは異なります
つまりBluetooth
は、0 0xff の間に独自のスペースがあり、そこにすべての Bluetooth 優先度が配置されます。Bluetooth 優先度を RAIL 優先度にマッ
ピングするには、フィールド rail_mapping_offset rail_mapping_range の値を使用して一次方程式を作成します。
RAIL_priority=(BT_priority/0xFF)*rail_mapping_range+rail_mapping_offset
4.2.4 スリープ
Wireless Gecko のスリープ
モード EM2(エネルギー・モード 2 gecko_init() 関数で有効にする必要があります。スリープ・フラ
グは gecko_configuration_t 構造体の一部です。SLEEP_FLAGS_DEEP_SLEEP_ENABLED フラグをスリープを有効にするように設定する必要が
あります。セクション 5 Bluetooth スタックのイベント処理 で説明するように、ブロッキングイベントではスリープ・モード
はスタックにより自動的に処理されます。
gecko_configuration_t 構造体 (main.c) でスリープを有効にする例:
.sleep.flags = SLEEP_FLAGS_DEEP_SLEEP_ENABLE // EM sleeps enabled
スリープ
モードを使用するには、正確な 32 kHz 低周波数クロック (LFCLK) がハードウェアに必要です。Bluetooth スタックで正確
なスリープ・クロックを使用できない場合、低消費電力スリープ・モードにすることはできません。低消費電力スリープ・モードを必
要としないアプリケーションの場合、LFXO を省略することができますが、この場合は gecko 構成構造体のスリープ・フラグを次のよ
うに設定する必要があります。
.sleep.flags = 0, // Sleeps disabled
実行時のスリープを無効にする
実行時にスリープを無効にする必要がある場合は
スリープドライバ関数 SLEEP_SleepBlockBegin(sleepEM2) を呼び出すことで無効に
できます。EM2 ディープ・スリープ・モードを再度有効にするには、SLEEP_SleepBlockEnd(sleepEM2) を使用します。EM2 が無効になっ
ている(ブロックされている)間は、スタックは EM0 EM1 を切り替えます。詳細についてはナレッジ・ベース記事「Bluetooth
スタックによるエネルギー・モードの使用」を参照してください。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 18
4.2.5 Bluetooth スタック構成
スタック・メモリ
Bluetooth スタックは、内部メモリ管理を使用して、各接続および内部データ・バッファに対してメモリを割り当てます。このメモリ
は、アプリケーションが割り当てて Bluetooth スタックに渡す必要があります。メモリのサイズは接続数によって異なります。C マク
DEFAULT_BLUETOOTH_HEAP() は、必要なメモリのデフォルト・サイズをバイト単位で算出します。
以下の例では、bluetooth_stack_heap アレイを割り当てて Bluetooth スタックに渡します。
uint8_t bluetooth_stack_heap[DEFAULT_BLUETOOTH_HEAP(MAX_CONNECTIONS)];
static const gecko_configuration_t config = { // .bluetooth.heap =
bluetooth_stack_heap, .bluetooth.heap_size = sizeof(bluetooth_stack_heap), // };
接続数
Bluetooth 同時接続の絶対最大数は 8 です接続管理に割り当てられているメモリの容量によって、接続数はさらに制限されます。メ
モリは gecko_init() での初期化中に割り当てられます。C 定義 MAX_CONNECTIONS を定義すると接続数を設定できます。前述のように、
一の定義で Bluetooth スタックのメモリ・サイズも計算できます。その場合、MAX_CONNECTIONS さらに、構成構造体
.bluetooth.max_connections フィールドの Bluetooth スタックに渡されます。
Bluetooth 接続を 1 つに制限する例。
#define MAX_CONNECTIONS 1
接続の RAM 使用量の詳細については、7.3.2 Bluetooth 接続プールを参照してください。
スリープ・クロックの精度
Bluetooth スタックは、.sleep_clock_accuracy を使用してスリープからのウェイクアップ時間を最適化します。単位は ppm100 万分
1です。この値が大きすぎると、Bluetooth スタックがスリープからウェイクアップするタイミングが早すぎて実際のイベントを待
つことになり、余計な電力を消費する原因となります。この値が小さすぎると、Bluetooth スタックがウェイクアップするのが遅すぎ
て接続イベントを逃し、接続が中断する原因となります。
この値を定義していない場合または 0 に設定した場合は、デフォルト値の 250 ppm が使用されます。
以下に、スリープ・クロックの精度を設定する例を示します。
.bluetooth.sleep_clock_accuracy = 100, // ppm
アドバタイザ
アドバタイズ・セットの最大数は、この構成オプションによって定義できます。これらのセットを使用して複数のアドバタイザを開始
できます。この構成オプションでは、定期的なアドバタイズの最大数も構成します。アドバタイズのコンテキストごとに約 60 バイト
RAM が割り当てられます。
.bluetooth.max_advertisers = 5; //!< Maximum number of advertisers to support, if 0 defaults to 1
Note: 接続可能なアドバタイズの最大数は MAX_CONNECTIONS によって制限されます。
同期アドバタイズ
サポートされる同期アドバタイズの最大数を構成する必要があります。コンテキストごとに約 40 バイトの RAM が割り当てられます。
.bluetooth.max_periodic_sync = 5; //! <Maximum number of synhronous advertisers to support. Default is 0, none supported
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 19
4.2.6 OTA 構成
ファームウェア
アップグレードの一部は Bluetooth AppLoader アプリケーションにより処理されるため、Bluetooth 無線 (OTA) ファ
ームウェアのアップグレードに対応しています。
OTA モードでは、.ota.flags 構成フィールドを使用します。現時点で用意されているオプションは、GECKO_OTA_FLAGS_RANDOM_ADDRESS
けです。このオプションではパブリック・アドレスではなくスタティック・ランダム・アドレスを使用するために OTA を設定し
ます。
Wireless Gecko AppLoader OTA モードになっていると、そのデバイス名とデバイス名の長さを gecko 構成構造体を使用して構
成することができます。
.ota.device_name_len = 3, // OTA name length
.ota.device_name_ptr = "OTA", // OTA Device Name
最後に、デバイスを OTA DFU モードに確実に設定して、信頼できるデバイスのみに機能を制限する必要があります。
OTA ファームウェア
アップデートの詳細については、UG266
Silicon Labs Gecko
ブートローダユーザガイド
およびAN1086
Silicon Labs Bluetooth
アプリケーションでの
Gecko
ブートローダの使用
』を参照してください。
4.2.7 PA
EFR32 SoC ベースの設計では、PAVDD(パワー・アンプ電圧レギュレータ VDD 入力)を DC/DC の出力から供給するか、または 3.3
V 電源から直接供給できます。
Bluetooth スタック構成は、デフォルトで DC/DC PAVDD 入力として使用します。PAVDD 3.3 V 電源から供給する場合
は、.pa.input フィールドを定義する必要があります。
Bluetooth スタックは自動的に高電力 PA を選択します(使用可能な場合pa_mode 構成を 1 に設定すると、Bluetooth スタックで常に
低電力 PA が使用されるように構成されます。
.pa.config_enable = 1, // PA Configuration is enabled .pa.input = GECKO_RADIO_PA_INPUT_VBAT, // PAVDD is upplied from an 3.3 V power
supply .pa.pa_mode=0 // selects high power PA if available
4.2.8 ソフトウェア・タイマ
使用可能なソフトウェア・タイマの最大数を構成できます。各タイマは、実装するスタックからのリソースを必要とします。使用事例
によっては、ソフト・タイマの数が増えると性能が低下する場合があります。
.max_timers = 4; // Maximum number of soft timers, up to 16, Default: 4
4.2.9 RF 経路
ゲイン
アプリケーションは、RX TX RF パス・ゲイン値を個別に定義することができます。
Bluetooth スタックは、トランスミッタ電力を調整するときに TX RF パス・ゲインを考慮します。これにより、アンテナから放射され
る電力がアプリケーション要求と一致します。たとえばアプリケーションによって要求される最大電力が +10 dBm であり、パス・
ロスが -1 dBm である場合、ピンでの実際の電力は +11 dBm になります。
Bluetooth スタックからの RSSI レポートを補償するために、RX RF パス・ゲインが使用されます。
.rf.tx_gain = -20; // RF TX path gain in unit of 0.1 dBm .rf.rx_gain = -18; // RF RX path gain in unit of 0.1 dBm
出力の選択
EFR32XG21 SoC ベース設計では、RF 出力を選択できます。
.rf.flags = GECKO_RF_CONFIG_ANTENNA; // enabling output configuration .rf.antenna = 0; // desired output,
正しい値については、RAIL ヘッダ・ファイル rail_chip_specific.h のアンテナ経路の選択を参照してください。
UG136Silicon Labs Bluetooth
®
C アプリケーション開発者ガイド
Bluetooth スタックと Wireless Gecko デバイスの構成
silabs.com | Building a more connected world. Rev. 1.7 | 20
  • Page 1 1
  • Page 2 2
  • Page 3 3
  • Page 4 4
  • Page 5 5
  • Page 6 6
  • Page 7 7
  • Page 8 8
  • Page 9 9
  • Page 10 10
  • Page 11 11
  • Page 12 12
  • Page 13 13
  • Page 14 14
  • Page 15 15
  • Page 16 16
  • Page 17 17
  • Page 18 18
  • Page 19 19
  • Page 20 20
  • Page 21 21
  • Page 22 22
  • Page 23 23
  • Page 24 24
  • Page 25 25
  • Page 26 26
  • Page 27 27
  • Page 28 28
  • Page 29 29
  • Page 30 30
  • Page 31 31
  • Page 32 32
  • Page 33 33

Silicon Labs UG136: Bluetooth ® C アプリケーション開発者ガイド(SDK v2.x用) ユーザーガイド

タイプ
ユーザーガイド