蓝牙4.0BLE抓包(二) – 广播包解析
轉(zhuǎn)自:?http://www.cnblogs.com/aikm/p/5022502.html
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明作者和出處。 ???作者:強(qiáng)光手電[艾克姆科技-無(wú)線事業(yè)部]
在使用EN-Dongle捕獲和解析廣播包之前,我們先了解一下BLE報(bào)文的結(jié)構(gòu),之后,再對(duì)捕獲的廣播包進(jìn)行分析。在學(xué)習(xí)BLE的時(shí)候,下面兩個(gè)文檔是極其重要的,這是SIG發(fā)布的藍(lán)牙的核心協(xié)議和核心協(xié)議增補(bǔ)。
- 核心協(xié)議Core_v4.2。
- 核心協(xié)議增補(bǔ)CSS v6。
雖然這兩個(gè)文檔是藍(lán)牙技術(shù)的根本,但是遺憾的是:通過(guò)這兩個(gè)文檔學(xué)習(xí)藍(lán)牙并不是那么容易的,閱讀和理解起來(lái)很費(fèi)力。尤其是初學(xué)者在閱讀這兩個(gè)文檔的時(shí)候,感覺(jué)無(wú)從下口。所以,本文在分析報(bào)文的過(guò)程中,會(huì)明確指出協(xié)議文檔在什么地方定義了他們,讓我們有目的的去查閱協(xié)議文檔,做到知其然也知其所以然,這樣,學(xué)習(xí)起來(lái)就會(huì)輕松很多。
1. BLE報(bào)文結(jié)構(gòu)
BLE報(bào)文結(jié)構(gòu)如下,他由下圖所示的各個(gè)域組成。因?yàn)橛械挠虻拈L(zhǎng)度超過(guò)了一個(gè)字節(jié),所以在傳輸?shù)倪^(guò)程中就涉及到多字節(jié)域中哪個(gè)字節(jié)先傳輸?shù)膯?wèn)題,BLE報(bào)文傳輸時(shí)的字節(jié)序和比特序如下:
- ?字節(jié)序:大多數(shù)多字節(jié)域是從低字節(jié)開(kāi)始傳輸?shù)摹?strong>注意,并不是所有的多字節(jié)域都是從低字節(jié)開(kāi)始傳輸?shù)摹?/strong>
- 比特序:各個(gè)字節(jié)傳輸時(shí),每個(gè)字節(jié)都是從低位開(kāi)始。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1:BLE報(bào)文結(jié)構(gòu)
1.1 前導(dǎo)
前導(dǎo)是一個(gè)8比特的交替序列。他不是01010101就是10101010,取決于接入地址的第一個(gè)比特。
- 若接入地址的第一個(gè)比特為0:01010101
- 若接入地址的第一個(gè)比特為1:10101010
接收機(jī)可以根據(jù)前導(dǎo)的無(wú)線信號(hào)強(qiáng)度來(lái)配置自動(dòng)增益控制。
1.2?接入地址
接入地址有兩種類型:廣播接入地址和數(shù)據(jù)接入地址。
- 廣播接入地址:固定為0x8E89BED6,在廣播、掃描、發(fā)起連接時(shí)使用。
- 數(shù)據(jù)接入地址:隨機(jī)值,不同的連接有不同的值。在連接建立之后的兩個(gè)設(shè)備間使用。
對(duì)于數(shù)據(jù)信道,數(shù)據(jù)接入地址是一個(gè)隨機(jī)值,但需要滿足下面幾點(diǎn)要求:
? ? ?1) ?數(shù)據(jù)接入地址不能超過(guò)6個(gè)連續(xù)的“0”或“1”。
? ? ?2) ?數(shù)據(jù)接入地址的值不能與廣播接入地址相同。
? ? ?3) ?數(shù)據(jù)接入地址的4個(gè)字節(jié)的值必須互補(bǔ)相同。
? ? ?4) ?數(shù)據(jù)接入地址不能有超24次的比特翻轉(zhuǎn)(比特0到1或1到0,稱為1次比特翻轉(zhuǎn))。
? ? ?5) ?數(shù)據(jù)接入地址的最后6個(gè)比特需要至少兩次的比特翻轉(zhuǎn)。
? ? ?6) ?符合上面條件的有效隨機(jī)數(shù)據(jù)接入地址大概有231個(gè)。
1.3?報(bào)頭
1.3.1 廣播報(bào)文報(bào)頭
報(bào)頭的內(nèi)容取決于該報(bào)文是廣播報(bào)文還是數(shù)據(jù)報(bào)文。廣播報(bào)文的報(bào)頭如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2:廣播報(bào)文報(bào)頭
廣播報(bào)文的報(bào)頭包含4bit廣播報(bào)文類型、2bit保留位、1bit發(fā)送地址類型和1bit接收地址類型。
? ? 1)?廣播報(bào)文類型
Core_v4.2的2583頁(yè)描述了廣播報(bào)文類型,共有7種類型,如下圖所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖3:廣播報(bào)文類型
每種廣播報(bào)文類型都具有不同的數(shù)據(jù)格式及行為。Core_v4.2的2584頁(yè)的2.3.1節(jié)詳細(xì)的描述了各個(gè)廣播報(bào)文類型,大家可以閱讀此章節(jié)進(jìn)一步了解。
? ? ?2)?發(fā)送地址類型和接收地址類型
發(fā)送地址類型和接收地址類型指示了設(shè)備使用公共地址(Public Address)還是隨機(jī)地址(Random Address)。公共地址和隨機(jī)地址的長(zhǎng)度一樣,都包含6個(gè)字節(jié)共48位。BLE設(shè)備至少要擁有這兩種地址類型中的一種,當(dāng)然也可以同時(shí)擁有這兩種地址類型。
- 公共地址(Public Address)
公共地址由兩部分組成,如下圖。公共地址由制造商從IEEE申請(qǐng),由IEEE注冊(cè)機(jī)構(gòu)為該制造商分配的機(jī)構(gòu)唯一標(biāo)識(shí)符OUI(Organizationally Unique Identifier)。這個(gè)地址是獨(dú)一無(wú)二,不能修改的。Core_v4.2 P2576的1.3.1節(jié)描述了公共地址。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4:公共地址結(jié)構(gòu)
- 隨機(jī)地址
隨機(jī)地址有包含兩種:靜態(tài)地址(Static Device Address)和私有地址(PrivateDevice Address)。Core_v4.2 P2577的1.3.2.1節(jié)描述了靜態(tài)地址。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖5:靜態(tài)地址格式
靜態(tài)地址有如下要求:
? ? ?a) 靜態(tài)地址的最高2位有效位必須是1。
? ? ?b)?靜態(tài)地址最高2位有效位之外的其余部分不能全為0。
? ? ?c)?靜態(tài)地址最高2位有效位之外的其余部分不能全為1。
在私有地址的定義當(dāng)中,又包含了兩個(gè)子類:不可解析私有地址(Non-resolvable Private Address)和可解析私有地址(Resolvable Private Address,RPA)。nRF51822使用的是靜態(tài)地址,芯片在出廠時(shí)已經(jīng)設(shè)置好了48位地址,我們可以從下面兩個(gè)寄存器讀出地址類型和地址。
? ? ?a) ?DEVICEADDRTYPE寄存器。
DEVICEADDR[n]寄存器:包含DEVICEADDR[0]和DEVICEADDR[1]兩個(gè)寄存器。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖6:地址類型寄存器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖7:地址寄存器
1.4?長(zhǎng)度
- 廣播報(bào)文:長(zhǎng)度域包含6個(gè)比特,有效值的范圍是6~37。
- ?數(shù)據(jù)報(bào)文:長(zhǎng)度域包含5個(gè)比特,有效值的范圍是0~31。
廣播報(bào)文和和數(shù)據(jù)報(bào)文的長(zhǎng)度域有所不同,主要原因是:廣播報(bào)文除了最多31個(gè)字節(jié)的數(shù)據(jù)之外,還必須要包含6個(gè)字節(jié)的廣播設(shè)備地址。6+31=37,所以需要6比特的長(zhǎng)度域。
再次強(qiáng)調(diào):廣播時(shí)必須要包含6個(gè)字節(jié)的廣播設(shè)備地址。
1.5?數(shù)據(jù)(AdvData)
廣播和掃面響應(yīng)的數(shù)據(jù)格式如下圖所示,由有效數(shù)據(jù)部分和無(wú)效數(shù)據(jù)部分組成。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖8:廣播和掃描響應(yīng)的數(shù)據(jù)格式
1) ?有效數(shù)據(jù)部分:包含N個(gè)AD Structure,每個(gè)AD Structure由Length,AD Type和AD Data組成。其中:
- Length:AD Type和AD Data的長(zhǎng)度。
- AD Type:指示AD Data數(shù)據(jù)的含義。
問(wèn)題來(lái)了,我們?cè)趺粗烙心男〢D Type?他們又表示什么意義?可以通過(guò)下面2種方式查看AD Type和他們表示的意義。
- 從官網(wǎng)查詢,但是需要是會(huì)員才可以查詢。
https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm
- 查看Nordic的SDK中的定義,AD type的定義在程序的“ble_gap.h”頭文件中。定義如下:
#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. */
?
?1.6?校驗(yàn)?
BLE采用的是24位CRC校驗(yàn)。CRC對(duì)報(bào)頭、長(zhǎng)度和數(shù)據(jù)進(jìn)行計(jì)算。24位CRC的生成多項(xiàng)式如下:
2. ?廣播包解析
通過(guò)上文的描述,我們對(duì)BLE廣播包有了大致的了解,接下來(lái)我們用EN-Dongle捕獲一個(gè)心率計(jì)的廣播包,通過(guò)對(duì)實(shí)際廣播包的分析來(lái)理解BLE報(bào)文結(jié)構(gòu)和廣播。廣播包捕獲實(shí)驗(yàn)的硬件連接如下。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖9:硬件連接
2.1 心率計(jì)程序下載
2.1.1?下載協(xié)議棧
SoftDevice必須使用nRFgo Studio下載,打開(kāi)nRFgo Studio,切換到“Program SoftDevice”選項(xiàng)卡。點(diǎn)擊“Browse…”按鈕打開(kāi)SoftDevice的HEX文件(位于“…\BLE實(shí)驗(yàn)\藍(lán)牙協(xié)議棧(SoftDevice)目錄下的”?s110)。點(diǎn)擊“Program”下載程序。
2.1.1?下載應(yīng)用程序
應(yīng)用程序可以用nRFgo Studio下載,也可以在MDK中直接下載調(diào)試,在這里我們用nRFgo Studio下載。切換到“Program Application”選項(xiàng)卡。點(diǎn)擊“Browse…”按鈕打開(kāi)應(yīng)用程序的HEX文件(位于“…\BLE實(shí)驗(yàn)\ ble_app_beacon \pca10028\s110\arm5\_build”目錄下的?nrf51822_xxaa_s110.hex)。點(diǎn)擊“Program”下載程序。
2.2?捕獲廣播包
按照《藍(lán)牙4.0BLE抓包(一)》中的描述進(jìn)行抓包,下面是我們捕獲一個(gè)心率計(jì)的廣播包。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖10:捕獲的心率計(jì)廣播包
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖11:查看廣播包傳輸?shù)臄?shù)據(jù)
2.3 分析廣播包
為了方便分析,我們先取出這個(gè)廣播包實(shí)際傳輸?shù)臄?shù)據(jù),如圖9中所示。心率計(jì)完整的廣播報(bào)文如下:
D6 BE 89 8E?40?21?60 BF 8A B9 CD C5?0B 09 4E 6F 72 64 69 63 5F 48 52 4D?03 19 41 03?02 01 06?07 03 0D 18 0F 18 0A 18?EF A6 F0
2.3.1 接入地址
D6 BE 89 8E:接入地址,對(duì)廣播來(lái)說(shuō)是固定值。注意一下這里的字節(jié)序,接入地址傳輸時(shí)是低字節(jié)在前的。
2.3.2 PDU
? q?????????40:廣播報(bào)文報(bào)頭。
? l??????bit0~bit3是0000,說(shuō)明廣播類型是ADV_IND,即通用廣播指示。
? l??????bit7(RxAdd)是0,bit7(TxAdd)是1,說(shuō)明使用的是隨機(jī)地址(random address)。Core_V4.2 P2584的2.3.1有詳細(xì)的描述。
? q?????????21:長(zhǎng)度,表示這個(gè)廣播的長(zhǎng)度是33個(gè)字節(jié)。
? q?????????9A 3F 20 FB 74 C5:設(shè)備地址,這里使用的是隨機(jī)靜態(tài)地址。
接下來(lái)就是廣播包最重要的部分了,稱之為AdvData,前面我們說(shuō)過(guò)AdvData是N個(gè)AD Structure組層成,每個(gè)AD Structure的格式都是Length |AD Type|AD Data組成。
0B 09 4E 6F 72 64 69 63 5F 48 52 4D?03 19 41 03?02 01 06?07 03 0D 18 0F 18 0A 18
第一個(gè)字節(jié)0B表示第一個(gè)AD Structure的長(zhǎng)度是11個(gè)字節(jié),即第一個(gè)AD Structure是由0B加上緊跟著0B后面的11個(gè)字節(jié)組成,因此,第一個(gè)AD Structure是:
0B 09 4E 6F 72 64 69 63 5F 48 52 4D
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表1:第1個(gè)AD Structure的意義
| Length | AD Type | AD Data |
| 0B | 09 | 4E 6F 72 64 69 63 5F 48 52 4D |
| 11字節(jié) | AD type為“完整的本地名稱” | 程序中定義的為”Nordic_HRM”對(duì)應(yīng)的十六進(jìn)制就是4E 6F 72 64 69 63 5F 48 52 4D |
第2個(gè)AD Structure是:03 19 41 03
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??表2:第2個(gè)AD Structure的意義
| Length | AD Type | AD Data |
| 03 | 19 | 41 03 |
| 3字節(jié) | AD type為“外觀特性” | 外觀特性是一個(gè)16位的數(shù)值,由SIG定義,用來(lái)列舉設(shè)備的外觀樣式,指示設(shè)備是普通手機(jī),手環(huán)什么的。 |
第3個(gè)AD Structure是:02 01 06
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??表3:第3個(gè)AD Structure的意義
| Length | AD Type | AD Data |
| 02 | 01 | 06 |
| 2字節(jié) | AD type為“Flag” | flag說(shuō)明了物理連接功能,比如有限發(fā)現(xiàn)模式,不支持經(jīng)典藍(lán)牙等。 l??????????bit 0: LE?有限發(fā)現(xiàn)模式。 l??????????bit 1: LE?普通發(fā)現(xiàn)模式。 l??????????bit 2:?不支持?BR/EDR。 l??????????bit 3:?對(duì)?Same Device Capable(Controller)?同時(shí)支持?BLE?和?BR/EDR。 l??????????bit 4:?對(duì)?Same Device Capable(Host)?同時(shí)支持?BLE?和?BR/EDR。 bit 5..7:?預(yù)留。 |
?第4個(gè)AD Structure是:07 03 0D 18 0F 18 0A 18
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?表4:第4個(gè)AD Structure的意義
| Length | AD Type | AD Data |
| 07 | 03 | 0D 18 0F 18 0A 18 |
| 7字節(jié) | AD type為“16bit Service uuid列表” | 該設(shè)備支持的完整的16bit Service uuid列表。 l??????180D:Heart Rate service UUID(心率服務(wù)UUID) l??????180F:Battery service UUID(電池服務(wù)UUID) l??????180A:Device Information service UUID(設(shè)備信息服務(wù)UUID) |
16bit?UUID:
128位的UUID相當(dāng)長(zhǎng),設(shè)備間為了識(shí)別數(shù)據(jù)的類型需要發(fā)送長(zhǎng)達(dá)16字節(jié)的數(shù)據(jù)。為了提高傳輸效率,藍(lán)牙技術(shù)聯(lián)盟(SIG)定義了一個(gè)稱為“UUID基數(shù)”的128位通用唯一識(shí)別碼,結(jié)合一個(gè)較短的16位數(shù)使用。二者仍然遵循通用唯一識(shí)別碼的分配規(guī)則,只不過(guò)在設(shè)備間傳輸常用的UUID時(shí),只發(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被分為下列幾組:
l??????????0x1800 ~ 0x26FF:用作服務(wù)類通用唯一識(shí)別碼。
l??????????0x2700 ~ 0x27FF:用于標(biāo)識(shí)計(jì)量單位。
l??????????0x2800 ~ 0x28FF:用于區(qū)分屬性類型。
l??????????0x2900 ~ 0x29FF:用作特性描述。
l??????????0x2A00 ~ 0x7FFF:用于區(qū)分特性類型。
在程序的“ble_srv_common.h”文件中定義了16bit service?UUID,如下,當(dāng)然也可以在SIG官網(wǎng)上查詢:
?
#define BLE_UUID_ALERT_NOTIFICATION_SERVICE 0x1811 /**< Alert Notification service UUID. */
#define BLE_UUID_BATTERY_SERVICE 0x180F /**< Battery service UUID. */
#define BLE_UUID_BLOOD_PRESSURE_SERVICE 0x1810 /**< Blood Pressure service UUID. */
#define BLE_UUID_CURRENT_TIME_SERVICE 0x1805 /**< Current Time service UUID. */
#define BLE_UUID_CYCLING_SPEED_AND_CADENCE 0x1816 /**< Cycling Speed and Cadence service UUID. */
#define BLE_UUID_DEVICE_INFORMATION_SERVICE 0x180A /**< Device Information service UUID. */
#define BLE_UUID_GLUCOSE_SERVICE 0x1808 /**< Glucose service UUID. */
#define BLE_UUID_HEALTH_THERMOMETER_SERVICE 0x1809 /**< Health Thermometer service UUID. */
#define BLE_UUID_HEART_RATE_SERVICE 0x180D /**< Heart Rate service UUID. */
#define BLE_UUID_HUMAN_INTERFACE_DEVICE_SERVICE 0x1812 /**< Human Interface Device service UUID. */
#define BLE_UUID_IMMEDIATE_ALERT_SERVICE 0x1802 /**< Immediate Alert service UUID. */
#define BLE_UUID_LINK_LOSS_SERVICE 0x1803 /**< Link Loss service UUID. */
#define BLE_UUID_NEXT_DST_CHANGE_SERVICE 0x1807 /**< Next Dst Change service UUID. */
#define BLE_UUID_PHONE_ALERT_STATUS_SERVICE 0x180E /**< Phone Alert Status service UUID. */
#define BLE_UUID_REFERENCE_TIME_UPDATE_SERVICE 0x1806 /**< Reference Time Update service UUID. */
#define BLE_UUID_RUNNING_SPEED_AND_CADENCE 0x1814 /**< Running Speed and Cadence service UUID. */
#define BLE_UUID_SCAN_PARAMETERS_SERVICE 0x1813 /**< Scan Parameters service UUID. */
#define BLE_UUID_TX_POWER_SERVICE 0x1804 /**< TX Power service UUID. */
?
2.3.3 校驗(yàn)
EF A6 F0:24位CRC。24位CRC的生成多項(xiàng)式如下,對(duì)CRC算法感興趣的朋友可以研究一下:
總結(jié)
以上是生活随笔為你收集整理的蓝牙4.0BLE抓包(二) – 广播包解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Stm32 IAP程序编写及用户程序编写
- 下一篇: IAR环境下STM32+IAP方案的实现