什么是蓝牙4.0 算法
蓝牙无线技术是使用范围最普遍的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙、高速蓝牙和低功耗蓝牙技术,将三种规范合而为一。它继承了蓝牙技术在无线链接上的固有优点,同时增长了高速蓝牙和低功耗蓝牙的特色。这三个规格能够组合或者单独使用。蓝牙4.0规范的核心是低功耗蓝牙(Low Energy),即蓝牙4.0BLE。该技术最大特色是拥有超低的运行功耗和待机功耗,蓝牙低功耗设备使用一粒纽扣电池能够连续工做数年之久。蓝牙4.0技术同时还拥有低成本、向下兼容、跨厂商互操做性强等特色。安全
蓝牙4.0 BLE技术具备以下特色:网络
1.高可靠性架构
对于无线通讯而言,因为电磁波在传输过程当中容易受不少因素的干扰,例如,障碍物的阻挡、天气情况等。所以,无线通讯系统在数据传输过程当中,具备内在的不可靠性。性能
蓝牙技术联盟(SIG)在制定蓝牙4.0规范时已经考虑到了这种数据传输过程当中的内在的不肯定性,因此在射频、基带协议、链路管理协议(LMP)中采用可靠性措施,包括:差错检测和校订、进行数据编解码、差错控制、数据加噪等,极大地提升了蓝牙无线数据传输的可靠性。另外,使用自适应跳频技术,最大程度地减小和其余2.4GHz ISM频段无线电波的串扰。加密
2.低成本、低功耗spa
低功耗蓝牙支持两种部署方式:双模方式和单模方式。设计
(1)双模方式,低功耗蓝牙功能集成在现有的经典蓝牙控制器中,或在现有经典蓝牙技术(2.1+EDR/3.0+HS)芯片上增长低功耗堆栈,总体架构基本不变,所以成本增长有限。3d
(2)单模方式,面向高度集成、紧凑的设备,使用一个轻量级链接层(Link Layer)提供超低功耗的待机模式操做。蓝牙4.0BLE技术能够应用于8bit MCU,目前TI公司推出的兼容蓝牙4.0BLE协议的SoC芯片CC2540/CC2541,外接PCB天线和几个阻容器件构成的滤波电路便可实现蓝牙网络节点的构建。
低功耗设计:蓝牙4.0版本强化了蓝牙在数据传输上的低功耗性能,功耗较传统蓝牙下降了百分之九十。
传统蓝牙设备的待机耗电量大一直是其缺陷之一,这与传统蓝牙技术采用 16~32 个频道进行广播不无关系,而低功耗蓝牙仅使用了3个广播通道,且每次广播时射频的开启时间也由传统的 22.5ms 减小到 0.6~1.2ms,这两个协议规范的改变,大幅下降了由于广播数据致使的待机功耗。
低功耗蓝牙设计了用深度睡眠状态来替换传统蓝牙的空闲状态,在深度睡眠状态下,主机(Host)长时间处于超低的负载循环(Duty Cycle)状态,只在须要运做时由控制器来启动,因为主机较控制器消耗的能源更多,所以这样的设计也节省了最多的能源。
3.快速启动,瞬间链接
此前蓝牙版本为人诟病的地方就在于启动速度方面,蓝牙2.1版本的启动链接须要 6s 时间,而蓝牙4.0版本仅仅须要3ms便可完成,几乎是瞬间链接。
4.传输距离极大提升
传统蓝牙传输距离为 2~10m,而蓝牙4.0的有效传输距离可达到 60~100m,传输距离提高了十倍,极大开拓了蓝牙技术的应用前景。固然,上述距离数值是在理想状态下,实际使用过程当中由于各类因素的影响,好比:空气湿度、其余电磁信号干扰等等,致使实际距离可能达不到上述理论值,经过抗干扰等处理能够提升实际的传输距离。
5.高安全性
为了保证数据传输的安全性,使用AES-128 CCM加密算法进行数据包加密和认证。
蓝牙4.0BLE网络拓扑结构分为星型拓扑和广播组拓扑。不一样的网络拓扑对应不一样的应用领域,在蓝牙4.0BLE的无线网络中,不一样的网络拓扑结构对网络节点的配置有不一样的要求(蓝牙网络节点的类型能够分为主机、从机,也能够分为服务器、客户端,具体配置须要根据配置文件决定)。
2.1 蓝牙的状态:
蓝牙具备5种状态:
待机状态(standby) :没有链接任何设备,没有传输和发送数据。
广播状态(Advertiser/advertising):周期性广播状态。
扫描状态(Scanner/scanning) :主动寻找正在广播的设备。
发起链接状态(Initiator/initiating):主动发起链接。
链接状态(connected) :已经链接。
2.2蓝牙的角色
主设备 从设备
2.3蓝牙的链接流程
BLE链接流程 |
找公司服务比喻 |
||
Master |
Slave |
消费者 |
服务方 |
待机模式 |
待机模式 |
空闲 |
空闲 |
扫描模式 |
广播模式 |
寻找公司 |
发广告 |
扫描请求 |
扫描回应 |
咨询能提供什么服务 |
告知服务 |
链接请求 |
签署业务合同 |
||
链接参数请求 |
具体合同内容 |
||
参数更新请求 |
合同修改 |
||
参数更新回应 |
合同回应 |
||
创建链接 |
签署合同 |
||
链接事件 |
开始业务合做 |
2.4链接事件和参数
2.4.1链接事件
主设备和从设备创建链接以后,全部的数据通讯都是在链接事件(Connection Events)中进行的。
尖刺的波就是链接事件(Connection events),剩下的Sleeping是睡眠时间,设备在创建链接以后的大多数时间都是处于Sleeping,这种状况下耗电量比较低,而在链接事件(Connection events)中,耗电量就相对高不少,这也是BLE为何省电的缘由之一。
每一个链接事件(Connection events)中,都须要由Master发起包,再由Slave回复。
2.4.2链接参数
链接参数用于规定主从机数据通讯时间,若是链接参数设置不合理,就会致使链接断开。
主要链接参数有如下三个:
链接间隔(Connection interval)
(GAPROLE_MIN_CONN_INTERVAL && GAPROLE_MAX_CONN_INTERVAL)链接间隔,在BLE的两个设备的链接中使用跳频机制。两个设备使用特定的信道发送和接收数据,而后过一段时间后再使用新的信道(BLE协议栈的链路层处理信道的切换)。
两个设备在切换信道后发送和接收数据称为一个链接事件。尽管没有应用数据被发送和接收,两个设备仍旧会交换链路层数据(空包 Empty PDU)来维持链接。
链接间隔就是指在一个链接事件(Connection events)的开始到下一个链接事件(Connection events)的开始的时间间隔。链接间隔以1.25ms为单元,链接间隔的范围是6 ~ 3200既7.5ms ~ 4s之间。
从机忽略(Slave Latency)
容许Slave(从设备)在没有数据要发的状况下,跳过必定数目的链接事件(Connection events),在这些链接事件(Connection events)中没必要回复Master(主设备)的包,这样就能更加省电。
范围能够是0 ~ 499
更详细的使用解析以下:
Slave Latency = OFF也就是Slave Latency为0时,Master发包,Slave必须回复,若是不回复,Master就会认为Slave那边接收不正常。
Slave Latency = ON也就是Slave Latency不为0的时候,图中Slave Latency为 3。Master发包,Slave没有数据要回复的时候,就会忽略 3 个链接事件,在第 4 个链接事件接收到Master发送的数据以后,回复Master。若是Slave有数据要发送就会唤醒,也就是说即便Slave Latency为 3,可是在Master发第二包的时候Slave有数据要回复,这个时候就会当即回复Master而不是等到 3 个链接事件以后的第 4 个链接事件去回复。
超时时间(Supervision Timeout)
这个参数设定了一个超时时间,若是BLE在这个时间内没有发生通讯的话,就会自动断开。
单位是 10ms,该变量的范围是10 ~ 3200,折算成时间范围是100ms ~ 32s 。
链接间隔、从机时延以及超时时间这三者必须知足以下公式:
Supervision Timeout > (1 +slaveLatency)* (connectionInterval)
上述公式必须知足,不然链接就会不正常断开。
这三个链接参数不一样状况下对通讯速率和功耗的影响:
1.Connection Interval缩短,Master和Slave通讯更加频繁,提升数据吞吐速度,缩短了数据发送的时间,固然也增长了功耗。
2.Connection Interval增加,通讯频率下降,数据吞吐速度下降,增长了数据发送的时间,固然,这种设置下降了功耗。
3.Slave Latency减小或者设置为 0,每次Connection Events中都须要回复Master的包,功耗会上升,数据发送速度会提升。
4.Slave Latency加长,功耗降低,数据发送速度下降。
注意修改链接参数的时候要知足必定的要求:
1.安卓设备做主设备时,链接参数知足的要求见本篇博文第二节"链接参数介绍"中提到的内容。另外实际开发过程当中发现安卓设备做主设备时存在一个问题,就是部分安卓设备链接BLE设备以后,只能进行一次链接参数的修改。
2. 苹果系统设备做主设备时,链接参数更新的要求比较苛刻,以下:
Interval Max * (Slave Latency + 1) ≤ 2 seconds
Interval Min ≥ 20 ms
Interval Min + 20 ms ≤ Interval Max
Slave Latency ≤ 4
connSupervisionTimeout ≤ 6 seconds
Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout
即:
最大链接间隔时间 *(从机延迟 + 1) ≤ 2s
最小链接间隔时间 ≥ 20 ms
最小链接间隔时间 + 20 ms ≤ 最大链接间隔时间
从机延迟 ≤ 4
超时时间 ≤ 6s
最大链接间隔时间 *(从机延迟 + 1)* 3 < 超时时间
因此若是你的BLE从设备须要被IOS主设备链接,那你的BLE从设备的默认申请的链接参数必定要知足上述要求,而且链接过程当中修改链接参数的时候也要知足上述要求。
蓝牙广播相关的参数有如下几种:
Advertising interval 广播间隔
Advertising_Type 广播类型
Own_Address_Type 自身地址类型
Direct_Address_Type 定向地址类型
Direct_Address 定向地址
Advertising_Channel_Map广播信道(一个广播有三个信道)
Advertising_Filter_Policy 广播过滤策略
Advertising Data 广播数据
ScanReponse Data 响应数据
Advertising_Type广播类型
1. 可链接的非定向广播(Connectable Undirected Event Type):
这是一种用途最广的广播类型,包括广播数据和扫描响应数据,它表示当前设备能够接受其余任何设备的链接请求。进行通用广播的设备可以被扫描设备扫描到,或者在接收到链接请求时做为从设备进入一个链接。通用广播能够在没有链接的状况下发出,换句话说,没有主从设备之分。
鉴于此种广播类型用的最多,下面咱们来讨论一下此类型下广播事件中广播包的发送状况,另外要注意在一个广播事件中,前一个"ADV_IND PDUs"的开始到相邻的下一个"ADV_IND PDUs"的开始处的时间要小于等于10ms :
第一种状况:仅仅有广播 PDUs 。截图显示以下:
第二种状况:在广播事件的中间有"SCAN_REQ"和"SCAN_RSP PDUs"。截图显示以下:
第三种状况:在广播事件的结尾有"SCAN_REQ"和"SCAN_RSP PDUs"。截图显示以下:
第四种状况:在广播事件的中间接收到"CONNECT_REQ PDU"的状况。截图显示以下
2. 可链接的定向广播(Connectable Directed Event Type):
定向广播类型是为了尽量快的创建链接。这种报文包含两个地址:广播者的地址和发起者的地址。发起者收到发给本身的定向广播报文以后,能够当即发送链接请求做为回应。
定向广播类型有特殊的时序要求。完整的广播事件必须每3.75ms重复一次。这一要求使得扫描设备只需扫描3.75ms即可以收到定向广播设备的消息。
固然,如此快的发送会让报文充斥着广播信道,进而致使该区域内的其余设备没法进行广播。所以,定向广播不能够持续1.28s以上的时间。若是主机没有主动要求中止,或者链接没有创建,控制器都会自动中止广播。一旦到了1.28s,主机便只能使用间隔长得多的可链接非定向广播让其余设备来链接。
当使用定向广播时,设备不能被主动扫描。此外,定向广播报文的净荷中也不能带有其余附加数据。该净荷只能包含两个必须的地址。
3. 不可链接的非定向广播(Non-connectable Undirected Event Type):
仅仅发送广播数据,而不想被扫描或者链接。这也是惟一可用于只有发射机而没有接收机设备的广播类型。不可链接广播设备不会进入链接态,所以,它只能根据主机的要求在广播态和就绪态之间切换。
4. 可扫描的非定向广播(Scannable Undirected Event Type):
又称可发现广播,这种广播不能用于发起链接,但容许其余设备扫描该广播设备。这意味着该设备能够被发现,既能够发送广播数据,也能够响应扫描发送扫描回应数据,但不能创建链接。这是一种适用于广播数据的广播形式,动态数据能够包含于广播数据之中,而静态数据能够包含于扫描响应数据之中。
注意:所谓的定向和非定向针对的是广播的对象,若是是针对特定的对象进行广播(在广播包PDU中会包含目标对象的MAC)就是定向广播,反之就是非定向。可链接和不可链接是指是否接受链接请求,若是是不可链接的广播类型,它将不回应链接请求。可扫描广播类型是指回应扫描请求。
不一样的广播类型对扫描请求和链接请求的不一样结果以下图:
广播数据和扫描回应数据,它们的长度都不能超过31个字节(0 ~ 31),
数据的格式必须知足下图的要求,能够包含多个AD数据段,可是每一个AD数据段必须由"Length:Data"组成,其中Length占用1个octet,Data部分占用Length个字节,因此一个AD段的长度为:Length+1。
格式图以下所示:
注:1 octet = 1 byte = 8 bit