版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在使用EN-Dongle捕获和解析广播包之前,我们先了解一下BLE报文的结构,之后,再对捕获的广播包进行分析。在学习 BLE的时候,下面两个文档是极其重要的,这是 SIG发布的蓝牙的核心协议 和核心协议增补,?核心协议。? 核心协议增补CSSv6。虽然这两个文档是蓝牙技术的根本,但是遗憾的是:通过这两个文档学习蓝牙并不是那么容易的, 阅读和理解起来很费力。尤其是初学者在阅读这两个文档的时候,感觉无从下口。所以,本文在分析 报文的过程中,会明确指出协议文档在什么地方定义了他们,让我们有目的的去查阅协议文档,做到 知其然也知其所以然,这样,学习起来就会轻松很多。报文结构BLE报文结构如下,他由下图
2、所示的各个域组成。因为有的域的长度超过了一个字节,所以在传输的过程中就涉及到多字节域中哪个字节先传输的问题,BLE报文传输时的字节序和比特序如下:?字节序:大多数多字节域是从低字节开始传输的。注意,并不是所有的多字节域都是从低字节开始传输的。?比特序:各个字节传输时,每个字节都是从低位开始。图1 : BLE报文结构前导前导是一个8比特的交替序列。他不是 01010101就是,取决于接入地址的第一个比特。? 若接入地址的第一个比特为 0: 01010101? 若接入地址的第一个比特为 1 :接收机可以根据前导的无线信号强度来配置自动增益控制。接入地址接入地址有两种类型:广播接入地址和数据接入地址
3、。?广播接入地址:固定为0X8E89BED6 ,在广播、扫描、发起连接时使用。?数据接入地址:随机值,不同的连接有不同的值。在连接建立之后的两个设备间使用。对于数据信道,数据接入地址是一个随机值,但需要满足下面几点要求:1)数据接入地址不能超过6个连续的“0”或“ 1 ”。2)数据接入地址的值不能与广播接入地址相同。3)数据接入地址的4个字节的值必须互补相同。4)数据接入地址不能有超 24次的比特翻转(比特0到1或1到0,称为1次比特翻转)。5)数据接入地址的最后6个比特需要至少两次的比特翻转。6)符合上面条件的有效随机数据接入地址大概有231个。报头广播报文报头报头的内容取决于该报文是广播报
4、文还是数据报文。广播报文的报头如下图所示: 图2:广播报文报头广播报文的报头包含4bit广播报文类型、2bit保留位、1bit发送地址类型和1bit接收地址类型。1)广播报文类型的2583页描述了广播报文类型,共有7种类型,如下图所示。图3:广播报文类型每种广播报文类型都具有不同的数据格式及行为。的2584页的节详细的描述了各个广播报文类型,大家可以阅读此章节进一步了解。2)发送地址类型和接收地址类型发送地址类型和接收地址类型指示了设备使用公共地址(PublicAddress)还是随机地址(RandomAddress)。公共地址和随机地址的长度一样,都包含6个字节共48位。BLE设备至少要拥有
5、这两种地址类型中的一种,当然也可以同时拥有这两种地址类型。? 公共地址(PublicAddress)公共地址由两部分组成,如下图。公共地址由制造商从IEEE申请,由IEEE注册机构为该制造商分配的机构唯一标识符 OUI(OrganizationallyUniqueldentfier)。这个地址是独一无二,不能修改的的节描述了公共地址。图4:公共地址结构? 随机地址随机地址有包含两种: 静态地址(StaticDeviceAddress )和私有地址(PrivateDeviceAddress ) 的节描述了静态地址。图5:静态地址格式静态地址有如下要求:a)静态地址的最局2位有效位必须是1 ob)
6、静态地址最高2位有效位之外的其余部分不能全为0。c)静态地址最高2位有效位之外的其余部分不能全为1。在私有地址的定义当中,又包含了两个子类:不可解析私有地址(Non-resolvablePrivateAddress )和可解析私有地址(ResolvablePrivateAddress , RPA)。nRF51822使用的是静态地址,芯片在出厂时已经设置好了48位地址,我们可以从下面两个寄存器读出地址类型和地址。a)DEVICEADDRTYPE 寄存器。DEVICEADDRn寄存器:包含 DEVICEADDR0和 DEVICEADDR1两个寄存器。图6:地址类型寄存器图7:地址寄存器长度?广播报
7、文:长度域包含6个比特,有效值的范围是 637。?数据报文:长度域包含5个比特,有效值的范围是 031。广播报文和和数据报文的长度域有所不同,主要原因是:广播报文除了最多31个字节的数据之外,还必须要包含6个字节的广播设备地址。6+31=37 ,所以需要6比特的长度域。再次强调:广播时必须要包含6个字节的广播设备地址。数据(AdvData)广播和扫面响应的数据格式如下图所示,由有效数据部分和无效数据部分组成。 图8:广播和扫描响应的数据格式1)有效数据部分:包含 N 个 ADStructure ,每个 ADStructure 由 Length , ADType 和 ADData 组成。其中:?
8、 Length : ADType 和 ADData 的长度。? ADType :指示ADData数据的含义。问题来了,我们怎么知道有哪些ADType他们又表示什么意义可以通过下面 2种方式查看ADType 和他们表示的意义。?从官网查询,但是需要是会员才可以查询。?查看Nordic的SDK中的定义,ADtype的定义在程序的头文件中。定义如下:1#define BLE_GAP_AD_TYPE_FLAGS0x01/*<Flagsfordiscoverability.*/ 2#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE0x
9、02/*<Partiallistof16bitserviceUUIDs.*/ 3#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE0x03/*<Completelistof16bitserviceUUIDs.*/#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE0x04/*<Partiallistof32bitser viceUUIDs.*/ 5#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE0x05/*&l
10、t;Completelistof 32bitserviceUUIDs.*/ 6#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE0x06/* <Partiallistof128bitserviceUUIDs.*/ 7#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLE TE0x07/*<Completelistof128bitserviceUUIDs.*/ 8#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08/*<Short
11、localdevicename*/ 9#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME0x09/*<Cor pletelocaldevicename.*/ 10#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL0x0A/*<Transmitpowerle vel.*/ 11#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE0x0D/*<Classofdevicd2#define BLE_GA P_AD_TYPE_SIMPLE_PAIRING_HASH_C0x0E/*<Simple
12、PairingHashC!3#define BLE_GAP_AD_TYPE_ SIMPLE PAIRING RANDOMIZER R0x0F/*<SimplePairingRandomizerR.*/4#define BLE GAP AD TYP E_SECURITY_MANAGER_TK_VALUE0x10/*<SecurityManagerTKValue5#define BLE_GAP_AD_TYPE_ SECURITY_MANAGER_OOB_FLAGS0x11/*<SecurityManagerOutOfBandFlagS6#define BLE_GAP_ADTYPE
13、 SLAVE CONNECTION INTERVAL RANGE0x12/*<SlaveConnectionIntervalRange7#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT0x14/*<Listof16-bitServiceSolicitationU UIDs.*/ 18#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT0x15/*<Listof128-bitSe rviceSolicitationUUIDs.*/ 19#define BLE_GAP
14、_AD_TYPE_SERVICE_DATA0x16/*<ServiceData-16- bitUUID.*/ 20#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS0x17/*<PublicTargetAddress* / 21#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS0x18/*<RandomTargetAdd#dSsfi*/ eBLE_GAP_AD_TYPE_APPEARANCE0x19/*<Appearan2e#define BLE_GAP_AD_TYPE_ADVERTISIN
15、G_ INTERVAL0x1A/*<AdvertisingInterval.*/ 24#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_AD DRESS0x1B/*<LEBluetoothDeviceAddress.*/ 25#define BLE_GAP_AD_TYPE_LE_ROLE0x1C/*<LERol e.*/ 26#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C2560x1D/*<SimplePairingHashC-256.* / 27#define BLE_GAP_AD_TY
16、PE_SIMPLE_PAIRING_RANDOMIZER_R2560x1E/*<SimplePairingRandomiz erR-256.*/ 28#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID0x20/*<ServiceData-32-bitU UID.*/ 29#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID0x21/*<ServiceData-128-bitUUI D.*/ 30#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA0x3D/
17、*<3DInformationDa31#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA0xFF/*<ManufacturerSpecficData.*/ 校验BLE采用的是24位CRC校验。CRC对报头、长度和数据进行计算。24位CRC的生成多项式如下:2.广播包解析通过上文的描述,我们对 BLE广播包有了大致的了解,接下来我们用EN-Dongle 捕获一个心率计的广播包,通过对实际广播包的分析来理解 BLE报文结构和广播。广播包捕获实验的硬件连接如下。图9:硬件连接 心率计程序下载下载协议栈SoftDevice 必须使用 nRF
18、goStudio 下载,打开 nRFgoStudio ,切换至U "ProgramSoftDevice ”选项卡。点击“Browse”按钮打开SoftDevice的HEX文件(位于“BLE实验 蓝牙协议栈(SoftDevice)目录下的“ s110)。点击"Program ”下载程序。下载应用程序应用程序可以用nRFgoStudio 下载,也可以在MDK中直接下载调试,在这里我们用nRFgoStudio下载。切换到"ProgramApplication ” 选项卡。点击“Browse”按钮打开应用程序的HEX文件(位于“BLE实验_build ”目录下的)。点击
19、“Program”下载程序。捕获广播包按照«»中的描述进行抓包,下面是我们捕获一个心率计的广播包。图10:捕获的心率计广播包图11 :查看广播包传输的数据分析广播包为了方便分析,我们先取出这个广播包实际传输的数据,如图 9中所示。心率计完整的广播报文如下:D6BE898E 40 21 60BF8AB9CDC5 0B094E6F5F48524D03194103 020106 07030D180F180A18EFA6F0接入地址D6BE898E :接入地址,对广播来说是固定值。注意一下这里的字节序,接入地址传输时是低字节在前的。:广播报文报头。lbit0bit3 是0000 ,
20、说明广播类型是 ADV_IND ,即通用广播指示。lbit7(RxAdd) 是0, bit7(TxAdd)是1,说明使用的是随机地址 (randomaddress)。的有详细的描述。q21 :长度,表示这个广播的长度是33个字节。q9A3F20FB74C5 :设备地址,这里使用的是随机静态地址。接下来就是广播包最重要的部分了,称之为 AdvData ,前面我们说过 AdvData是N个ADStructure组层成,每个ADStructure 的格式都是Length|ADType|ADData 组成。0B094E6F5F48524D03194103 020106 07030D180F180A18
21、第一个字节0B表示第一个ADStructure 的长度是11个字节,即第一个ADStructure 是由0B加上紧跟着0B后面的11个字节组成,因此,第一个 ADStructure 是:0B094E6F5F48524D表1:第1个ADStructure 的意义Length ADTypeADData0B094E6F5F48524D11字节ADtype为“完整的本地名称”程序中定义的为“ Nordic_HRM对应的十六进制就是4E6F5F48524D第 2 个 ADStructure 是:03194103表2:第2个ADStructure 的意义LengthADTypeADData03194103
22、3字节ADtype为“外观特性”外观特性是一个16位的数值,由SIG定义,用来列举设备的外观样式, 才旨示设备是普通手机,手环什么的。第 3 个 ADStructure 是:020106表3:第3个ADStructure 的意义LengthADTypeADData0201062字节ADtype 为“Flag ”flag说明了物理连接功能,比如有限发现模式,不支持经典蓝牙等。lbit0:LE有限发现模式。bit1:LE普通发现模式。bit2:不支持 BR/EDR。bit3:对 SameDeviceCapable(Controller)同时支持 BLE 和 BR/EDR。bit4:对 SameDe
23、viceCapable(Host) 同时支持 BLE 和 BR/EDR。bit5.7:预留。第 4 个 ADStructure 是:07030D180F180A18表4:第4个ADStructure 的意义LengthADTypeADData07030D180F180A187字节ADtype 为 " 16bitServiceuuid列表”该设备支持的完整的16bitServiceuuid 列表。l180D : HeartRateserviceUUID( 心率服务 UUID)l180F: BatteryserviceUUID( 电池服务 UUID)l180A : DeviceInfor
24、mationserviceUUID(设备信息服务UUID)16bitUUID :128位的UUID相当长,设备间为了识别数据的类型需要发送长达16字节的数据。为了提高传输效率,蓝牙技术联盟(SIG)定义了一个称为“UUID基数”的128位通用唯一识别码,结合一个较短的16位数使用。二者仍然遵循通用唯一识别码的分配规则,只不过在设备间传输常用的UUID时,只发送较短的16位版本,接收方收到后补上蓝牙UUID基数即可。蓝牙UUID基数如下:00000000 -0000 T000 -8000 -008059B34FB如要发送的16位UUID为0x2A01 ,完整的128的UUID便是:0000 2A
25、01 -0000 -1000 -8000 -008059B34FB低功耗蓝牙使用的那部分 UUID被分为下列几组:l0x18000x26FF :用作服务类通用唯一识别码。l0x27000x27FF :用于标识计量单位。l0x28000x28FF :用于区分属性类型。l0x29000x29FF :用作特性描述。l0x2A000x7FFF :用于区分特性类型。在程序的文件中定义了 16bitserviceUUID ,如下,当然也可以在 SIG官网上查询:1#define BLE_UUID_ALERT_NOTIFICATION_SERVICE0x1811/*<AlertNotification
26、serviceUUID.*/ 2 #define BLE_UUID_BATTERY_SERVICE0x180F/*<BatteryserviceUUID.*3#define BLE_UUID_BLOOD_ PRESSURE_SERVICE0x1810/*<BloodPressureserviceUUID.*/4#define BLE_UUID_CURRENT_TIME_SE RVICE0x1805/*<CurrentTimeserviceUUID.*/ 5#define BLE_UUID_CYCLING_SPEED_AND_CADENCE0x1 816/*<CyclingSpeedandCadenceserviceUUID.*/ 6#define BLE_UUID_DEVICE_INFORMATION_SERVIC E0x180A/*<DeviceInformationserviceUUID.*/ 7#define BLE_UUID_GLUCOSE_SERVICE0x1808/*<G lucoseserviceUUID.*/ 8#define BLE_UUID_HEALTH_THERMOMETER_SERVICE0x1809/*<HealthThe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024幼儿园校车司机应急处理与安全教育聘用合同范本3篇
- 专项贷款及连带责任担保协议法律认证版A版
- 2023-2024学年高中信息技术选修2(浙教版2019)-网络基础-说课稿-2.1-网络拓扑结构
- 20 陀螺 说课稿-2024-2025学年统编版语文四年级上册
- 2024施工人工费承包协议-城市更新项目专用3篇
- 23 走近工程师 说课稿-2023-2024学年科学三年级下册青岛版
- 福建省南平市外屯中学2022年高二数学理联考试卷含解析
- 福建省南平市松溪县第一中学高一英语上学期期末试卷含解析
- 7 2024电子商务平台安全防护与合规性评估服务合同
- 硕士研究之旅
- 管理人履职工作报告
- 全面质量管理(TQM)基本知识
- 学校财务整改报告范文(合集5篇)
- 产品供货质量保障措施
- 宇电温控器ai 500 501用户手册s 6中文说明书
- 部编版五年级语文下册第四单元整体教学设计
- 股权激励外文文献
- 【事业单位考试】2023年04月外交学院度第二次公开招聘人员冲刺题
- 课外文言文阅读100篇:经典古文名篇100
- 2022年贵州省遵义市中考语文试卷【含答案】
- 幼儿园支部书记批评与自我批评发言稿范文通用5篇
评论
0/150
提交评论