ble廣播包詳解_第1頁
ble廣播包詳解_第2頁
ble廣播包詳解_第3頁
ble廣播包詳解_第4頁
ble廣播包詳解_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、在使用EN-Dongle捕獲和解析廣播包之前,我們先了解一下BLE報文的結(jié)構(gòu),之后,再對捕獲的廣播包進(jìn)行分析。在學(xué)習(xí)BLE的時候,下面兩個文檔是極其重要的,這是SIG發(fā)布的藍(lán)牙的核心協(xié)議和核心協(xié)議增補(bǔ)。?核心協(xié)議Core_v4.2。?核心協(xié)議增補(bǔ)CSSv6。雖然這兩個文檔是藍(lán)牙技術(shù)的根本,但是遺憾的是:通過這兩個文檔學(xué)習(xí)藍(lán)牙并不是那么容易的,閱讀和理解起來很費(fèi)力。尤其是初學(xué)者在閱讀這兩個文檔的時候,感覺無從下口。所以,本文在分析報文的過程中,會明確指出協(xié)議文檔在什么地方定義了他們,讓我們有目的的去查閱協(xié)議文檔,做到知其然也知其所以然,這樣,學(xué)習(xí)起來就會輕松很多。1. BLE報文結(jié)構(gòu)BLE報文結(jié)

2、構(gòu)如下,他由下圖所示的各個域組成。因?yàn)橛械挠虻拈L度超過了一個字節(jié),所以在傳輸?shù)倪^程中就涉及到多字節(jié)域中哪個字節(jié)先傳輸?shù)膯栴},BLE報文傳輸時的字節(jié)序和比特序如下:?字節(jié)序:大多數(shù)多字節(jié)域是從低字節(jié)開始傳輸?shù)摹W⒁?,并不是所有的多字?jié)域都是從低字節(jié)開始傳輸?shù)摹?比特序:各個字節(jié)傳輸時,每個字節(jié)都是從低位開始。圖1:BLE報文結(jié)構(gòu)1.1 前導(dǎo)前導(dǎo)是一個8比特的交替序列。他不是01010101就是10101010,取決于接入地址的第一個比特。?若接入地址的第一個比特為0:01010101?若接入地址的第一個比特為1:10101010接收機(jī)可以根據(jù)前導(dǎo)的無線信號強(qiáng)度來配置自動增益控制。1.2 接入地址

3、接入地址有兩種類型:廣播接入地址和數(shù)據(jù)接入地址。?廣播接入地址:固定為0X8E89BED6在廣播、掃描、發(fā)起連接時使用。?數(shù)據(jù)接入地址:隨機(jī)值,不同的連接有不同的值。在連接建立之后的兩個設(shè)備間使用。對于數(shù)據(jù)信道,數(shù)據(jù)接入地址是一個隨機(jī)值,但需要滿足下面幾點(diǎn)要求:1) 數(shù)據(jù)接入地址不能超過6個連續(xù)的“0”或“1”。2) 數(shù)據(jù)接入地址的值不能與廣播接入地址相同。3) 數(shù)據(jù)接入地址的4個字節(jié)的值必須互補(bǔ)相同。4) 數(shù)據(jù)接入地址不能有超24次的比牛!翻轉(zhuǎn)(比特0到1或1到0,稱為1次比特翻轉(zhuǎn))。5) 數(shù)據(jù)接入地址的最后6個比特需要至少兩次的比特翻轉(zhuǎn)。6) 符合上面條件的有效隨機(jī)數(shù)據(jù)接入地址大概有231

4、個。1.3 報頭1.3.1 廣播報文報頭zK:報頭的內(nèi)容取決于該報文是廣播報文還是數(shù)據(jù)報文。廣播報文的報頭如下圖所PDU(協(xié)議數(shù)據(jù)單元)f1832880-29624比特前導(dǎo)接入地址報頭長度數(shù)據(jù)校膾170-373于下/廣播報文類型保留發(fā)送地址類型接收地址類型4211、比特圖2:廣播報文報頭廣播報文的報頭包含4bit廣播報文類型、2bit保留位、1bit發(fā)送地址類型和1bit接收地址類型。1)廣播報文類型Core_v4.2的2583頁描述了廣播報文類型,共有7種類型,如下圖所示。PDUTyp物電5%PacketName0000ADVJND0001ADV_DIRECTJND0010ADVNONCOM

