従来のBluetoothプロトコルスタックシリアルポートプロトコルSPP(シリアルポートプロファイル)の概念の紹介

ゼロ。概要

主にbluetoothスタック(bluetoothスタック)シリアルプロトコル(bluetooth SPP)シリアルポートプロファイルプロトコルの概念の紹介を紹介します。

1.ステートメント

この列は逐次更新していきます。この列の更新内容は次のように計画されています。

最初の記事:Bluetoothの包括的な紹介、主にBluetoothのいくつかの概念、背景、開発トラック、市場でのBluetoothの紹介、およびBluetooth開発ボードの紹介を紹介します。

第2章:トランスポート層の概要では、主にBluetoothプロトコルスタックと、Bluetoothチップの前のハードウェア伝送プロトコル(H4、H5、UARTベースのBCSP、USBベースのH2など)を紹介します。

第3章:従来のBluetoothコントローラーの概要、主に、無線周波数レイヤー(RF)、ベースバンドレイヤー(ベースバンド)、リンク管理レイヤー(LMP)など、従来のBluetoothチップの概要を紹介します。

第4章:従来のBluetoothホストの概要、主にHCI、L2CAP、SDP、RFCOMM、HFP、SPP、HID、AVDTP、AVCTP、A2DP、AVRCP、OBEX、PBAP、MAPなどの従来のBluetoothプロトコルスタックを紹介します。契約。

第5章:低エネルギーBluetoothコントローラーの概要、主に物理層(PHY)、リンク層(LL)などの低エネルギーBluetoothチップを紹介

第6章:低電力Bluetoothホストの概要、低電力Bluetoothプロトコルスタックの概要(HCI、L2CAP、ATT、GATT、SMなど)

第7章:Bluetoothチップの概要、HCIベンダーコマンドの拡張に基づいて、主に一部のBluetoothチップの初期化プロセスを紹介

第8章:付録では、主に上記の一般的に使用される用語の紹介といくつかの特別なプロセスの紹介を紹介します。

さらに、以下に開発ボードを示します。これは、Bluetoothプロトコルスタックを学びたい人々の最高のセットです。Bluetoothプロトコルスタックをよりよく学習するために、このビデオのセットを学習した後、プロトコルスタック(Linuxのbluez、Androidのbluedroidなど)を変更できるようになります。

-------------------------------------------------- -------------------------------------------------- ---------------------

CSDNカレッジリンク(学習するコースを選択するために入力してください):https ://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

Bluetooth交換ボタングループ: 970324688

Githubコード:https : //github.com/sj15712795029/bluetooth_stack

開発ボードを入手:https : //item.taobao.com/item.htm?spm=a1z10.1-cs.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

Bluetooth学習カタログhttps : //blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

-------------------------------------------------- -------------------------------------------------- ----------------------

2. BluetoothシリアルポートSPP(シリアルポートプロファイル)プロトコルの概要

2.1概念の紹介

SPPは、シリアルポートプロファイル(serial port protocol)の略で、RS232(または同様の)シリアルケーブルエミュレーションにBluetoothを使用するデバイスが使用するプロトコルとプロセスを定義します。簡単に言えば、Bluetoothデバイス間のデータ通信用の仮想シリアルポートを確立することです。端的に言えば、2つのデバイスが互いにカスタムデータを送信できます。注:AppleはSPPプロトコルをサポートしていません。

現時点では、SIGの最新バージョンはV1.2で、以前のバージョンは公式WebサイトのV1.1からのみダウンロードできますが、2つのドキュメントに機能的な違いはないため、概要はありません。

2.2 Bluetooth全体におけるSPPプロトコルのアーキテクチャ図は次のとおりです

2.3役割紹介

デバイスA(DevA)–これは、他のデバイスへの接続を形成するために率先して行動するデバイスです。

デバイスB(DevB)–これは、別のデバイスが主導的に接続するのを待つデバイスです。

端的に言えば、2つのデバイスが接続されていることを意味します。接続を開始する役割はデバイスAであり、接続されているのはデバイスBです。ただし、これは他のプロトコルとは異なります。2つのデバイスの前のコードは基本的に同じであり、役割は2つのデバイスを区別することだけです。

2.4 SPPの特性

デバイスAは接続を開始するアクティブな部屋であるため、デバイスAは少なくとも確立リンクをサポートし、仮想シリアル接続をセットアップする必要があります。デバイスBは接続先であるので、少なくとも受け入れリンクをサポートし、仮想シリアル接続を確立し、アプリケーションのサービスレコードを登録する必要があります。ローカルSDPデータベース内。デバイスAがサービスにクエリを実行して接続できるようにするため、このプロトコルは最も重要な2つの機能(データの送信、データの受信)を逃します。または、SIGはrfcommがこの機能を達成したと考えているため、SPPプロトコルで記述しないでください。しかし、私はまだSPPにトランシーバー機能を導入することに決めました。

