性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

藍牙數(shù)據(jù)報文解析

1.前言

由于工作需要,初次接觸藍牙。從最基礎(chǔ)的知識開始了解。引用wiki中的介紹:

藍牙(英語:Bluetooth),一種無線通訊技術(shù)標準,用來讓固定與移動設(shè)備,在短距離間交換資料,以形成個人局域網(wǎng)(PAN)。其使用短波特高頻(UHF)無線電波,經(jīng)由2.4至2.485 GHz的ISM頻段來進行通信。1994年由電信商愛立信(Ericsson)發(fā)展出這個技術(shù)。它最初的設(shè)計是希望創(chuàng)建一個RS-232數(shù)據(jù)線的無線通信替代版本。它能夠連接多個設(shè)備,以克服同步的問題。藍牙技術(shù)目前由藍牙技術(shù)聯(lián)盟(SIG)來負責維護其技術(shù)標準,其成員已超過三萬,分布在電信、電腦、網(wǎng)絡(luò)與消費性電子產(chǎn)品等領(lǐng)域[5]。IEEE曾經(jīng)將藍牙技術(shù)標準化為IEEE 802.15.1,但是這個標準已經(jīng)不再繼續(xù)使用。

藍牙的標準是IEEE 802.15.1,藍牙協(xié)議工作在無需許可的ISM(Industrial Scientific Medical)頻段的2.45GHz。最高速度可達723.1kb/s。為了避免干擾可能使用2.45GHz的其它協(xié)議,藍牙協(xié)議將該頻段劃分成79個信道,(帶寬為1MHz)每秒的信道轉(zhuǎn)換可達1600次。

2.工作方式

藍牙技術(shù)分為基礎(chǔ)率/增強數(shù)據(jù)率(BR/EDR)和低耗能(LE)兩種技術(shù)類型。其中BR/EDR型是以點對點網(wǎng)絡(luò)拓撲結(jié)構(gòu)創(chuàng)建一對一設(shè)備通信;LE型則使用點對點(一對一)、廣播(一對多)和網(wǎng)格(多對多)等多種網(wǎng)絡(luò)拓撲結(jié)構(gòu)

3.版本發(fā)展

version

4.數(shù)據(jù)傳輸

數(shù)據(jù)傳輸時,藍牙模塊分主機和從機兩種模式。主機模式能夠搜索別的藍牙模塊并且主動與之建立連接。從機模式不能主動的建立連接,從機處于廣播狀態(tài)等待主機連接請求。

5.BLE藍牙數(shù)據(jù)包

研究UbertoothOne(想了解UbertoothOne的可以看往期文章)有一段時間了,嵌入式段的移植以及ubertooth相關(guān)命令的運行都沒有問題?,F(xiàn)在是對各個命令的輸出結(jié)果還是有一些不明白的地方,很有必要花時間做一個詳細的分析及記錄。結(jié)果涉及到藍牙數(shù)據(jù)包協(xié)議,需要對數(shù)據(jù)包相關(guān)字段做一個詳細的解析才能更好的開展后面的業(yè)務(wù)。

  • 信道BLE的物理通道即“頻道,分別是‘f=2402+k*2 MHz, k=0, … ,39’,帶寬為2MHz”的40個RF Channel。其中,有3個信道是advertising channel(廣播通道),分別是37、38、39,用于發(fā)現(xiàn)設(shè)備(Scanning devices)、初始化連接(initiating a connection)和廣播數(shù)據(jù)(broadcasting date);其他的37個信道為data channel(數(shù)據(jù)通道),用于兩個連接的設(shè)備間的通訊。
  • 數(shù)據(jù)包格式在低功耗藍牙規(guī)范中,數(shù)據(jù)包格式分廣播報文數(shù)據(jù)報文兩種。廣播報文:設(shè)備發(fā)現(xiàn)、連接建立、傳輸廣播數(shù)據(jù)報文:自適應(yīng)跳頻以及設(shè)備間數(shù)據(jù)傳輸 設(shè)備利用廣播報文發(fā)現(xiàn)、連接其它設(shè)備,而在連接建立之后,便開始使用數(shù)據(jù)報文。無論是廣播報文還是數(shù)據(jù)報文,鏈路層只使用一種數(shù)據(jù)包格式。它由“前導碼”(preamble)、“訪問碼”(access code)、”有效載荷“和”循環(huán)冗余校驗“(Cyclical Redundancy Check,CRC)校驗碼組成。其中,”訪問碼“又稱為”訪問地址/接入地址“(access address)。

  • 前導碼:1個字節(jié)長度,接收中用于頻率同步、數(shù)據(jù)速率同步、自動增益控制調(diào)整。前導是一個8比特的交替序列。不是01010101就是10101010,取決于接入地址的第一個比特。若接入地址的第一個比特為0:01010101 若接入地址的第一個比特為1:10101010
  • 訪問地址:4個字節(jié)長度,訪問地址有兩種類型(廣播訪問地址和數(shù)據(jù)訪問地址) 廣播訪問地址:固定為0x8E89BED6,在廣播、掃描、發(fā)起連接時使用。數(shù)據(jù)訪問地址:隨機地址,不同的連接有不同的值。在連接建立之后的兩個設(shè)備間使用。
  • PDU1. 廣播報文PDU:廣播報文PDU頭

