1,BLE简介
BLE规范中定义了GAP(Generic Access Profile)和GATT(Generic Attribute)两个基本配置文件。
a,协议中的GAP层负责设备访问模式和进程,包括设备发现,建立连接,终止连接。初始化安全特性和设备配置。
b, GATT层用于已连接的蓝牙设备之间的数据
通信。
2,BLE特点
a, 高可靠性
b, 低成本,低功耗。低功耗蓝牙支持两种部署:双模和单模。一般智能机上使用双模。外设使用单模。功耗比传统蓝牙降低了90%。传统蓝牙使用16~32个频道进行广播,BLE仅使用3个广播通道,而且每次广播射频的开启时间用传统的22.5ms减少多少哦0.6~1。2ms。BLE设计用深度睡眠状态来替换传统蓝牙的空闲状态。
c, 快速启动,瞬间连接。2.1蓝牙启动连接需要6s,4.0蓝牙只要3ms即可完成。
d, 传输距离的提高。传统蓝牙一般2~10米。4.0有效传输距离可以达60~100米。
e, 高安全性。使用AES-128 CCM加密算法进行数据报加密认证。
3,BLE无线网络通讯信道分析
天线的主要功能,完成无线电波的发射和接收。发射时,把高频电流转化为电磁波发射出去。接收时把无线电波转化为高频电流。
BLE工作在ISM频带,定义了两个频段,2.4GHz和896/915MHz。在IEEE 802.15.4中共定义了27个信道:
a,2.4GHZ频带,16个信道,通信速率为250kbps;
b, 915MHZ频带,10个信道,通信速率40kbps;
c, 868MHZ频带,1和信道,通信速率20kbps。
BLE工作在2.4GHZ频带,仅使用3个广播通道。
4,BLE拓扑结构
BLE可以点对点,也可以点对多,一个BLE主机可以连接多个BLE从机,组成星形网络。
5,BLE协议栈
协议定义的是一系列通信标准,通信双方需要按照这一标准进行正常的数据收发。协议栈是协议的具体实现形式,通俗的说就是用代码实现的函数库,以便于开发人员调用。
使用协议栈开发的具体思路:
a,用户对BLE无线网络的开发简化为应用层的C语言程序开发,用户不需要深入的了解协议栈。
b, BLE蓝牙中数据采集,只要用户在应用层中加入传感器的读写函数即可。
c,如果考虑节能,可以根据数据采集周期进行定时,周期性唤醒BLE。
蓝牙是为了能够相互通信,想要通信及必须遵行一定规则,profile可以理解为相互约定的规则。
BLE低功耗蓝牙中有四种设备类型,Central主机,Peripheral从机,Observer观察者,Broadcaster广播者。通常Central主机,Peripheral从机一起使用,Central主机,Peripheral从机一起使用。Central和Peripheral连接交换数据,平时我们使用到的基本上是这种模式。而像多温度采集器,通常使用Observer和Broadcaster这种无连接形式。
GATT有Service和Client,Service作为服务器端,对GATT Client提供read/write接口,一般情况下,Central作为Client,Peripheral作为Service。所以主机会调用read/write来和作为Service端的Peripheral从机通讯。而Peripheral则通过no
tify的方式即调用GATT_Notifycation发起和主机通讯。
从机有个profile的相关代码,profile决定从机的功能。
主机和从机是这样开机工作的:从机开始广播,然后主机扫描广播的从机,当从机收到主机的扫描请求后,会向主机发生扫描回应数据。然后主机发起连接,然后开始通讯。所以从机需要设置广播内容和扫描回应内容。
a, profile,可以理解为一种规范,一个标准的通信协议,profile存在于从机中。蓝牙组织规定了一系列的标准profile,如防丢计、心率计。每个profile中包含多个service,每个service代表从机的一种能力。
b, Service,可以理解为一种服务,在BLE从机里,通过有多个服务,例如电量信息服务、系统信息服务等。每个service又包含多个characteristic特征值。每个具体的characteristic特征值才是BLE通讯的主体,比如当前电量是80%。所以会通过电量的characteristic特征值特征值保存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数。
c, characteristic,characteristic特征值,BLE主从机均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
d, UUID,统一标识吗,我们刚提到的characteristic和service,都需要一个唯一的UUID来标识。
每个从机都会有个叫做profile的东西存在,不管自定义的还标准的profile,他们都是由一系列的Service组成,然后每个service又包含多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。
BLE协议栈中传输数据分为两方面,一个GATT的client主动向service发送数据。另一个是GATT的service主动向client发送数据。即主从之前相互传数据。
主机向从机发生数据,使用GATT_Write
从机向主机发生数据,使用GATT_Notification
5,广播advertising
只有当从机处于广播状态,主机才能搜索到。广播数据:广播时必须携带一个主要的service的UUID,主机搜索时也必须具有这个UUID来搜索从机,否则将搜索不到从机。
6,扫描请求
扫描请求时主机发起。
7,扫描回应
主机扫描从机时,如果从机正在广播,将被扫描到,并且可以看到从机的设备名、发射功率等信息。这些数据并没有出现在广播数据中,是从机收到主机的扫描后向主机发送的相应数据。
8,使用BLE协议栈进行应用程序的开发过程中,虽然说可以不关心协议栈的具体细节,但是还是要对协议栈的基本构成及内部工作原理有个清晰的认识。只有这样才能将协议栈提供的函数充分地融入自己的实际项目开发过程中。
协议栈采用分层思想,物理层、链路层、控制接口层。主机部分包含逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层GAP、通用属性配置文件层GATT。
a, 物理层:运行在2.4GHz ISM。40频道2MHz的通道间隙。其中3个固定的广播通道,37个自适应自动调频数据通道。
b, LL层:控制芯片工作在standy(准备)、advertising(广播,不需要连接就可以发送数据)、scanning(监听/扫描,来自广播的数据)、initiating(发起连接,发起连接请求给相应广播者)、connected(已连接,如果广播者同意该请求,那么广播者与发起者建立连接)五种状态中的一种。发起连接的设备变为master主机,接收连接请求的设备变为slave从机。
c, HCI层,向host和controller提供标准化的接口,使用硬件接口uart、spi等来控制。
d, L2CAP层,相当于快递,把数据打包,可以让客户可以点对点通讯。
e, SM层,安全服务层,提供配对和密分发,实现安全连接和数据分发。
f, ATT层,也许设备向另一个设备展示一块特定的数据,称为属性,在ATT环境中,展示属性的设备称为服务器,与之配对的设备称为客户端。链路层的主从机与ATT角色是相互独立的,也就是说主机可以是服务器也可以是客户端。从机也是。
g, GATT层,使用ATT的服务框架,GATT规定了配置文件profile的结构。在BLE中,所有被profile或服务用到的数据都称为特性characteristic。两个建立连接的设备之间的所有数据通信都是通过GATT子程序处理。应用程序和profile直接只要GATT层。
h, 以上各层全部被封装起来的,对外提供接口函数。
4