2.4.1リンクを確立し、仮想シリアル接続をセットアップします。

この手順では、リモートデバイスのエミュレートされたシリアルポート(または同等のもの)への接続を確立するために必要な手順を実行します。この手順のステップは次のとおりです。

1)SDPを使用してクエリを送信し、リモートデバイスで目的のアプリケーションのRFCOMMサーバーチャネル番号を確認します。これには、ユーザーがピアデバイスの使用可能なポート(またはサービス)から選択できるブラウジング機能が含まれる場合があります。または、どのサービスに連絡するかが正確にわかっている場合は、目的のサービスに関連付けられているサービスクラスIDを使用して必要なパラメータを調べれば十分です。

2)オプションで、実行するリモートデバイスの認証を要求します。また、オプションで、暗号化をオンにする必要があります。

3)リモートRFCOMMエンティティに新しいL2CAPチャネルを要求します。

4)L2CAPチャネルでRFCOMMセッションを開始します。

5)前述のサーバーチャネル番号を使用して、RFCOMMセッションで新しいデータリンク接続を開始します。手順5の後、仮想シリアルケーブル接続は、両側のアプリケーション間の通信に使用できるようになります。

2.4.2リンクを受け入れ、仮想シリアル接続を確立します。

この手順は、次のステップに参加することを指します。

1)リモートデバイスから要求された場合、認証手順に参加し、

さらに要求するには、暗号化をオンにします。

2)L2CAPからの新しいチャネル確立指示を受け入れます。

3)そのチャネルでRFCOMMセッションの確立を受け入れます。

4)RFCOMMセッションで新しいデータリンク接続を受け入れます。これにより、ユーザーがエミュレートされたシリアルポートに接続するように要求した場合(および認証/暗号化手順がまだ実行されていない場合)、リモートデバイスを認証して暗号化をオンにするローカル要求がトリガーされることがあります。

2.4.3ローカルSDPデータベースにアプリケーションのサービスレコードを登録します。

この手順は、エミュレートされたシリアルポート(または同等のもの)のサービスレコードをSDPデータベースに登録することを指します。これは、サービスデータベースの存在と、SDPクエリに応答する機能を意味します。

注:SPPはAndroidフォンでのみサポートされており、一部のAndroidフォンは接続するためにSPP APPが必要ですが、iPhoneフォンは直接SPPできませんが、これは別の代替プロトコルIAPです。

2.5 SDP関連の登録

SDP登録を確認します。

static const uint8_t spp_service_record[] =
{
	/* 1.ServiceClassIDList */
    SDP_DES_SIZE8, 0x8,
    SDP_UINT16, BT_ATTRIBUTE_SERVICE_CLASS_ID_LIST>>8&0xff, BT_ATTRIBUTE_SERVICE_CLASS_ID_LIST&0xff, /* Service class ID list attribute */
            SDP_DES_SIZE8, 3,
            SDP_UUID16, BT_SERVICE_CLASS_SERIAL_PORT>>8&0xff, BT_SERVICE_CLASS_SERIAL_PORT&0xff,

	/* 2.ProtocolDescriptorList */
            SDP_DES_SIZE8, 0x11,
            SDP_UINT16, BT_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST>>8&0xff, BT_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST&0xff,/* Protocol descriptor list attribute */
            SDP_DES_SIZE8, 0xc,
            SDP_DES_SIZE8, 0x3,
            SDP_UUID16, BT_PROTOCOL_L2CAP>>8&0xff, BT_PROTOCOL_L2CAP&0xff, /*L2CAP*/
            SDP_DES_SIZE8, 0x5,
            SDP_UUID16, BT_PROTOCOL_RFCOMM>>8&0xff, BT_PROTOCOL_RFCOMM&0xff, /*RFCOMM*/
            SDP_UINT8, RFCOMM_SPP_SERVER_CHNL, /*RFCOMM channel*/

	/* BluetoothProfileDescriptorList */
            SDP_DES_SIZE8, 0xd,
            SDP_UINT16, BT_ATTRIBUTE_BLUETOOTH_PROFILE_DESCRIPTOR_LIST>>8&0xff, BT_ATTRIBUTE_BLUETOOTH_PROFILE_DESCRIPTOR_LIST&0xff, /* profile descriptor List */
            SDP_DES_SIZE8, 0x8,
            SDP_DES_SIZE8,0x06,
            SDP_UUID16,BT_SERVICE_CLASS_SERIAL_PORT>>8&0xff, BT_SERVICE_CLASS_SERIAL_PORT&0xff,
            SDP_UINT16,0x01,0x02,		/* V1.2 */
};

 

おすすめ

転載: blog.csdn.net/XiaoXiaoPengBo/article/details/108530480