零. 概述
主要介紹下藍牙協議堆疊(bluetooth stack)DID(Device ID)協議講解
btsnoop以及流程在資料中的......\STM32_UBUNTU_BLUETOOTH\2-藍牙資料\藍牙協議分析\DID分析.log
一. 宣告
本專欄文章我們會以連載的方式持續更新,本專欄計劃更新內容如下:

第一篇:藍牙綜合介紹 ,主要介紹藍牙的一些概念,產生背景,發展軌跡,市面藍牙介紹,以及藍牙開發板介紹,
第二篇:Transport層介紹,主要介紹藍牙協議堆疊跟藍牙芯片之前的硬體傳輸協議,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:傳統藍牙controller介紹,主要介紹傳統藍牙芯片的介紹,包括射頻層(RF),基帶層(baseband),鏈路管理層(LMP)等
第四篇:傳統藍牙host介紹,主要介紹傳統藍牙的協議堆疊,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的協議吧,
第五篇:低功耗藍牙controller介紹,主要介紹低功耗藍牙芯片,包括物理層(PHY),鏈路層(LL)
第六篇:低功耗藍牙host介紹,低功耗藍牙協議堆疊的介紹,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:藍牙芯片介紹,主要介紹一些藍牙芯片的初始化流程,基于HCI vendor command的擴展
第八篇:附錄,主要介紹以上常用名詞的介紹以及一些特殊流程的介紹等,
另外,開發板如下所示,對于想學習藍牙協議堆疊的最好人手一套,以便更好的學習藍牙協議堆疊,相信我,學完這一套視頻你將擁有修改任何協議堆疊的能力(比如Linux下的bluez,Android下的bluedroid),

-------------------------------------------------------------------------------------------------------------------------
CSDN學院鏈接(進入選擇你想要學習的課程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144
藍牙交流扣扣群:970324688
Github代碼:https://github.com/sj15712795029/bluetooth_stack
入手開發板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708
藍牙學習目錄:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900
--------------------------------------------------------------------------------------------------------------------------
二. DID(Device ID)講解
2.1 DID概述
DID(device id)是一個用于標示藍牙設備的協議,用于提供藍牙設備類之外的附加資訊(比如廠商ID,產品ID等等資訊),并將這些資訊合并到SDP記錄和EIR回應中,以便remote 設備獲取到這些資訊,
2.2 DID版本歷史
目前在藍牙SIG官網,只有兩個版本(V1.2/V1.3)
主要差別在于V1.2只把DID一些屬性注冊到SDP中以方便remote 設備問詢SDP的時候獲取到,而V1.3在V1.2的基礎上,增加了把DID的一些屬性添加到EIR(Extended Inquery Response)中,方便remote設備在搜尋的時候就能獲取到這些資訊
2.3 DID 屬性
DID一共有以下幾個屬性:

2.3.1 SpecificationID

2.3.2 VendorID

藍牙Vendor Id的廠商在以下這個連接可查找到,發現很多大公司都赫然在列
https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers
2.3.3 ProductID

2.3.4 Version

2.3.5 PrimaryRecord


2.3.6 VendorIDSource

2.4 SDP
Device ID information for the device is exported in terms of an explicit SDP record on that device. This will be called the Device ID Service Record, and is identified by a unique UUID – this UUID is called the PNPInformation.
PNPInformation的UUID為0x1200

2.5 EIR
在說明注冊什么樣形式的EIR之前,我們先來普及下EIR的概念
首先EIR是HCI的范疇,屬于protocol,但是我們也簡單介紹下
至于HCI command的格式,我們在HCI中再做說明,只說下EIR的資料

EIR一共240byte,非為有用資料和無用資料,但是不管EIR有用資料多少,都要240byte,
格式為 1B len + 1B type + raw data,其中len不包括自身,type是0x10
![]()
我們要注冊的關于DID相關的EIR為

所以代碼可以寫成這樣:
/* Device ID */
#if PROFILE_DID_ENABLE
eir_data[data_pos++] = 9;
eir_data[data_pos++] = BT_DT_DEVICE_ID;
eir_data[data_pos++] = DID_VENDOR_ID_SOURCE_VALUE & 0xff;
eir_data[data_pos++] = (DID_VENDOR_ID_SOURCE_VALUE>>8) & 0xff;
eir_data[data_pos++] = DID_VENDOR_ID_VALUE & 0xff;
eir_data[data_pos++] = (DID_VENDOR_ID_VALUE>>8) & 0xff;
eir_data[data_pos++] = DID_PRODUCT_ID_VALUE & 0xff;
eir_data[data_pos++] = (DID_PRODUCT_ID_VALUE>>8) & 0xff;
eir_data[data_pos++] = DID_VERSION_ID_VALUE & 0xff;
eir_data[data_pos++] = (DID_VERSION_ID_VALUE>>8) & 0xff;
#endif
錄制出來的模樣就是這樣:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/203849.html
標籤:其他