5、KIND0011SCAN.REQ0100SCAN_RSP0101CONNECT_REQ01WADV_SCAN_IND011dMit1ReservedCm晌/.1廣播推工美理并7件6、口油用廣楣指示ADHHEd、U雄向連接招不小可連接指示StANJtfQ主動門描詰盛土制臼撞響嗤C0、WEbREQ在度曲里liAM用Fl撞指示HeN型ceU保道圖3:廣播報文類型每種廣播報文類型都具有不同的數(shù)據(jù)格式及行為。Core_v4.2的2584頁的2.3.1節(jié)詳細(xì)的描述了各個廣播報文類型,大家可以閱讀此章節(jié)進(jìn)一步了解。2)發(fā)送地址類型和接收地址類型發(fā)送地址類型和接收地址類型指示了設(shè)備使用公共地址(PublicA

6、ddress)還是隨機(jī)地址(RandomAddress)。公共地址和隨機(jī)地址的長度一樣,都包含6個字節(jié)共48位。BLE設(shè)備至少要擁有這兩種地址類型中的一種,當(dāng)然也可以同時擁有這兩種地址類型。?公共地址(PublicAddress)公共地址由兩部分組成,如下圖。公共地址由制造商從IEEE申請,由IEEE注冊機(jī)構(gòu)為該制造商分配的機(jī)構(gòu)唯一標(biāo)識符OUI(OrganizationallyUniqueIdentifier)。這個地址是獨(dú)一無二,不能修改的。Core_v4.2P2576的1.3.1節(jié)描述了公共地址。LSBMSBcompany_assignedcompanyjd(24bits)(24bits)

7、圖4:公共地址結(jié)構(gòu)?隨機(jī)地址隨機(jī)地址有包含兩種:靜態(tài)地址(StaticDeviceAddress)和私有地址(PrivateDeviceAddress)。Core_v4.2P2577的節(jié)描述了靜態(tài)地址。LSBRandompartofstaticaddress.staticaddressnRF51822使用的是靜態(tài)地址,芯片在出廠時已經(jīng)設(shè)置好了48位地址,我們可以從下面兩個寄存器讀出地址類型和地址。a)DEVICEADDRTYPEff器。DEVICEADDRr存器:包含DEVICEADDR即DEVICEADDR州個寄存器。Table25;DEVICEADORTYPEnRF51_Se

8、rje$_Refeiric_martualv3,QWP23或25Onnumber31292S2TMZ5M2322213D191817M15M131211109IdRumtilllilLll&llilllillllllIdRWFMUakMIdViluaDwriptiMARDEVlCfADOHTTPt*即gPllWiC0PubKRindorn1Random地址類型寄存器是一個只讀寄容器,讀取寄存器的值即可獲取地址類型,0:公共地址.”隨機(jī)地址.圖6:地址類型寄存器Tabie26:DEVFCEADDRnJnRF51_Series_Refereiice_maniiaiv3P0P23426Bkmjmbr

