BLE入门06

2019-03-05  本文已影响0人  张志中

BLE 协议架构总体上分成3块,从下到上分别是:控制器(Controller),主机(Host)和应用端(Apps)。控制器(Controller)是处理射频数据解析,数据接收和发送,主机(Host)是控制不同设备之间如何进行数据交换;应用端(Apps)实现具体应用。
3者可以在同一芯片类实现,也可以分不同芯片内实现。


1.控制器Controller

Controller实现射频相关的模拟和数字部分,完成最基本的数据发送和接收。Controller对外接口是天线,对内接口是主机控制器接口HCI(Hostcontroller interface)。
控制器包含物理层PHY(physicallayer),链路层LL(linker layer),直接测试模式DTM(Direct Test mode)以及主机控制器接口HCI。

广播通道有3个,37ch(2402MHz),38ch(2426MHz),39ch(2480MHz),每次广播都会往这3个通道同时发送(并不会在这3个通道之间跳频),为防止某个通道被其它设备阻塞,以至于设备无法配对或广播数据,只所以定3个广播通道是一种权衡,少了可能会被阻塞,多了加大功耗。
还有一个有意思的事情是,三个广播通道刚好避开了wifi的1ch,6ch,11ch,所以在BLE广播的时候,不至于被wifi影响(如果要干扰BLE广播数据,一个最最简单的办法,同时阻塞3个广播通道。
当BLE匹配之后,链路层LL由广播通道切换到数据通道,数据通道37个,数据传输的时候会在这37个通道间切换,切换规则在设备间匹配时候约定。
为了增加容量,增大抗干扰能力,连接不会长期使用一个固定的Physical Channel,而是在多个Channel(如37个)之间随机但有规律的切换,这就是BLE的跳频(Hopping)技术,主机和从机建立连接之后,会生成一个channel map,这个channel map就是主从商量好的调频通道。

2.主机HOST

主机host是蓝牙协议栈的核心部分:GAP层负责制定设备工作的角色,SS层负责指定安全连接,Logic Link层功能非常强大,官方作用为协议/通道的多路复用,负责上层应用数据(L2CAPService Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现。

如之前文章讲到,BT 4.2 最大传输的数据包长度为251字节,那么应用层要传输的数据包长度超过了251个字节,这个时候就靠L2CAP层进行分包处理,送到LL层进行数据发送。
Physical Layer负责提供一系列的PhysicalChannel;基于这些Physical Channel,LinkLayer可在两个设备之间建立用于点对点通信的Logical Channel;而L2CAP则将这个Logical Channel换分为一个个的L2CAPChannel,以便提供应用程序级别的通道复用。
到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP跑起来了。

提供信息(以后都称作Attribute)的一方称作ATTserver(一般是那些传感器节点),访问信息的一方称作ATT client。
一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。ATT层相当于数据传输通道,所有的数据都会通过该通道上传或者下发。

  1. Broadcaster Role,设备正在发送advertisingevents;
  2. Observer Role,设备正在接收advertising events;
  3. Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);
  4. Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

GAP层定义了用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),实现单向的,无连接的通信方式,配对,连接操作等;同时GAP层也定义了User Interface相关的蓝牙参数,比如蓝牙地址,名称,类型等。

3.应用层

应用层可以分为两部分,以从机为例,我们可以通过GATT层定义自己的Profile,供主端设备读取放在从机服务器上的数据;另外我们需要做自己的应用层程序,这个和普通MCU并无差别。
需要注意的是:

1 市面上流行的芯片的软件框架都是基于RTOS展开,应用层单独是一个TASK执行,协议栈是另外的TASK在执行。
2 协议栈是通过回调函数和应用层进行交互,协议栈通过消息传递机制让应用层TASK知道有蓝牙相关的操作,应用层通过相应的回调函数发现是GAP层的状态改变还是GATT层有数据进行传递,然后执行我们设计的功能。

参考

https://mp.weixin.qq.com/s/N0TYqFO7hxKgknl7DM6EzQ

上一篇 下一篇

猜你喜欢

热点阅读