1. 程式人生 > >一分鐘讀懂低功耗藍芽(BLE)連線資料包

一分鐘讀懂低功耗藍芽(BLE)連線資料包

一分鐘讀懂低功耗藍芽(BLE)連線資料包

1.概述
   BLE 連線過程中有三個重要的資料包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ。
   SCAN_REQ: 掃描請求,由主裝置(MASTER DEVICE)向從裝置(SLAVE DEVICE)發出,目的是為了獲得從裝置的響應以得到更多的從裝置
              廣播資料資訊(包括裝置名字,或者服務UUID,及其它如廠家特定格式的資訊(如硬體版本,軟體版本號,裝置系列號等等)


   SCAN_RSP:  從裝置對就主裝置發起的SCAN_REQ的響應,作為廣播包的補充,從裝置可以給主裝置更多的廣播資料,比如說,有些裝置在廣播
              包裡面沒有裝置名字,這個時候就可以把裝置名字放在這個包裡面發給主裝置
   CONNECT_REQ:主裝置向從裝置發出連線請求。至此連線建立完成(從裝置不會響應這個請求),如果從裝置沒有連線上面的問題的話,以後
              主從雙方會開始相互交換有效資料(基於GAP,GATT及SMP協議)或者交換空包。

   以下對這三個資料包進行詳細解讀

2.關鍵字:Hollong BLE 偵聽儀,低功耗藍芽嗅探器, BLE 分析儀,BLE 資料抓取
  Keyword: Hollong BLE Sniffer, BLE Data Analyzer,BLE Capture

3.抓取連線資料包的準備工作
  * 硬體:一個BLE裝置(從裝置)及對應的主裝置(如智慧手機裡面的相關應用程式,或者通用BLE 工具軟體);
           一臺HOLLONG BLE SNIFFER (Hollong BLE 偵聽儀)

  * 軟體:Hollong 藍芽4.0/4.1 BLE協議監控分析儀 軟體
        下載連結:
        http://www.viewtool.com/index.ph ... hollong-4-0-4-1-ble

4. SCAN_REQ 包
   1)完整包

掃描請求完整包.png 

  2) 存取地址 (Access Address)   對於廣播包,這是一個固定長度(4個位元組)及固定內容(0x8e89bed6)的主從裝置識別廣播包的存取地址。
SCAN_REQ_ACCESS_ADDRESS.png 

  3)  頭資訊 (Header Info)   固定為2個位元組:分解為16個位來使用
   位[0:3]:P廣播包(PDU) 型別,總共有6個型別:

        PDU Type
        b3b2b1b0 Packet Name
        0000 ADV_IND: 可連線通用連線廣播
        0001 ADV_DIRECT_IND:可連線定向連線(指定裝置)廣播
        0010 ADV_NONCONN_IND:不可連線通用廣播
        0011 SCAN_REQ:掃描請求
        0100 SCAN_RSP:掃描響應
        0101 CONNECT_REQ:連線請求
        0110 ADV_SCAN_IND:可掃描通用廣播
        0111-1111 Reserved

   位[4:5]:保留
   位[6]:RxAdd
   位[7]:TxAdd
   位[8:13]:廣播資料長度 (最大為37 位元組)
   位[14:15]:保留
SCAN_REQ_header_info.png 

  4) 主裝置地址
SCAN_REQ_master_address.png 

  5)從裝置地址
SCAN_REQ_slave_address.png 

  6)CRC
SCAN_REQ_crc.png 


4. SCAN_RSP 包
    1)存取地址
          定義同上
SCAN_RSP_access_address.png 

    2)頭資訊
          定義同上
SCAN_RSP_header_info.png 

    3)從裝置地址
         固定6個位元組的從裝置地址(MAC ADDRESS)
SCAN_RSP_slave_address.png 

    4)響應資料(廣播資料)
        格式同廣播資料格式(詳見文“1分鐘讀懂低功耗藍芽廣播資料”), 在這個包裡面,資料為0(沒有資料)
SCAN_RSP_data.png 
    
    5)CRC
    固定為3個位元組