9、r312B2fUM23H21HUU17H1514131211iOSflAAAAAKAAAAAAAAAAAAAAAAAAewillllllll1111111111131111tdAWfkUVakwtdValbeD*r啊如nARDEVKEADM*Hbitd*vweuMrcUDEVKEADDRfOjthe依湖Mtnrficanitxudb.D(*aADDRI1(QflUiruIbcmow璃加值i力,t(kvKitOftlyMts口54c(DEVICEAD地址寄存器也是只讀寄存器.包含DEWCEADDRO和DEHCEADDR1兩個寄存器.兩彳值共同組成羽位地址.WEVICEADDR:使用了O3T位.D

10、EVICEADDR1i使用了015位.圖7:地址寄存器1.4 長度?廣播報文:長度域包含6個比特,有效值的范圍是637。?數(shù)據(jù)報文:長度域包含5個比特,有效值的范圍是031。廣播報文和和數(shù)據(jù)報文的長度域有所不同,主要原因是:廣播報文除了最多31個字節(jié)的數(shù)據(jù)之外,還必須要包含6個字節(jié)的廣播設(shè)備地址。6+31=37,所以需要6比特的長度域。再次強(qiáng)調(diào):廣播時必須要包含6個字節(jié)的廣播設(shè)備地址。1.5 數(shù)據(jù)(AdvData)廣播和掃面響應(yīng)的數(shù)據(jù)格式如下圖所示,由有效數(shù)據(jù)部分和無效數(shù)據(jù)部分組成。有效數(shù)據(jù)部分p由HAD Structure tAD Strueiure- 2AO Structure NOOO-

11、OOOb1 octetLengftfrocteisLengthD3有效數(shù)據(jù)部分是由附個hD每個AD Strcuture的格式中Length | AD Type | AD DatCore _w4. 2 P20B1 的11描 描響后的數(shù)據(jù)格式口AD TypeAD Datan octetsLengtft-noaets廣播或掃描響應(yīng)數(shù)據(jù)字節(jié))AdvertissngorScanResponsedata(31Octets)無效數(shù)據(jù)部分Mon-照nihcarUpart圖8:廣播和掃描響應(yīng)的數(shù)據(jù)格式1)有效數(shù)據(jù)部分:包含N個ADStructure,每個ADStructure由Length,ADType和ADD

12、ata組成。其中:?Length:ADType和ADData的長度。?ADType:指示ADData數(shù)據(jù)的含義。問題來了,我們怎么知道有哪些ADType?他們又表示什么意義?可以通過下面2種方式查看ADType和他們表示的意義。?從官網(wǎng)查詢,但是需要是會員才可以查詢。/Technical/AssignedNumbers/generic_access_profile.htm?查看Nordic的SDK中的定義,ADtype的定義在程序的ble_gap.h”頭文件中。定義如下:&1#defineBLE_GAP_AD_TYPE_FLAGS0x01/*Fl

13、agsfordiscoverability.*/2#defineBLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE0x02/*Partiallistof16bitserviceUUIDs.*/3#defineBLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE0x0/Completelistof16bitserviceUUIDs.*/4#defineBLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE0x04/*Partiallistof32bitserviceUUI

14、Ds.*/5#defineBLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE0x05Completelistof32bitserviceUUIDs.*/6#defineBLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE0x06/*Partiallistof128bitserviceUUIDs.*/7#defineBLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE0x0Completelistof128bitserviceUUIDs.*/8#defineBLE_GAP_AD

15、_TYPE_SHORT_LOCAL_NAME0x08/*Shortlocaldevicename.*/9#defineBLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME0x09/*Completelocaldevicename.*/10#defineBLE_GAP_AD_TYPE_TX_POWER_LEVEL0x0A/*Transmitpowerlevel.*/11#defineBLE_GAP_AD_TYPE_CLASS_OF_DEVICE0x0D/*Classofdevice.*/12#defineBLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C

16、0x0E/*SimplePairingHashC.*/13#defineBLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R0x0F/*SimplePairingRandomizerR.*/14#defineBLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE0X1KSecurityManagerTKValue.*/15#defineBLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS0*1SecurityManagerOutOfBandFlags.*/16#defineBLE_GAP_AD_TYP

17、E_SLAVE_CONNECTION_INTERVAL_RANGE0x12/*SlaveConnectionIntervalRange.*/17#defineBLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT0x14/*Listof16-bitServiceSolicitationUUIDs.*/18#defineBLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT0x15/*Listof128-bitServiceSolicitationUUIDs.*/19#defineBLE_GAP_AD_TYPE_SERVI

18、CE_DATA0x16/*ServiceData-16-bitUUID.*/20#defineBLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS0x17/*PublicTargetAddress.*/21#defineBLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS0x18/*RandomTargetAddress.*/22#defineBLE_GAP_AD_TYPE_APPEARANCE0x19/*Appearance.*/23#defineBLE_GAP_AD_TYPE_ADVERTISING_INTERVAL0x1A/*Advertisi

19、ngInterval.*/24#defineBLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS0x1B/*LEBluetoothDeviceAddress.*/25#defineBLE_GAP_AD_TYPE_LE_ROLE0x1C/*LERole.*/26#defineBLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C2560x1D/*SimplePairingHashC-256.*/27#defineBLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R2560x1E/*SimplePairingR

20、andomizerR-256.*/28#defineBLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID0x20/*ServiceData - 32-bit UUID. */29 #defineDATABLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID0x21/*ServiceData-128-bitUUID.*/30#defineBLE_GAP_AD_TYPE_3D_INFORMATION0x3D/*3DInformationData.*/31#defineBLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DA

21、TA0xFF/* 唐 LLLS9AfiVllALLL59-r r am S i 59 by5 on ndr t odc: f alir CCTaOO)Dt-fcr (ApdiDle (Hmt): f alr (QrDO,IMv*C C:卻蛇口 (ConirolKtr) : filst (OrOO)按照BLE梅設(shè)進(jìn)行 解析.在退里可以 看到各個字業(yè)的具 悻含義Ht Art Rate Stfisor : HeirI It-青 B-t It3佻&cir vfed !: OmOOSlwltfentou& IE dud AR EK la sueSiaulVJhMWl LEM BrR EW 工。an ED

22、supperr rd: crut le GeniHr jl d1 semerabIe F&de: rr ue4pptr jnc:Fl HiLtrtgth: 2 rypt0W. .aQ m ,a a n 0 in .1 . c 16-bft sirve* miimL nrtgl; h ; ?Typt : 16-bf t E*r.1iL!E 1 13且以 UUID (Ok0*)lmuIDi 16: nratc Kiir MlADd)UUlDi 1 紀(jì) 也Mr* (DxlMf)UUID 16z D*fCt in/otmjiC-(OKlita)匚RCO?C,g SQFK1_ 1t Acct-s And

23、reas; 。*鳥匕&mn%MdiOer: Om?140 Odu Type: 4Du_imd. TxAddlafAlg., ftxAM-fjUe)Advertfling Addreilh 1i74fb!20rtf:0ft (s74LfbsMiKftSl)? 3.-Reserved:Fais電.0000-POUType:ADV_IUD(0x00)00.,RFU0.*10 0001 dvertisi ng Advertising=Length;33Address:5:cd:b3:bf(c5;cd:b9:Bazbf:60)Data+Devicemam電:Nordic_hrkt;App&arance:

24、HeartRatesenior:wearrRareBelt*Flag3用工6-b,F(xiàn)5ervuu工口s明crc;0x825feaGOOD 0010 0020 0050* * V - t - l * 4 v 41H.K )*,BUetwtbLowEnergy5kLayer.Packfits-;323-Displaced;23(100.0cujLoadtrne;0:00.00011.i.w11.11.w.圖11:查看廣播包傳輸?shù)臄?shù)據(jù)2.3分析廣播包為了方便分析,我們先取出這個廣播包實(shí)際傳輸?shù)臄?shù)據(jù),如圖9中所示。心率計完整的廣播報文如下:D6BE898E402160BF8AB9CDC50B094E6

25、F726469635F48524D0319410302010607030D180F180A18EFA6F02.3.1 接入地址D6BE898E:接入地址,對廣播來說是固定值。注意一下這里的字節(jié)序,接入地址傳輸時是低字節(jié)在前的。2.3.2 PDUq40:廣播報文報頭。lbit0bit3是0000,說明廣播類型是ADV_IND即通用廣播指示。lbit7(RxAdd)是0,bit7(TxAdd)是1,說明使用的是隨機(jī)地址(randomaddress)。Core_V4.2P2584的2.3.1有詳細(xì)的描述。q21:長度,表示這個廣播的長度是33個字節(jié)。q9A3F20FB74C5:設(shè)備地址,這里使用的是

26、隨機(jī)靜態(tài)地址。接下來就是廣播包最重要的部分了,稱之為AdvData,前面我們說過AdvData是N個ADStructure組層成,每個ADStructure的格式都是Length|ADType|ADData組成。0B094E6F726469635F48524D0319410302010607030D180F180A18第一個字節(jié)0B表示第一個ADStructure的長度是11個字節(jié),即第一個ADStructure是由0B加上緊跟著0B后面的11個字節(jié)組成,因此,第一個ADStructure是:0B094E6F726469635F48524D表1:第1個ADStructure的意義LengthA

27、DTypeADData0B094E6F726469635F48524D11字節(jié)ADtype為“完整的本地名稱”程序中定義的為“Nordic_HRM對應(yīng)的十六進(jìn)制就是4E6F726469635F48524D第2個ADStructure是:03194103表2:第2個ADStructure的意義LengthADTypeADData031941033字節(jié)ADtype為“外外觀特性是一個16位的數(shù)值,由SIG定義,用來列舉設(shè)觀特性”備的外觀樣式,指示設(shè)備是普通手機(jī),手環(huán)什么的。第3個ADStructure是:020106表3:第3個ADStructure的意義LengthADTypeADData020

28、1062字節(jié)ADtype為“LI”Flagflag說明了物理連接功能,比如有限發(fā)現(xiàn)模式,不支持經(jīng)典藍(lán)牙等。lbit0:LE有限發(fā)現(xiàn)模式。lbit1:LE普通發(fā)現(xiàn)模式。lbit2:不支持BR/EDRlbit3:對SameDeviceCapable(Controller)同時支持BLE和BR/EDRlbit4:對SameDeviceCapable(Host)同時支持BLE和BR/EDRbit5.7:預(yù)留。第4個ADStructure是:07030D180F180A18表4:第4個ADStructure的意義LengthADTypeADData07030D180F180A187字節(jié)ADtype為16

29、bitServiceuuid列表”該設(shè)備支持的完整的16bitServiceuuid列表。l180DHeartRateserviceUUID(心率服務(wù)UUID)l180F:BatteryserviceUUID(電池服務(wù)UUID)l180ADeviceInformationserviceUUID(設(shè)備信息服務(wù)UUID)16bitUUID128位的UUID相當(dāng)長,設(shè)備間為了識別數(shù)據(jù)的類型需要發(fā)送長達(dá)16字節(jié)的數(shù)據(jù)。為了提高傳輸效率,藍(lán)牙技術(shù)聯(lián)盟(SIG)定義了一個稱為“UUID基數(shù)”的128位通用唯一識別碼,結(jié)合一個較短的16位數(shù)使用。二者仍然遵循通用唯一識別碼的分配規(guī)則,只不過在設(shè)備間傳輸常用的

30、UUID時,只發(fā)送較短的16位版本,接收方收到后補(bǔ)上藍(lán)牙UUID基數(shù)即可。藍(lán)牙UUID基數(shù)如下:00000000-0000-1000-8000-008059B34FB如要發(fā)送的16位UUID為0x2A01,完整的128的UUID便是:00002A01-0000-1000-8000-008059B34FB低功耗藍(lán)牙使用的那部分UUID被分為下列幾組:l0x18000x26FF:用作服務(wù)類通用唯一識別碼。l0x27000X27FF:用于標(biāo)識計量單位。l0x28000x28FF:用于區(qū)分屬性類型。l0x29000x29FF:用作特性描述。l0x2A000x7FFF:用于區(qū)分特性類型。在程序的ble_

31、srv_common.h”文件中定義了16bitserviceUUIR如下,當(dāng)然也可以在SIG官網(wǎng)上查詢:1#defineBLE_UUID_ALERT_NOTIFICATION_SERVICE0x1811/*AlertNotificationserviceUUID.*/2#defineBLE_UUID_BATTERY_SERVICE0x180F/*BatteryserviceUUID.*/3#defineBLE_UUID_BLOOD_PRESSURE_SERVICE0x1810/*BloodPressureserviceUUID.*/4#defineBLE_UUID_CURRENT_TIME_SERVICE0x1805/*CurrentTimeserviceUUID.*/5#defineBLE_UUID_CYCLING_SPEED_AND_CADENCE0x18166 #de巾ne/*CyclingSpeedandCadenceserviceUUID.*/BLE_UUID_DEVICE_IN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論