PDU類型:

RFU:保留 TxAdd:發(fā)送地址字段 RxAdd:接收地址字段 發(fā)送地址字段和接收地址字段指示了設(shè)備使用公共地址(Public Address)還是隨機地址(Random Address)。公共地址和隨機地址的長度一樣,都包含6個字節(jié)共48位。BLE設(shè)備至少要擁有這兩種地址類型中的一種,當然也可以同時擁有這兩種地址類型。長度:長度域包含6個比特,有效值的范圍是6~37。

廣播報文PDU數(shù)據(jù)數(shù)據(jù):包含N個AD Structure,每個AD Structure由Length,AD Type和AD Data組成。其中:Length:AD Type和AD Data的長度。AD Type:指示AD Data數(shù)據(jù)的含義。

#define BLE_GAP_AD_TYPE_FLAGS                               0x01 /**< Flags for discoverability. */
#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE   0x02 /**< Partial list of 16 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE         0x03 /**< Complete list of 16 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE   0x04 /**< Partial list of 32 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE         0x05 /**< Complete list of 32 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE  0x06 /**< Partial list of 128 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE        0x07 /**< Complete list of 128 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME                    0x08 /**< Short local device name. */
#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME                 0x09 /**< Complete local device name. */
#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL                      0x0A /**< Transmit power level. */
#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE                     0x0D /**< Class of device. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C               0x0E /**< Simple Pairing Hash C. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R         0x0F /**< Simple Pairing Randomizer R. */
#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE           0x10 /**< Security Manager TK Value. */
#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS          0x11 /**< Security Manager Out Of Band Flags. */
#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE     0x12 /**< Slave Connection Interval Range. */
#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT       0x14 /**< List of 16-bit Service Solicitation UUIDs. */
#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT      0x15 /**< List of 128-bit Service Solicitation UUIDs. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA                        0x16 /**< Service Data - 16-bit UUID. */
#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS               0x17 /**< Public Target Address. */
#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS               0x18 /**< Random Target Address. */
#define BLE_GAP_AD_TYPE_APPEARANCE                          0x19 /**< Appearance. */
#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL                0x1A /**< Advertising Interval. */
#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS         0x1B /**< LE Bluetooth Device Address. */
#define BLE_GAP_AD_TYPE_LE_ROLE                             0x1C /**< LE Role. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256            0x1D /**< Simple Pairing Hash C-256. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256      0x1E /**< Simple Pairing Randomizer R-256. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID             0x20 /**< Service Data - 32-bit UUID. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID            0x21 /**< Service Data - 128-bit UUID. */
#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA                 0x3D /**< 3D Information Data. */
#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA          0xFF /**< Manufacturer Specific Data. */

2. 數(shù)據(jù)報文PDU

數(shù)據(jù)報文PDU頭

LLID(邏輯鏈路ID):0x01表示該數(shù)據(jù)包是一個幀的延續(xù)內(nèi)容,或者這是一個空的“邏輯鏈路控制及適配協(xié)議”數(shù)據(jù)包;0x02表示一個“邏輯鏈路控制及適配協(xié)議”數(shù)據(jù)包的開始;0x03表示這是一個“邏輯鏈路控制”數(shù)據(jù)包的內(nèi)容 NESN:下一個期望的序列號,用于對接收到的數(shù)據(jù)包進行確認 MD:更多數(shù)據(jù)字段,主要是為了說明發(fā)送方是否還有要發(fā)給接收者的數(shù)據(jù) RFU :保留位Length:用以表示包含“信息完整性校驗碼”(Message Integrity Check,MIC)在內(nèi)的“有效載荷數(shù)據(jù)”的長度。數(shù)據(jù)PDU數(shù)據(jù)同廣播報文PDU數(shù)據(jù)

  • 校驗碼:3個字節(jié)長度,“循環(huán)冗余校驗”(Cyclical Redundancy Check,CRC),可檢查數(shù)據(jù)的正確性

藍牙數(shù)據(jù)包解析先到這里,后續(xù)根據(jù)協(xié)議解析具體的UbertoothOne輸出結(jié)果。

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 4
收藏 3
關(guān)注 37
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