Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3965589
  • 博文数量: 408
  • 博客积分: 10227
  • 博客等级: 上将
  • 技术积分: 9820
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-17 21:48
个人简介

非淡泊无以明志,非宁静无以致远

文章存档

2022年(1)

2021年(1)

2020年(2)

2019年(5)

2018年(4)

2017年(3)

2016年(24)

2015年(8)

2014年(7)

2013年(3)

2012年(1)

2011年(23)

2010年(179)

2009年(147)

分类: Android平台

2016-07-20 10:16:47

1. BLE报文结构

报文是一比特一比特传输的,但他们同时也是由数据的字节组成的。BLE报文结构如下,它由下图所示的各个域组成。因为有的域的长度超过了一个字节,所以在传输的过程中就涉及到多字节域中哪个字节先传输的问题,BLE报文传输时的字节序和比特序如下:

字节序:大多数多字节域是从低字节开始传输的。因此,0x80是按照00000001发送的,而0x01是按照10000000发送的。注意,并不是所有的多字节域都是从低字节开始传输的。

比特序:各个字节传输时,每个字节都是从低位开始。



1.1 前导

前导是一个8比特的交替序列。它不是01010101就是10101010,取决于接入地址的第一个比特。

若接入地址的第一个比特为0:01010101

若接入地址的第一个比特为1:10101010

这样就保证了任一报文的前9个比特都是交替的,即要么为:101010101,要么为:010101010;

接收机可以根据前导的无线信号强度来配置自动增益控制。

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 广播报文报头

报头的内容取决于该报文是广播报文还是数据报文。广播报文的报头如下图所示:



 广播报文的报头包含4bit广播报文类型、2bit保留位、1bit发送地址类型和1bit接收地址类型。

1) 广播报文类型

 Core_v4.2的2583页描述了广播报文类型,共有7种类型,如下图所示。



每种广播报文类型都具有不同的数据格式及行为。Core_v4.22584页的2.3.1节详细的描述了各个广播报文类型大家可以阅读此章节进一步了解。

2) 发送地址类型和接收地址类型

发送地址类型和接收地址类型指示了设备使用公共地址(Public Address)还是随机地址(Random Address)。公共地址和随机地址的长度一样,都包含6个字节共48位。BLE设备至少要拥有这两种地址类型中的一种,当然也可以同时拥有这两种地址类型。

1.4 长度

    广播报文:长度域包含6个比特,有效值的范围是6~37。

    数据报文:长度域包含5个比特,有效值的范围是0~31。

广播报文和和数据报文的长度域有所不同,主要原因是:广播报文除了最多31个字节的数据之外,还必须要包含6个字节的广播设备地址。6+31=37,所以需要6比特的长度域。

再次强调:广播时必须要包含6个字节的广播设备地址。

1.5 数据(AdvData)

广播和扫面响应的数据格式如下图所示,由有效数据部分和无效数据部分组成。


1)  有效数据部分:包含N个AD Structure,每个AD Structure由Length,AD Type和AD Data组成。其中:

Length:AD Type和AD Data的长度。

AD Type:指示AD Data数据的含义。

问题来了,我们怎么知道有哪些AD Type?他们又表示什么意义?可以通过下面2种方式查看AD Type和他们表示的意义。

从官网查询,但是需要是会员才可以查询。

查看NordicSDK中的定义,AD type的定义在程序的“ble_gap.h”头文件中。定义如下:


1.6 校验 

BLE采用的是24位CRC校验。CRC对报头、长度和数据进行计算。24位CRC的生成多项式如下:











阅读(7907) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~