蓝牙协议栈

蓝牙协议框架体系基本上就是这个图了,有点乱。安全

而后,咱们先从底层开始分析,主要是由基带层和链路管理层组成。服务器

无线链接(RF)经过2.4GHZ无需申请的ISM频段,实现数据的过滤与传输。app

基带层提供两种不一样的物理链路(同步面向链接链路SCO,异步无链接链路ACL)主要负责跳频和蓝牙数据帧的传输。框架

LMP负责两个或多个设备链路的创建和拆除及链路的安全和控制,同时他为上层软件模块提供了不一样的访问入口。异步

蓝牙主机控制器HCI:是由基带控制器,链接管理器,控制和时间寄存器等组成。他是蓝牙中软硬之间的接口。上下两层的数据和消息必须经过HCI的解释才能进行。函数

中间协议层:spa

中间协议层主要是由逻辑链路控制与适配协议L2CAP(logical link control and adaptation protocol),服务发现协议SDP,线缆替换协议和二进制电话控制协议TCS等功能组成。接口

L2CAP是核心部分,他是其余协议实现的基础。位于基带之上,向上层提供面向链接和无链接服务。他主要完成数据的拆装,服务质量控制,协议复用,分组的分割与复用。队列

SDP是一个基于客户/服务器结构的协议。工做于L2CAP层之上,为上层应用程序提供一种机制来发现可用的服务与属性。事件

RFCOMM是一个仿真有线链路的无限数据仿真协议。他在蓝牙基带上仿真RS-232控制和数据信号,为上层业务提供传送。

TCS定义了用于蓝牙设备之间创建语音和数据呼叫的控制信令。

高端应用层:

高端协议层主要是包括了PPP,TCP UDP,WAP等协议,这里很少介绍。

蓝牙很重要的一个特性就是全部的蓝牙产品无需实现全部的蓝牙规范。为了更加容易保持蓝牙设备之间的兼容,因此采用了profile(不懂!!!)。profile定义了设备如何实现一种链接或应用。有四种基本的profile他们包括GAP/SDAP/SPP/GOEP

属性协议(AP),通用属性规范(GATT) 通常访问应用规范(GAP)。属性协议定义了客户端与服务器端如何发送符合标准的消息。由6种基本操做构成:请求,响应,命令,指示,通知,确认。通用属性规范:定义了如何发现与使用服务,特性与描述符的标准方法。主要有服务,特性的发现,客户端的读写等。通常访问规范:定义了蓝牙设备如何发现和创建与其余设备的链接。他处理一些通常模式的业务和一些安全性问题,同时还处理一些有关链接的业务。

蓝牙协议栈经过软中断将底层事件(收到蓝牙数据,连接成功,收到广播)抛给app,app再捕获本身感兴趣的时间作相应的处理。至于怎么捕获,就是根据switch   case语句(你懂的)来的。如图:

应用程序经过_SVC 指令触发异常进入协议栈SVC异常处理函数,而后根据number调用协议栈中预先实现的底层协议处理函数。

而中断其实是根据中断向量表中中断号进入协议栈相应中断,而后经过中断号的“中断偏移”返回到应用程序的中断处理函数。

协议栈收到底层数据作相应处理后,处理器进入协议栈将evt_id放入事件队列,后执行SWI中断处理函数。而后程序进入应用程序再取出事件并交给事件派发程序(即ble_evt_dispatch()函数)处理。事件派发程序将事件传给相关服务和事件处理任务。

更具体的代码分析,等到二更了,由于我也是菜鸟。。。

相关文章
相关标签/搜索