SCAN_RSP_crc.png 

5. CONNECT_REQ 包
     1)存取地址
      固定4個位元組和內容(0x8e89bed6)的存取地址,BLE 晶片使用這個固定的地址作為廣播通道的BLE資料接收。
CON_REQ_access_address.png 

    2)頭資訊
      二個位元組的頭資訊(解析格式同上)
CON_REQ_header_info.png 

    3)主裝置地址
    CON_REQ_master_address.png 

     4)從裝置地址
    CON_REQ_slave_address.png 

     5)存取地址
          在此指定連線後使用的存取地址(BLE 資料通道),這個地址是由內部指定的非確定的4個位元組長度的地址,不像廣播資料通道使用固定內容的存取地址。
      CON_REQ_data_access_address.png 

     6)CRC INIT
          初始化的CRC 值,以後被使用於資料CRC 校驗
      CON_REQ_crc_init.png 

     7)視窗時間 (Win Size)
          CON_REQ_win_size.png 

     8) 視窗偏移
          CON_REQ_win_offset.png 

     9)資料間隔時間 (CONNECTION INTERVAL)
          傳送兩個資料包(或者空包)的間隔時間。
          計算公式為:24 (0x18) * 1.25ms = 30ms, 在抓取的資料包中可以看到,每兩個包之間的間隔是30MS。 下載此資料包需要註冊。
          CON_REQ_conn_interval.png 

      10)時延(Latency)
          CON_REQ_latency.png 
     
       11) 中斷連線最大時延(TIME OUT)
          當主從雙方有一方在大於此時間後沒有接收到任何資料包或者空包,則由連線狀態轉為非連線狀態(主裝置可以重新開始
掃描, 從裝置也可以重新開始廣播,具體做什麼由應用程式決定)。
          計算方法: 最大時延 = TIME_OUT * 10MS, 在此為:72 (0X48) * 10 = 720 MS, 也就是說,如果雙方在0.72秒期間沒有收到任何資料包或者空包,則視為連線中斷,由連線狀態轉為非連線狀態,開始做應用程式要求做的事情。
          CON_REQ_timeout.png 

       12)跳頻通道圖(CHANNEL MAP)
         這個跳頻圖是由BLE 晶片根據周圍環境中可以使用的BLE 通道而制定出來,根據掃描測試的環境不同(指被佔用的頻譜資源不同)而不同,當這個圖(表)通過CONNECT_REQ 包傳送給從裝置後,主從雙方都會根據這個圖來同步跳頻(HOPPING),低功耗藍芽裝置通過這個方法能夠有效避開擁堵的頻道,使用比較“乾淨”,無(少)干擾的頻道來交換資料,從而大幅提升傳輸資料的穩定可靠性。
       CON_REQ_channel_map.png 
       由於這個是在比較乾淨(周圍幾乎沒有任何BLE 裝置或者其它工作在2.4G頻段,類似頻道的強訊號裝置)的環境下面工作的主從裝置,所以可以看出,它使用了所有頻道(除了廣播專用頻道37,38,39)作為跳頻圖。
     
      13) HOP 及CLOCK
       0xAF (10101111)
       HOP: 10101
  CLOCK: 111 => 對應晶體精度 為0-20PPm  
       一個位元組的前5個位指定HOP(跳頻)演算法中需要的資料(HOPINCREMENT),另外三個位指定晶體的精度等級(可以有多少PPM的誤差)
       SCA masterSCA, 三個位對應的晶體精度等級如下:       000: 251 ppm to 500 ppm
       001: 151 ppm to 250 ppm
       010: 101 ppm to 150 ppm
       011: 76 ppm to 100 ppm
       100: 51 ppm to 75 ppm
       101: 31 ppm to 50 ppm 
       110: 21 ppm to 30 ppm
       111: 0 ppm to 20 ppm
       
CON_REQ_hop_clock.png 

     14)CRC 
      同上

原文連結:
http://www.viewtool.com/bbs/foru ... e=1&extra=#pid71204


微信公眾號: 緯圖物聯 
緯圖物聯微信公眾號QR.jpg