Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

BLE L2CAP フレームの生成および復号化

この例では、通信工具箱™图书馆为蓝色tooth® Protocol を使用して、Bluetooth® Low Energy L2CAP フレームを生成および復号化する方法を説明します。

背景

Bluetooth コア仕様 [1] には、Bluetooth Low Energy (BLE) または Bluetooth Smart と呼ばれる、低レート無線パーソナル エリア ネットワーク用の低エネルギー (LE) バージョンが含まれています。BLE スタックは以下で構成されます。汎用属性プロファイル (GATT)、属性プロトコル (ATT)、セキュリティ マネージャー プロトコル (SMP)、論理リンク制御およびアダプテーション プロトコル (L2CAP)、リンク層および物理層。BLE は、ホーム オートメーション、ヘルス ケア、フィットネス、およびモノのインターネット (IoT) などの用途で使用される通知アラートのような少量のデータを生成する低エネルギー デバイス用の規格に追加されました。

BLE における L2CAP 層は、OSI 参照モデルにおけるデータ リンク層の上位サブ層、すなわち論理リンク制御 (LLC) に対応します。L2CAP は BLE の PHY およびリンク層の上にあります。BLE 仕様では、従来の Bluetooth と比較して、L2CAP が最適化および簡略化されています。

BLE のL2CAPには、次の役割があります。(i)論理接続の確立(ii)プロトコルの多重化(iii)セグメンテーションと再構築(iv)'動的' L2CAP チャネルごとのフロー制御。

L2CAP 層は、上位層のペイロードに L2CAP 基本ヘッダーを追加し、下のリンク層にプロトコル データ ユニット (PDU) を渡します。

L2CAP フレーム

L2CAP フレームは 2 つのサブカテゴリで構成されます。データ フレーム信号フレーム。この 2 つのフレームのカテゴリ内に、さまざまなタイプのフレームがあります。"データ フレーム"は、さらにサブカテゴリの "B フレーム"(基本情報フレーム) と "LE フレーム"(低エネルギー情報フレーム) に分類されます。各フレーム タイプに独自の形式があります。

チャネル識別子 (CID)は、デバイス上の論理チャネル エンドポイントを表すローカル名です。ATT や SMP などのプロトコルでは、これらのチャネルは Bluetooth Special Interest Group (SIG) により "固定"されています。Internet Protocol Support Profile (IPSP) や Object Transfer Profile (OTP) などのアプリケーション固有のプロファイルの場合、これらのチャネルは "動的に"割り当てられます。

信号フレームは、信号チャネル ('0005') と呼ばれる固定論理チャネルと共に使用され、LE クレジット ベースのフロー制御メカニズムを使用したピア デバイス間の論理接続の確立に使用されます。これらの信号フレームは、接続パラメーターの要求手続きがリンク層でサポートされていない場合に、接続パラメーター (スレーブ レイテンシ、接続タイムアウト、最小接続間隔および最大接続間隔) を更新するためにも使用されます。

データ フレーム (B フレームおよび LE フレーム)は、そのフレーム形式の '情報ペイロード' として上位層のペイロードを伝送します。"B フレーム"は、固定チャネル (それぞれ固定論理チャネルに'0004'および'0006'をもつ ATT と SMP) のペイロードを伝送するために使用されます。"LE フレーム"は、IPSP や OTP などの、アプリケーション固有のプロファイル用に動的に作成された論理チャネルを介してペイロードを伝送するために使用されます。

この例では、以下のフレームの生成と復号化について説明します。サポートされている他の信号フレームの一覧については、bleL2CAPFrameConfigオブジェクトのCommandTypeプロパティを参照してください。

1.フロー制御クレジット: この信号フレームは、2 つのデバイス間の L2CAP 論理チャネルを作成および構成するために送信されます。

2.固定チャネル (ATT や SMP など) 上の B フレーム: このフレームは、基本 L2CAP モードで固定チャネルのペイロードを伝送するために使用されます。

3.動的チャネル (IPSP や OTP などのプロファイル) 上の LE フレーム: このフレームは、LE クレジット ベースのフロー制御モードで動的チャネルのペイロードを伝送するために使用されます。

サポート パッケージのインストールの確認

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'% support package is installed or not.commSupportPackageCheck('BLUETOOTH');

L2CAP フレームの生成

関数bleL2CAPFrameを使用して、L2CAP フレームを生成できます。この関数は構成オブジェクトbleL2CAPFrameConfigを受け入れます。このオブジェクトは、L2CAP フレームを生成するために必要なフィールドを構成します。

信号フレームの生成

信号フレームを生成するには、ChannelIdentifier'0005'に設定してbleL2CAPFrameConfigオブジェクトを作成します。

cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier','0005');

フィールドを構成します。

% Command typecfgL2CAP.CommandType ='Flow control credit';% Source channel identifiercfgL2CAP.SourceChannelIdentifier ='0041';% LE creditscfgL2CAP.Credits = 25
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0005' CommandType: 'Flow control credit' SignalIdentifier: '01' SourceChannelIdentifier: '0041' Credits: 25 Read-only properties: No properties.

'フロー制御クレジット' コマンドを生成します。

sigFrame = bleL2CAPFrame(cfgL2CAP);

B フレームの生成

(ATT PDU を伝送する) B フレームを生成するには、ChannelIdentifier'0004'(ATT チャネル ID) に設定してbleL2CAPFrameConfigオブジェクトを作成します。

cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier','0004')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0004' Read-only properties: No properties.

B フレームは、ATT 上位層からのペイロードを送信するために使用されます。この例では、ペイロードとして 5 バイトの ATT PDU が使用されています。

payload = ['04';'01';'00';'FF';'FF'];

ペイロードと構成を使用して L2CAP B フレームを生成します。

bFrame = bleL2CAPFrame (cfgL2CAP、载荷);

LE フレームの生成

LE フレームを生成するには、ChannelIdentifier'0035'に設定してbleL2CAPFrameConfigオブジェクトを作成します。

cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier','0035')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0035' Read-only properties: No properties.

LE フレームは、動的チャネルのペイロードを送信するために使用されます。この例では、2 バイトのペイロードが使用されています。

payload = ['01';'02'];

ペイロードと構成を使用して L2CAP LE フレームを生成します。

leFrame = bleL2CAPFrame(cfgL2CAP, payload);

L2CAP フレームの復号化

関数bleL2CAPFrameDecodeを使用して、L2CAP フレームを復号化できます。この関数は、以下の情報を出力します。

  1. status:L2CAP の復号化が成功したかどうかを示す、タイプblePacketDecodeStatusの列挙値。

  2. cfgL2CAP:復号化された L2CAP プロパティを含む、タイプbleL2CAPFrameConfigの L2CAP フレーム構成オブジェクト。

この関数は BLE L2CAP フレームを入力として受け入れます。

信号フレームの復号化

[sigFrameDecodeStatus, cfgL2CAP] = bleL2CAPFrameDecode(sigFrame);% Observe the outputs%解码是年代uccessfulif比较字符串(sigFrameDecodeStatus'Success') fprintf('L2CAP decoding status is: %s\n\n', sigFrameDecodeStatus); fprintf('Received L2CAP signaling frame configuration is:\n'); cfgL2CAP% Decoding failedelsefprintf('L2CAP decoding status is: %s\n', sigFrameDecodeStatus);end
L2CAP decoding status is: Success Received L2CAP signaling frame configuration is: cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0005' CommandType: 'Flow control credit' SignalIdentifier: '01' SourceChannelIdentifier: '0041' Credits: 25 Read-only properties: No properties.

B フレームの復号化

[bFrameDecodeStatus, cfgL2CAP, payload] = bleL2CAPFrameDecode(bFrame);% Observe the outputs%解码是年代uccessfulifstrcmp(bFrameDecodeStatus,'Success') fprintf('L2CAP decoding status is: %s\n\n', bFrameDecodeStatus); fprintf('Received L2CAP B-frame configuration is:\n'); cfgL2CAP fprintf('Payload carried by L2CAP B-frame is:\n'); payload% Decoding failedelsefprintf('L2CAP decoding status is: %s\n', bFrameDecodeStatus);end
L2CAP decoding status is: Success Received L2CAP B-frame configuration is: cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0004' Read-only properties: No properties. Payload carried by L2CAP B-frame is: payload = 5x2 char array '04' '01' '00' 'FF' 'FF'

