安全で低電力のBluetoothハブとセンサネットワークを構築
DigiKeyの北米担当編集者の提供
2018-07-31
Bluetoothは、モバイルデバイスで広く利用できるため、消費者がスマート製品に簡単にワイヤレスアクセスできるようにするのに最適です。ただし、IoT開発者がBluetoothで接続されたセンサネットワークを構築する場合は、バッテリの寿命の最大化、Bluetoothプロトコルの最適化、デバイス間の安全な接続の確保など、さまざまな課題があります。
この記事で示すように、Cypress Semiconductorが提供する高度なBluetoothデバイスと関連する開発環境を使用すると、開発者はこれらの問題を迅速に解決し、安全なBluetoothハブセンサネットワークを短時間で実装できます。
Bluetoothを使用する理由
Bluetoothは、スマートフォンや他のモバイルデバイスによって広範にサポートされているため、消費者をウェアラブル機器や医療機器などのパーソナル電子機器と接続するための望ましいワイヤレステクノロジになっています。Bluetooth 5の出現により、IoT開発者は、センサネットワークや他のIoTアプリケーションに対していっそう厳しくなる長距離性や高データレートの要件を満たしながら、上記のような利点を利用できます。
増加しているBluetooth 5対応デバイスを利用して、これらのアプリケーションを設計できます。完全なRFサブシステムとプロセッサコアを組み合わせることで、これらのデバイスはBluetooth通信に関連する低レベルのトランザクションを実行できます。さらに、低電力消費量を維持し、IoTネットワークの安全な接続を確保する必要性により、これらのアプリケーションへのBluetoothの展開はいっそう複雑になる可能性があります。
統合型ソリューション
Cypress SemiconductorのCYW20719は、IoT、ウェアラブル機器、パーソナル電子機器、他の低電力アプリケーション向けのバッテリ駆動Bluetooth接続設計に対する拡大する要件を満たすように特に設計されています。低電力機能に加えて、適応型周波数ホッピングなどのBluetooth 5の高度な機能をサポートし、これらのアプリケーションに関連するビジーな無線環境において重要な利点を提供します。
このデバイスには、低電力のBluetooth無線サブシステム(浮動小数点演算ユニット(FPU)を備えたArm® Cortex®-M4コア)と複数の周辺機器ブロックが統合されています(図1)。さらに、オンチップのセキュリティエンジンが公開鍵暗号化を高速化し、Bluetooth動作のセキュリティ確保に必要な重要な暗号機能を提供します。最後に、オンチップの電源管理ユニット(PMU)では、Bluetooth対応デバイスに対する要求が高まっている超低電力動作の要件を満たすための柔軟なメカニズムが開発者に提供されます。
図1:Cypress SemiconductorのCYW20719は、Arm® Cortex®-M4、完全なBluetoothサブシステム、組み込みのソフトウェアサービスを組み合わせて、低電力設計のための完全なBluetooth 5対応ワイヤレスMCUを提供します。(画像提供:Cypress Semiconductor)
CYW20719無線システムには、送信(Tx)動作と受信(Rx)動作のための完全な2.5GHz RF信号パスが含まれます。Rx信号パスの場合、このデバイスにより帯域外信号が減衰されて、-95.5dBmのRx感度が実現され、必要に応じてオフチップフィルタを追加しないでデバイスを使用できます。Tx信号パスには、-24dBmから最大+4dBmまでの範囲の構成可能な送信電力レベルをサポートするように設計された統合型電力増幅器(PA)が含まれます。統合された物理レイヤ(PHY)機能とともに、デバイスには完全なオンチップのBluetooth 5メディアアクセスコントロール(MAC)レイヤが含まれます。最適化されたRxおよびTx信号パスにより、デバイスの電流はわずか5.9mA Rxまたは5.6mA(@ 0dBm)Txです。
電力消費をさらに減らすため、統合された電源管理ユニット(PMU)によって管理される複数の電力モードが提供されています。RF電源ドメインとデジタル電源ドメインを個別に供給するように設計されたPMUでは、統合型降圧レギュレータ、デジタル回路用低ドロップアウト(LDO)レギュレータ、および独立したRF回路用LDOが組み合わされています(図2)。さらに、PMUには、ソースVBAT供給が2.1ボルトより低下した場合にデジタルおよびRF LDOを供給するために、降圧レギュレータを自動的にバイパスする独立したバイパスLDO(BYPLDO)が含まれます。
図2:CypressのCYW20719 PMUが管理する独立した電源ドメインは、異なる低電力モードで選択的に無効にして、低電力設計での電流消費を減らすことができます。(画像提供:Cypress Semiconductor)
動作中のPMUは、選択された電力モードに従って電源ドメインを調整できます。電力モードには、完全アクティブモード、アイドルモード、3種類のスリープモードが含まれます。最低電力のシャットダウンスリープ(SDS)モードのPMUでは、I/O電源、リアルタイムクロック(RTC)、および一部のブロックとウェークアップタイミングのためのクロックソースとして使用される専用低電力発振器(LPO)を除く、すべてのデバイスブロックがオフになります。
使用されるリソースは最小限であっても、SDSモードのCYW20719は、それ以前にペアになっていた別のBluetoothデバイスとの接続を維持でき、そのプロセスでの消費電力は70マイクロアンペア(μA)未満です。ただし、このモードではデバイスはメモリを維持しないので、より複雑な操作を行う前に状態を復元するためのウォームブートが必要です。他の2つのスリープモードである電源オフスリープ(PDS)とスリープ状態では、維持されるデバイスアクティビティ(メモリの保持を含みます)のレベルが高くなり、それに比例して電力消費が増加します。その場合でも、消費できる電力が非常に限られている開発者は、低電力のBluetoothアドバタイジング(約125μA)とアクティブ接続(約170μA)に対してPDSモードを利用できます。デバイスの電力モードを管理することにより、開発者は機能を損なうことなく超低電力動作を簡単に実現できます。
システム統合
柔軟な動作モードと広範な機能を備えてはいても、システム設計での完全なハードウェア統合のためにCYW20719で必要な追加コンポーネントの数はわずかです。重要なコンポーネントはチップに統合されているため、追加する必要があるのは、いくつかの抵抗器、結合コンデンサ、2.2µHのインダクタ(MurataのLQH2MCN2R2M52Lなど)、フェライトビーズ(MurataのBLM15AG601SN1Dなど)だけです(図3)。それでも、CYW20719とアンテナマッチングコンポーネントの間にバンドパスフィルタを配置してハーモニクスを減らすことをお勧めします。
図3:CypressのCYW20719には重要な機能がすべて統合されているので、ハーモニクス低減のために推奨されるバンドパスフィルタを含む少数のコンポーネントを追加するだけで、ハードウェアの統合を完成できます。(図提供:Cypress Semiconductor)
このデバイスは、1MBのフラッシュ、512KBのRAM、2MBのROMを含む拡張オンチップメモリを備えているため、ソフトウェアの統合も同じように簡単です。フラッシュとRAMはアプリケーションのためのメモリ領域を開発者に提供するのに対し、オンチップのROMはデバイスのファームウェアとBluetoothのプロファイルのために確保されています。ファームウェアのパッチが必要なときのために、パッチRAMが用意されています。これは、パッチ制御ロジックを介して接続されているRAMの領域です(上の図1を参照)。最後に、デバイスには常時オン(AON)メモリ領域が用意されており、SDSなどの低電力モードでもデバイスはデータを保存できます。この機能がないと、揮発性メモリはオフになります。
チップ上で提供されるRAMとフラッシュメモリは、他の最先端のデバイスと比較すると制限があるように見えるかもしれませんが、ROMに内蔵された拡張ソフトウェアサポートにより、一般的なアプリケーションには十分な量のメモリが提供されます。Cypressにより、オンチップのROMには、最低レベルのハードウェア抽象化レイヤ(HAL)から、WICED(Wireless Internet Connectivity for Embedded Devices)環境用のアプリケーションプログラミングインターフェース(API)まで、包括的なソフトウェアスタックが構成されています(図4)。
図4:CypressのCYW20719の2MBのROMファームウェアでは、リアルタイムオペレーティングシステムを含む完全なソフトウェアスタックが提供されているため、開発者のアプリケーションコードの複雑さとフットプリントが軽減されます。(画像提供:Cypress Semiconductor)
HAL上に構築されたROMファームウェアは、組み込まれているリアルタイムオペレーティングシステムを実行し、CYW20719ハードウェアとのすべてのやり取りを処理します。同時に、ROMのファームウェアには、基本的なBluetooth Generic Attribute Profile(GATT)や汎用アクセスプロファイル(GAP)をサポートするものなど、Bluetoothサービスレイヤが完備されています。
一般的なアプリケーションでは、開発者のコードはWICED APIを使用してRAMから実行され、RTOS、周辺機器、および他のデバイス機能にアクセスします。必要なRAMの量には大きな違いがありますが、CYW20719用のほとんどのアプリケーションコードでは、通常、データや作業メモリ用に十分な量の空きRAMが残ります。たとえば、後で説明するhello_sensorアプリケーションでは、約240KBのRAMが空いています。
ただし、コードベースが非常に大きいアプリケーションの場合は、オンチップフラッシュからexecute in-place(XIP)するように設計されているアプリケーションコードを処理するCYW20719の機能を利用できます。その場合、WICED環境は、開発者が指定したコードと読み取り専用のデータセクションをオンチップのフラッシュにロードし、残りのセクションをRAMに配置します。この方法では、アプリケーション用のRAMのフットプリントは確かに減りますが、パフォーマンスに影響する可能性があります。したがって、XIPコードセクションを指定するときは注意しなければならず、タイムクリティカルな機能はRAMに配置する必要があります。
アプリケーションの開発
CYW20719では設計の統合が簡素化されますが、開発者の関心が安全な低電力Bluetoothアプリケーションにある場合は、やはり、ハードウェアの設計とアプリケーションの開発にかなりの時間がかかることがあります。CYW20719ベースのアプリケーションのデモンストレーション用に設計されたCypressのCYW920719Q40EVB-01評価キットは、CypressのWICEDソフトウェア環境で動作し、Bluetooth 5.0に準拠するIoTアプリケーションを作成するための参照設計と包括的な開発プラットフォームを提供します。
評価キットの基になっているキャリアモジュールには、図3の設計のCYW20719が含まれ、リセットを実行するためにCYW20719のRST_Nピンに接続されたTorex SemiconductorのXC6119N電圧検出器が追加されています。キャリアモジュールはキットのベースボードにはんだ付けされており、STMicroelectronicsのLSM9DS1TR 9軸モーションセンサ、MurataのNCUシリーズNTCサーミスタ、CYW20719 GPIOポート、デバッグ接続、拡張用Arduino互換ヘッダ、および簡単なユーザーインターフェースとしてのスイッチとLEDが含まれています(図5)。
図5:CypressのCYW920719Q40EVB-01評価キットでは、一般的なIoTアプリケーションをサポートできるキャリアモジュールと複数のベースボードコンポーネントに、CYW20719が組み込まれています。(画像提供:Cypress Semiconductor)
Cypress提供のサンプルソフトウェアでは、複数のセンサデバイスと中央ハブで構成される代表的なIoTネットワークでの安全なBluetooth接続の広範なデモンストレーションの一部として、CYW20719および他のコンポーネントが使用されています(図6)。このサンプルアプリケーションを使用して、開発者は、センサデバイスとハブの間のペアリングに対するさまざまなセキュリティレベルを調査し、データの交換に対するこれらのセキュリティレベルの影響を評価できます。
図6:複数のCYW920719Q40EVB-01キットとCypressのWICED開発環境で動作するように設計されているCypressのサンプルアプリケーションは、代表的なIoTアプリケーションでの安全なBluetooth接続をデモンストレーションします。(画像提供:Cypress Semiconductor)
アプリケーションのハードウェアについては、開発者は、セキュアハブとして独立して構成されたCYW920719Q40EVB-01キットと、ネットワーク内の個別センサとして構成された追加キットを使用します。各キットにシリアル接続経由でリンクされたPCが、パラメーターの設定、データの表示、デバッグメッセージの出力、およびサンプルアプリケーションとのそれ以外のやり取りのためのコンソールを提供します。
このサンプルアプリケーションには含まれていませんが、このような一般的なアプリケーションに残っている唯一の要素は、アプリケーションの監視と制御の機能のためのモバイルデバイスへの接続です。ここでは、シリアル接続されたPCが、ほとんど同じ機能を提供します。
Cypressは、このサンプルアプリケーション用のソフトウェアを、WICED開発環境用のCYW20917 BLE Secure Hub C言語パッケージにバンドルしています。この場合、パッケージにはサンプルアプリケーションでの2つの異なる役割のための2つのプロジェクトが含まれます。セキュアハブとして指定されたキット上で実行するように設計された1つのプロジェクト(secure_hub)により、ハブはBluetoothプロトコルの複数の役割をサポートできます。具体的には、ハブのソフトウェアは、スレーブとして動作する異なるキットと独立したセキュリティレベルでペアリングできるように設計されています。
スレーブとして構成されたキットは、ペアリングの間に確立されるセキュリティレベルでのデータ収集と通信を示すように設計されたセンサプロジェクト(hello_sensor)を実行します。各プロジェクトには、各機能の役割をサポートするために必要な複数のヘッダとコードモジュールが含まれます。このようなファイルの一部として、secure_hubプロジェクトとhello_sensorプロジェクトのそれぞれに、Generic Attribute Profile(GATT)のヘッダ(gatt_db.h)ファイルとコード(gatt_db.c)ファイルが含まれます。
Bluetoothプロトコルでは、GATTデータベース(DB)と呼ばれるルックアップテーブルで、それぞれがサポートされる特性のセットで構成される定義済みのサービスのセットによって、Bluetoothの接続の特性と機能が定義されています。たとえば、Bluetoothの仕様には、アラート通知やデバイス情報などのユーティリティ機能から、血圧サービスやパルスオキシメータサービスなどのアプリケーション固有機能まで、あらかじめ定義されたGATTサービスが含まれます。GATTサービスよりさらに基本的な役割を提供する、デバイスのBluetooth汎用アクセスプロファイル(GAP)では、ネットワークによる検出のためにデバイス自体をアドバタイズする方法と、検出後に接続を確立する方法が定義されています。
secure_hubプロジェクトとhello_sensorプロジェクトのgatt_db.hヘッダおよびgatt_db.cコードでは、セキュアハブ用およびセンサ用にそれぞれ構成されたキットに対するGAPサービスとGATTサービスが定義されています。このデモンストレーション用アプリケーションの各プロジェクトでは、その役割に従ってカスタムGATTサービスが定義されています。たとえば、hello_sensorプロジェクトのヘッダには、GATTおよびGAPサービスの必須ハンドルを定義するC enum型と、センササービス用のカスタムGATT定義が含まれます(リスト1a)。次に、そのプロジェクトのgatt_db.cファイルでは、これらの定義を使用して、Bluetoothプロトコルで必要なGATT DBが作成されています(リスト1b)。
コピーする
typedef enum
{
HANDLE_HSENS_GATT_SERVICE = 0x1, // サービスハンドル
HANDLE_HSENS_GAP_SERVICE = 0x14, // サービスハンドル
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME, // 特性ハンドル
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL, // 特性値ハンドル
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE, // 特性ハンドル
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,// 特性値ハンドル
HANDLE_HSENS_SERVICE = 0x28,
HANDLE_HSENS_SERVICE_CHAR_UART, // 特性ハンドル
HANDLE_HSENS_SERVICE_CHAR_UART_VAL, // 特性値ハンドル
HANDLE_HSENS_SERVICE_CHAR_CFG_DESC, // 特性構成記述子ハンドル
HANDLE_HSENS_SERVICE_CHAR_BLINK, // 特性ハンドル
HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL, // 特性値ハンドル
HANDLE_HSENS_SERVICE_CHAR_TEMP, // 特性ハンドル
HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL, // 特性値ハンドル
HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC, // 特性構成記述子ハンドル
(A)
コピーする
/* カスタム特性の権限 */
#define LED_BLINK_CHAR_PERMISSION LEGATTDB_PERM_WRITE_REQ | LEGATTDB_PERM_AUTH_WRITABLE | LEGATTDB_PERM_READABLE
#define TEMP_CHAR_PERMISSION LEGATTDB_PERM_READABLE
#define UART_CHAR_PERMISSION LEGATTDB_PERM_READABLE
uint8_t paired_security_level;
static void temp_notificaition_timeout( uint32_t count );
const uint8_t hello_sensor_gatt_database[]=
{
// 必須GATTサービス宣言
PRIMARY_SERVICE_UUID16( HANDLE_HSENS_GATT_SERVICE, UUID_SERVICE_GATT ),
// 必須GAPサービス宣言デバイス名と外観は必須
// GAPサービスの特性
PRIMARY_SERVICE_UUID16( HANDLE_HSENS_GAP_SERVICE, UUID_SERVICE_GAP ),
// 必須GAPサービス特性の宣言:Dev Name
CHARACTERISTIC_UUID16( HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME, HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL,
UUID_CHARACTERISTIC_DEVICE_NAME, LEGATTDB_CHAR_PROP_READ, LEGATTDB_PERM_READABLE ),
// 必須GAPサービス特性の宣言:Appearance
CHARACTERISTIC_UUID16( HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE, HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,
UUID_CHARACTERISTIC_APPEARANCE, LEGATTDB_CHAR_PROP_READ, LEGATTDB_PERM_READABLE ),
// 独自のHello Serviceの128バイトUUIDの宣言
PRIMARY_SERVICE_UUID128( HANDLE_HSENS_SERVICE, UUID_HELLO_SERVICE ),
// 変更の通知/指示に使用される特性の宣言
CHARACTERISTIC_UUID128( HANDLE_HSENS_SERVICE_CHAR_UART, HANDLE_HSENS_SERVICE_CHAR_UART_VAL,
UUID_HELLO_CHARACTERISTIC_NOTIFY, LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_INDICATE, UART_CHAR_PERMISSION ),
// クライアント特性構成記述子の宣言
// 記述子の値はクライアントで変更可能
// 変更された値は、結合デバイスのために接続中および接続の期間を通じて
// 保持する必要がある。値を1に設定すると、特性値が変化したら通知を送信するよう
// このアプリケーションに指示する。値2は指示を許可する。
CHAR_DESCRIPTOR_UUID16_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_CFG_DESC, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,
LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ ),
// 特性Hello Configurationの宣言
// 構成は1バイトからなり、ユーザーがボタンを押したときの
// LEDの点滅回数を示す。
CHARACTERISTIC_UUID128_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_BLINK, HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL,
UUID_HELLO_CHARACTERISTIC_LED_BLINK,
LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE,
LED_BLINK_CHAR_PERMISSION ),
CHARACTERISTIC_UUID128( HANDLE_HSENS_SERVICE_CHAR_TEMP, HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL,
UUID_HELLO_CHARACTERISTIC_TEMP, LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_INDICATE, TEMP_CHAR_PERMISSION ),
// クライアント特性構成記述子の宣言
// 記述子の値はクライアントで変更可能
// 変更された値は、結合デバイスのために接続中および接続の期間を通じて
// 保持する必要がある。値を1に設定すると、特性値が変化したら通知を送信するよう
// このアプリケーションに指示する。値2は指示を許可する。
CHAR_DESCRIPTOR_UUID16_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,
LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ ),
(B)
リスト1:CypressのBLE Secure Hubアプリケーションのhello_sensorプロジェクトに含まれるヘッダファイルでは、対応するコードモジュールでBluetoothの動作に必要なGATT DBを作成するために使用される、さまざまな特性(A)用のenum型が定義されています。(コード提供:Cypress Semiconductor)
これらの定義に埋め込まれているGATTセンササービスでは、基になっているサービス特性で(接続されているコンソールを使用して)読み取り、書き込み、通知、指示が可能かどうかも定義されています。たとえば、LED点滅特性(リスト1aで宣言されていてリスト1bで適用されるHANDLE_HSENS_SERVICE_CHAR_BLINK
)には、その特性が読み取り可能かつ書き込み可能であることを示すビットマスク(リスト1bのLEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE
)が含まれます。
ただし、hello_sensorプロジェクトのgatt_db.cファイルでは、これらの定義と、その特性への安全なアクセスを実装するコードが組み合わされています。つまり、開発者によってコンソールに入力された文字によって示される回数だけLEDを点滅させる機能です。このサンプルアプリケーションの目的のため、この機能にアクセスするには、ペアリングの間にコンソールを使用してユーザーが入力したパスキーを使用して、そのセンサキットへの接続がBluetoothの中間者(MITM)ペアリングで行われている必要があります。
一般に、何らかの機能を呼び出す要求が行われると、対応するハンドラが、定義されている特性と安全なアクセスの要件を考慮して、アプリケーション固有のタスクを実行します。LED点滅の例では、LED点滅機能の実行要求が行われるときは、権限を確認してアクセスを承認するための実際のコードだけで十分です。
LED点滅特性の値(HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL
)を変更するには、書き込み権限とアクセス承認の両方を確認する条件ステートメントをコードで使用します(リスト2)。書き込み権限の場合の条件では、要求された権限(LEGATTDB_PERM_AUTH_WRITABLE
)と、実際のLEDデバイスの点滅権限の設定LED_BLINK_CHAR_PERMISSION
(リスト1bの先頭で定義されています)を比較します。承認の場合の条件では、現在ペアリングされているセキュリティレベル(paired_security_level
)がMITMペアリング(BTM_SEC_LINK_PAIRED_WITH_MITM
)で作成されたものであることを確認します(リスト2)。
コピーする
/*
* ピアデバイスからの書き込み要求または書き込みコマンドを処理する
*/
wiced_bt_gatt_status_t hello_sensor_gatts_req_write_handler( uint16_t conn_id, wiced_bt_gatt_write_t * p_data )
{
wiced_bt_gatt_status_t result = WICED_BT_GATT_SUCCESS;
uint8_t *p_attr = p_data->p_val;
uint8_t sec_flag, key_size;
WICED_BT_TRACE("write_handler: conn_id:%d hdl:0x%x prep:%d offset:%d len:%d\r\n ", conn_id, p_data->handle, p_data->is_prep, p_data->offset, p_data->val_len );
switch ( p_data->handle )
{
.
.
.
case HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC:
if ( p_data->val_len != 2 )
{
return WICED_BT_GATT_INVALID_ATTR_LEN;
}
WICED_BT_TRACE( "Temp Notif Enabled\r\n");
hello_sensor_hostinfo.temp_characteristic_client_configuration = p_attr[0] | ( p_attr[1] << 8 );
break;
case HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL:
if ( p_data->val_len != 1 )
{
return WICED_BT_GATT_INVALID_ATTR_LEN;
}
if ((!(paired_security_level & BTM_SEC_LINK_PAIRED_WITH_MITM))&& (LED_BLINK_CHAR_PERMISSION & LEGATTDB_PERM_AUTH_WRITABLE))
{
WICED_BT_TRACE("Write Failed: Insufficient Authentication\r\n");
return WICED_BT_GATT_INSUF_AUTHENTICATION;
}
hello_sensor_hostinfo.number_of_blinks = p_attr[0];
if ( hello_sensor_hostinfo.number_of_blinks != 0 )
{
WICED_BT_TRACE( "hello_sensor_write_handler:num blinks: %d\r\n", hello_sensor_hostinfo.number_of_blinks );
wiced_bt_app_hal_led_blink(250, 250, hello_sensor_hostinfo.number_of_blinks );
}
break;
default:
result = WICED_BT_GATT_INVALID_HANDLE;
break;
}
return result;
}
リスト2:CypressのBLE Secure Hubアプリケーションのこのスニペットでは、LED点滅特性を実行する要求は最初に、権限とセキュリティ承認のためのチェック(強調表示部分)を渡す必要があります。(コード提供:Cypress Semiconductor)
GATT DBの定義と、センサプロジェクトおよびハブプロジェクトに対する適切なサポートコードを使用して、このサンプルアプリケーションは開発者に、3つの異なるセキュリティレベル(任意のレベルのペアリング、ここで説明するMITMペアリング、およびBluetooth LEセキュアペアリング)に関連する基本的な設計パターンを提供します。最後のペアリング方法では、楕円曲線Diffie-Hellman(ECDH)鍵交換に基づく認証方法を使用して、最高のセキュリティが提供されます。CYW20719の統合されているセキュリティエンジンにはECDHアクセラレータが含まれるので、パフォーマンスを損なうことなくこの方法を展開できます。
まとめ
統合されたBluetooth対応のワイヤレスMCUが利用できることは、開発者にとってこれらのデバイスを設計に統合する時間を短縮するのに役立ちます。ただし、開発者が安全なBluetoothネットワークを実装しようとすると、Bluetooth対応のサービスを作成し、それらのデバイスを安全に使用できるアプリケーションを記述するときに、いくつもの困難に直面します。
CypressのCYW20719 Bluetooth MCUに基づくCypress SemiconductorのCYW920719Q40EVB-01キット(Bluetooth評価キット)とWICED開発環境では、これらのアプリケーションを構築するための包括的なプラットフォームが提供されます。キットおよびWICED環境をCypressのBLE Secure Hubパッケージと組み合わせて使用すると、開発者は安全なBluetoothアプリケーションをすばやく評価し、Bluetooth 5の強化された速度と範囲を利用できるカスタムアプリケーションに短時間で拡張できます。

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。