大家好,今天开始给大家介绍一下蓝牙BLE技术,整个蓝牙技术其实从技术上分经典蓝牙和BLE蓝牙,而从技术模式上分三种:单模(only BLE),双模(BLE和经典都有,如手机),经典蓝牙BR/EDR。蓝牙应用领域较广,分布在消费电子、医疗器械、汽车电子等诸多领域,类似于LOL里面的近战英雄如剑圣、德玛等,它的通信距离一般适用于近距离无线电通信,因此广泛应用于通信控制、数据传输、室内定位等领域。
BLE是随着2010年7月7号蓝牙协议4.0发布而公诸于世,目前蓝牙协议发展至5.0+版本(增强了室内定位和物联网功能),BLE技术已经everywhere crowded,如今物联网领域比较火热的蓝牙mesh技术的协议栈基础就是基于BLE做的,因此趁此机会给大家介绍一下BLE技术,无线通信入手通俗来说分软件和硬件,硬件方面主要是天线和BLE芯片,现在主流的很多国内外厂商如TI、beken等将许多型号的芯片与对应的天线都做成一体(俗称板载天线,体积小更低功耗),与MCU通过uart等通讯接口进行通讯。软件方面则主要分为底层驱动、操作系统、协议栈框架、应用层这几部分(有些简单的单片机不一定有操作系统,但是会模仿操作系统设计一些任务事件调度和内存分配),底层驱动主要是跟芯片外设相关的寄存器配置并预留接口给操作系统,协议栈框架则是软件的核心部分,应用层会调用协议栈、操作系统、底层提供的api接口进行逻辑设计,此次不展开说明,单就BLE协议栈进行介绍,后续将娓娓道来。
如下图所示,蓝牙协议栈大的结构划分分成三大层:自底向上依次是Controller层、HCI层(不一定有)、Host层, controller层包括物理层、逻辑链路层,Host层包括L2CAP(逻辑链路控制和适配器)层、SM(安全管理)层、ATT(属性协议)层、GATT(属性协议配置规范)层、GAP(通用访问规范)层,再往上就是应用层部分了。
这里面的层级结构类似于《计算机网络》里面的OSI网络模型,即划分物理层、链路层、网络层、传输层、应用层,这是五层结构,还有七层结构,即从应用层中分离出会话层、表示层、应用层。只是BLE相对传统的TCP/IP网络模型有一些不同,通信方式也要简化一些,下面简单描述一下BLE的不同层级之间的作用。
试想,我们买了一个运动手环,一般的厂商都会把BLE做进去,那么它可以理解成是一个蓝牙设备A,我们自己的买的手机里面一般是设计的双模蓝牙,即也是支持BLE的,把它当做是蓝牙设备B;一开始我们戴手环准备出门之前会把设备B和A进行蓝牙配对连接,之后设备A跟着我们跑步的过程中,运动传感器会把数据送到手环的MCU里面,然后MCU会把数据透传给蓝牙芯片,然后通过天线发送2.4GHz射频无线电,设备B即手机的蓝牙天线会定向接收设备A的天线发出的物理信号,从而把信号传输给设备B的蓝牙芯片解码,然后在设备B的app上显示运动数据,好,我们来简单解析一下上述物理场景背后的物理过程。
设备A开机上电,蓝牙芯片就会让天线发广播,通过读取蓝牙芯片flash里面的软件,将广播数据报文装填好发送出去,这里面有自己的设备名称、Mac地址、广播周期、模式等信息,这时候我们手机设备B通过app去驱动手机的蓝牙天线扫描广播,咦,扫到了设备A的广播,正好是我想要的,然后B就开始发起连接请求(connection request),然后A收到B的请求后会发送回复,然后B也收到回复之后,两者的连接正式建立,这里面关于角色role、模式等就反映了GAP的功劳,配对包括加密等操作就是SM的功劳,发射物理信号反映了物理层的功劳,基础的报文(广播报文和连接后的交互数据报文)结构也反映了链路层的功劳(准确来讲链路层属于一个万金油角色,啥都能干,但是干活也累啊)。
建立蓝牙连接以后,A和B会进行很多数据交互,例如看看双方的MTU、feature,B还得发起SDP服务,即service discovery protocol,服务发现,这个概念源自经典蓝牙,但是这里也能用,GATT是个大的数据库,里面有许多profile的数据,通过ATT层与下层进行交互,B向A发起GATT服务发现,A就会告诉B自己的GATT里面放了多少service\characteristic\properties\descriptor\value,这样A的运动数据包就可以通过蓝牙传输给B,B就知道A传输的包里面是个什么东东了,是速度、心跳还是温度等等,其实这里面也提到了BLE协议栈开发的重点在于GATT,对服务进行增删查是每个蓝牙人的必备技能。
上述过程不得不提的是L2CAP层,这是个桥,真的是个桥,它负责连接上下层之间,负责分包的,controller层的包有很多,只有L2CAP才知道这个包是给GAP、SM还是ATT,这里面的channel-ID可以从报文里面读出来其通道。
上述是拿平时的日常生活来讲讲BLE协议栈的理解,不足之处,请大家批评指正!后续接着更新……