LE フレームの復号化

[leFrameDecodeStatus, cfgL2CAP, payload] = bleL2CAPFrameDecode(leFrame);% Observe the outputs%解码是年代uccessfulifstrcmp(leFrameDecodeStatus,'Success') fprintf('L2CAP decoding status is: %s\n\n', leFrameDecodeStatus); fprintf('Received L2CAP LE-frame configuration is:\n'); cfgL2CAP fprintf('Payload carried by L2CAP LE-frame is:\n'); payload% Decoding failedelsefprintf('L2CAP decoding status is: %s\n', leFrameDecodeStatus);end
L2CAP decoding status is: Success Received L2CAP LE-frame configuration is: cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0035' Read-only properties: No properties. Payload carried by L2CAP LE-frame is: payload = 2x2 char array '01' '02'

PCAP ファイルへのエクスポート

この例では、blePCAPWriterオブジェクトを使用して、生成された PDU を、拡張子 .pcap または拡張子 .pcapng をもつファイルにエクスポートします。このファイルを解析して可視化するには、Wireshark などのサードパーティ製パケット アナライザーを使用します。

PCAP 形式では、L2CAP フレームがリンク層パケットで囲まれ、生成されたパケットの先頭にアクセス アドレスが追加されることが想定されています。補助関数helperBLEPrependAccessAddressは、生成されたパケットの先頭にアクセス アドレスを追加します。次のコマンドは、この例で生成された L2CAP フレーム用の PCAP ファイルを生成します。

% Create a cell array of L2CAP framesl2capFrames = {sigFrame, bFrame, leFrame}; llPackets = cell(1, numel(l2capFrames));fori = 1:numel(llPackets)% Add Link Layer header to the generated L2CAP framecfgLLData = bleLLDataChannelPDUConfig('LLID','Data (start fragment/complete)'); llDataPDU = bleLLDataChannelPDU(cfgLLData, l2capFrames{i});% Prepend access address. A 4-byte access address is used in this examplellPackets{i} = helperBLEPrependAccessAddress(llDataPDU,'01234567');end

PCAP ファイルへのエクスポート

blePCAPWriter型のオブジェクトを作成し、パケット キャプチャ ファイルの名前を指定します。

% Create the BLE PCAP Writer file objectpcapObj = blePCAPWriter("FileName","BLEL2CAPFrames");

関数writeを使用して、すべての BLE LL PDU を PCAP ファイルに書き込みます。定数timestampは PDU のキャプチャ時間を指定します。この例では、キャプチャ時間はすべての PDU で同一です。

timestamp = 124800;% timestamp (in microseconds)% Write all the LL PDUs to the PCAP fileforidx = 1:numel(llPackets) write(pcapObj, llPackets{idx}, timestamp,"PacketFormat","bits");end% Clear the object清晰的pcapObj;

生成された L2CAP フレームの可視化

生成された L2CAP フレームを含む PCAP ファイルをパケット アナライザーで開くことができます。パケット アナライザーによって復号化された L2CAP フレームは、Communications Toolbox™ Library for the Bluetooth Protocol によって生成された規格準拠の L2CAP フレームと一致します。取得された L2CAP フレームの解析を以下に示します。

  • 信号フレーム (フロー制御クレジット)

  • (ATT PDU を伝送する) B フレーム

  • (動的チャネルのペイロードを伝送する) LE フレーム

まとめ

この例では、Bluetooth [1] 規格で指定されている L2CAP フレームの生成と復号化について説明しました。パケット アナライザーを使用して、生成された L2CAP フレームを表示できます。

付録

この例で使用している機能は次のとおりです。

この例で使用している補助関数は次のとおりです。

参考文献

  1. Bluetooth® Technology Website."Bluetooth Technology Website | The Official Website of Bluetooth Technology."Accessed July 8, 2020.https://www.bluetooth.com/

  2. "Development/LibpcapFileFormat - The Wireshark Wiki."Accessed July 8, 2020.https://wiki.wireshark.org/Development/LibpcapFileFormat

  3. Group, The Tcpdump."Tcpdump/Libpcap Public Repository."Accessed July 8, 2020.https://www.tcpdump.org.

関連するトピック