藍牙spp協議分析


基本概念

藍牙串口是基於 SPP 協議(Serial Port Profile),能在藍牙設備之間創建串口進行數據傳輸的一種設備。 藍牙串口的目的是針對如何在兩個不同設備(通信的兩端)上的應用之間保證一條完整的通信路徑。具體的基本流程如下:

設備A:這個設備會發起一個連接另外設備的請求。
設備B:這個設備等待另外一個設備發起連接請求。

協議棧分層

這個應用兩邊都是典型的傳統應用,能夠通過一個虛擬串口通道和對方通信。通過下圖可以看出,SPP的協議棧使用的還是rfcomm通道,這個是藍牙中比較古老的通道了。

基本流程

連接流程一般分成三個部分,如下所示:

1 創建虛擬連接:
A 使用SDP提交一個請求來查找RFCOMM服務信道號碼。
B 請求對遠端設備進行認證。
C 向遠端的RFCOMM通道發起一個新的L2CAP請求。
D 在L2CAP通道上初始化一個RFCOMM連接。
E f在RFCOMM連接上創建一個新的數據連接。

2 接受虛擬串口連接:

A 接受發起設備端的認證請求並做處理.
B 在L2CAP層接收一個新的連接。
C 接受RFCOMM連接請求在RFCOMM通道上
D 在RFCOMM通道上接收數據連接請求。

3 在本地SDP數據上注冊服務

SPP的API參數

/** A connection has been established with a remote device.

  • When this callback is received, the “spp_callback_parms.p.remDev” field
  • contains a pointer to the remote device context.
    */
    #define BTIF_SPP_EVENT_REMDEV_CONNECTED 0

/** A connection has been terminated for a remote device.

  • When this callback is received, the “spp_callback_parms.p.other” field
  • contains a 0.
    */
    #define BTIF_SPP_EVENT_REMDEV_DISCONNECTED 1

/** The data has been sent out. At this time the tx buffer can be released.

  • When this callback is received, the “spp_callback_parms.p.other” field
  • is from data structure SppTxDone_t.

*/
#define BTIF_SPP_EVENT_DATA_SENT 2

/** A request to close a channel was received.

  • When this callback is received, the “spp_callback_parms.p.other” field
  • contains a 0.
    */
    #define BTIF_SPP_EVENT_REMDEV_DISCONNECTED_IND 3

/** A request to open a channel was received.

    • When this callback is received, the “spp_callback_parms.p.remDev” field
    • contains a pointer to the remote device context.
    • This is an opportunitity for the server to reject the incoming request. To
    • reject the request modify spp_callback_parms.status to be BT_STATUS_CANCELLED.
      */
      #define BTIF_SPP_EVENT_REMDEV_CONNECTED_IND 4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM