ble 广播包详解.docx
- 文档编号:27403638
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:11
- 大小:20.41KB
ble 广播包详解.docx
《ble 广播包详解.docx》由会员分享,可在线阅读,更多相关《ble 广播包详解.docx(11页珍藏版)》请在冰豆网上搜索。
ble广播包详解
在运用EN-Dongle捕获息争析广播包之前,我们先懂得一下BLE报文的构造,之后,再对捕获的广播包进行剖析.在进修BLE的时刻,下面两个文档是极其重要的,这是SIG宣布的蓝牙的焦点协定和焦点协定补充.
∙焦点协定Core_v4.2.
∙焦点协定补充CSSv6.
固然这两个文档是蓝牙技巧的基本,但是圆满的是:
经由过程这两个文档进修蓝牙其实不是那么轻易的,浏览和懂得起来很辛苦.尤其是初学者在浏览这两个文档的时刻,感到无从下口.所以,本文在剖析报文的进程中,会明白指出协定文档在什么地方界说了他们,让我们有目标的去查阅协定文档,做到知其然也知其所以然,如许,进修起来就会轻松许多.
1.BLE报文构造
BLE报文构造如下,他由下图所示的各个域构成.因为有的域的长度超出了一个字节,所以在传输的进程中就涉及到多字节域中哪个字节先传输的问题,BLE报文传输时的字节序和比特序如下:
∙ 字节序:
大多半多字节域是从低字节开端传输的.留意,其实不是所有的多字节域都是从低字节开端传输的.
∙比特序:
各个字节传输时,每个字节都是从低位开端.
图1:
BLE报文构造
1.1前导
前导是一个8比特的瓜代序列.他不是01010101就是10101010,取决于接入地址的第一个比特.
∙若接入地址的第一个比特为0:
01010101
∙若接入地址的第一个比特为1:
10101010
吸收机可以依据前导的无线旌旗灯号强度来设置装备摆设主动增益掌握.
1.2 接入地址
接入地址有两种类型:
广播接入地址和数据接入地址.
∙广播接入地址:
固定为0x8E89BED6,在广播.扫描.提议衔接时运用.
∙数据接入地址:
随机值,不合的衔接有不合的值.在衔接树立之后的两个装备间运用.
对于数据信道,数据接入地址是一个随机值,但须要知足下面几点请求:
1) 数据接入地址不克不及超出6个持续的“0”或“1”.
2) 数据接入地址的值不克不及与广播接入地址雷同.
3) 数据接入地址的4个字节的值必须互补雷同.
4) 数据接入地址不克不及有超24次的比特翻转(比特0到1或1到0,称为1次比特翻转).
5) 数据接入地址的最后6个比特须要至少两次的比特翻转.
6) 相符上面前提的有用随机数据接入地址精确有231个.
1.3 报头
1.3.1广播报文报头
报头的内容取决于该报文是广播报文照样数据报文.广播报文的报头如下图所示:
图2:
广播报文报头
广播报文的报头包含4bit广播报文类型.2bit保存位.1bit发送地址类型和1bit吸收地址类型.
1) 广播报文类型
Core_v4.2的2583页描写了广播报文类型,共有7种类型,如下图所示.
图3:
广播报文类型
每种广播报文类型都具有不合的数据格局及行动.Core_v4.2的2584页的2.3.1节具体的描写了各个广播报文类型,大家可以浏览此章节进一步懂得.
2) 发送地址类型和吸收地址类型
发送地址类型和吸收地址类型指导了装备运用公共地址(PublicAddress)照样随机地址(RandomAddress).公共地址和随机地址的长度一样,都包含6个字节共48位.BLE装备至少要失去这两种地址类型中的一种,当然也可以同时失去这两种地址类型.
∙公共地址(PublicAddress)
公共地址由两部分构成,如下图.公共地址由制作商从IEEE申请,由IEEE注册机构为该制作商分派的机构独一标识符OUI(OrganizationallyUniqueIdentifier).这个地址是举世无双,不克不及修正的.Core_v4.2P2576的1.3.1节描写了公共地址.
图4:
公共地址构造
∙随机地址
随机地址有包含两种:
静态地址(StaticDeviceAddress)和私有地址(PrivateDeviceAddress).Core_v4.2P2577的1.3.2.1节描写了静态地址.
图5:
静态地址格局
静态地址有如下请求:
a)静态地址的最高2位有用位必须是1.
b) 静态地址最高2位有用位之外的其余部分不克不及全为0.
c) 静态地址最高2位有用位之外的其余部分不克不及全为1.
在私有地址的界说当中,又包含了两个子类:
不成解析私有地址(Non-resolvablePrivateAddress)和可解析私有地址(ResolvablePrivateAddress,RPA).nRF51822运用的是静态地址,芯片在出厂时已经设置好了48位地址,我们可以从下面两个存放器读出地址类型和地址.
a) DEVICEADDRTYPE存放器.
DEVICEADDR[n]存放器:
包含DEVICEADDR[0]和DEVICEADDR[1]两个存放器.
图6:
地址类型存放器
图7:
地址存放器
1.4 长度
∙广播报文:
长度域包含6个比特,有用值的规模是6~37.
∙ 数据报文:
长度域包含5个比特,有用值的规模是0~31.
广播报文和和数据报文的长度域有所不合,重要原因是:
广播报文除了最多31个字节的数据之外,还必须要包含6个字节的广播装备地址.6+31=37,所以须要6比特的长度域.
再次强调:
广播时必须要包含6个字节的广播装备地址.
1.5 数据(AdvData)
广播和扫面响应的数据格局如下图所示,由有用数据部分和无效数据部分构成.
图8:
广播和扫描响应的数据格局
1) 有用数据部分:
包含N个ADStructure,每个ADStructure由Length,ADType和ADData构成.个中:
∙Length:
ADType和ADData的长度.
∙ADType:
指导ADData数据的寄义.
问题来了,我们怎么知道有哪些ADType?
他们又暗示什么意义?
可以经由过程下面2种方法检讨ADType和他们暗示的意义.
∙从官网查询,但是须如果会员才可以查询.
∙检讨Nordic的SDK中的界说,ADtype的界说在程序的“ble_gap.h”头文件中.界说如下:
1#defineBLE_GAP_AD_TYPE_FLAGS0x01/** 1.6 校验 BLE采取的是24位CRC校验.CRC对报头.长度和数据进行盘算.24位CRC的生成多项式如下: 2. 广播包解析 经由过程上文的描写,我们对BLE广播包有了大致的懂得,接下来我们用EN-Dongle捕获一个心率计的广播包,经由过程对现实广播包的剖析来懂得BLE报文构造和广播.广播包捕获试验的硬件衔接如下. 图9: 硬件衔接 2.1心率计程序下载 2.1.1 下载协定栈 SoftDevice必须运用nRFgoStudio下载,打开nRFgoStudio,切换到“ProgramSoftDevice”选项卡.点击“Browse…”按钮打开SoftDevice的HEX文件(位于“…\BLE试验\蓝牙协定栈(SoftDevice)目次下的” s110).点击“Program”下载程序. 2.1.1 下载运用程序 运用程序可以用nRFgoStudio下载,也可以在MDK中直接下载调试,在这里我们用nRFgoStudio下载.切换到“ProgramApplication”选项卡.点击“Browse…”按钮打开运用程序的HEX文件(位于“…\BLE试验\ble_app_beacon\pca10028\s110\arm5\_build”目次下的 nrf51822_xxaa_s110.hex).点击“Program”下载程序. 2.2 捕获广播包 按照《蓝牙4.0BLE抓包 (一)》中的描写进行抓包,下面是我们捕获一个心率计的广播包. 图10: 捕获的心率计广播包 图11: 检讨广播包传输的数据 2.3剖析广播包 为了便利剖析,我们先掏出这个广播包现实传输的数据,如图9中所示.心率计完全的广播报文如下: D6BE898E 40 21 60BF8AB9CDC5 0B094E6F726469635F48524D 03194103 020106 07030D180F180A18 EFA6F0 2.3.1接入地址 D6BE898E: 接入地址,对广播来说是固定值.留意一下这里的字节序,接入地址传输时是低字节在前的. 2.3.2PDU q 40: 广播报文报头. l bit0~bit3是0000,解释广播类型是ADV_IND,即通用广播指导. l bit7(RxAdd)是0,bit7(TxAdd)是1,解释运用的是随机地址(randomaddress).Core_V4.2P2584的2.3.1有具体的描写. q 21: 长度,暗示这个广播的长度是33个字节. q 9A3F20FB74C5: 装备地址,这里运用的是随机静态地址. 接下来就是广播包最重要的部分了,称之为AdvData,前面我们说过AdvData是N个ADStructure组层成,每个ADStructure的格局都是Length|ADType|ADData构成. 0B094E6F726469635F48524D 03194103 020106 07030D180F180A18 第一个字节0B暗示第一个ADStructure的长度是11个字节,即第一个ADStructure是由0B加上紧跟着0B后面的11个字节构成,是以,第一个ADStructure是: 0B094E6F726469635F48524D 表1: 第1个ADStructure的意义 Length ADType ADData 0B 09 4E6F726469635F48524D 11字节 ADtype为“完全的当地名称” 程序中界说的为”Nordic_HRM”对应的十六进制就是4E6F726469635F48524D 第2个ADStructure是: 03194103 表2: 第2个ADStructure的意义 Length ADType ADData 03 19 4103 3字节 ADtype为“外不雅特征” 外不雅特征是一个16位的数值,由SIG界说,用来列举装备的外不雅样式,指导装备是通俗手机,手环什么的. 第3个ADStructure是: 020106 表3: 第3个ADStructure的意义 Length ADType ADData 02 01 06 2字节 ADtype为“Flag” flag说清楚明了物理衔接功效,比方有限发明模式,不支撑经典蓝牙等. l bit0: LE 有限发明模式. l bit1: LE 通俗发明模式. l bit2: 不支撑 BR/EDR. l bit3: 对 SameDeviceCapable(Controller) 同时支撑 BLE 和 BR/EDR. l bit4: 对 SameDeviceCapable(Host) 同时支撑 BLE 和 BR/EDR. bit5..7: 预留. 第4个ADStructure是: 07030D180F180A18 表4: 第4个ADStructure的意义 Length ADType ADData 07 03 0D180F180A18 7字节 ADtype为“16bitServiceuuid列表” 该装备支撑的完全的16bitServiceuuid列表. l 180D: HeartRateserviceUUID(心率办事UUID) l 180F: BatteryserviceUUID(电池办事UUID) l 180A: DeviceInformationserviceUUID(装备信息办事UUID) 16bit UUID: 128位的UUID相当长,装备间为了辨认数据的类型须要发送长达16字节的数据.为了进步传输效力,蓝牙技巧联盟(SIG)界说了一个称为“UUID基数”的128位通用独一辨认码,联合一个较短的16位数运用.二者仍然遵守通用独一辨认码的分派规矩,只不过在装备间传输经常运用的UUID时,只发送较短的16位版本,吸收方收到后补上蓝牙UUID基数即可. 蓝牙UUID基数如下: 00000000–0000–1000–8000–008059B34FB 如要发送的16位UUID为0x2A01,完全的128的UUID等于: 00002A01 –0000–1000–8000–008059B34FB 低功耗蓝牙运用的那部分UUID被分为下列几组: l 0x1800~0x26FF: 用作办事类通用独一辨认码. l 0x2700~0x27FF: 用于标识计量单位. l 0x2800~0x28FF: 用于区分属性类型. l 0x2900~0x29FF: 用作特征描写. l 0x2A00~0x7FFF: 用于区分特征类型. 在程序的“ble_srv_common.h”文件中界说了16bitservice UUID,如下,当然也可以在SIG官网上查询: 1#defineBLE_UUID_ALERT_NOTIFICATION_SERVICE0x1811/**
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ble 广播包详解 广播 详解