文档章节

蓝牙协议栈

xiaocui911
 xiaocui911
发布于 2016/07/25 16:42
字数 1071
阅读 85
收藏 1

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

然后,我们先从底层开始分析,主要是由基带层和链路管理层组成。

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

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

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

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

中间协议层:

中间协议层主要是由逻辑链路控制与适配协议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()函数)处理。事件派发程序将事件传给相关服务和事件处理任务。

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

© 著作权归作者所有

共有 人打赏支持
xiaocui911
粉丝 6
博文 69
码字总数 14765
作品 0
深圳
程序员
IVT 发布世界上首个支持 Moblin 和 Android 的蓝牙最新标准 V3.0 协议栈

北京2009年4月29日电 /美通社亚洲/ -- 全球主要的蓝牙软件供应商 IVT 宣布,该公司已发布了世界上第一个支持英特尔 Moblin 和谷歌 Android 平台的蓝牙最新标准 V3.0+HS 的协议栈。多年来,I...

老枪
2009/04/30
460
0
AliOS Things蓝牙协议栈及应用开发框架介绍

摘要: AliOS Things从1.2.0版本开始支持蓝牙协议栈(BLE),及基于蓝牙协议栈的应用层开发框架。本文分为三部分对蓝牙组件进行介绍:蓝牙组件,蓝牙协议栈介绍及接口说明,和应用开发框架介绍...

阿里云云栖社区
01/11
0
0
第四章 怎样开发低功耗蓝牙产品

1.1,准备 Nordic Semiconductors的开发工具包nRF51-DK nRFgo Studio综合开发环境 nRF51 SDK(软件开发套件)软件开发包(含芯片开发的参考代码以及文档) 用于模拟低功耗蓝牙主机的USB加密狗...

weixin_38915701
04/22
0
0
三个Android蓝牙组件漏洞详情

  写在前面的话   2018年3月,Quarkslab向Google报告了Android蓝牙协议栈中的一些漏洞:      问题编号74882215:蓝牙L2CAP L2CAPCMDCONN_REQ远程内存泄露   问题编号74889513:蓝...

FreeBuf
08/28
0
0
浅谈昇润科技蓝牙4.2模块:HY-40R204P

浅谈BLE蓝牙4.2 从应用层面出发,低功耗蓝牙(BLE)的诞生对物联网应用具有颠覆性的意义。目前多数移动设备上使用的蓝牙是蓝牙4.2,而蓝牙4.2标准最大特性在于:数据传输更快、隐私功能更强大...

昇润科技
06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《netty入门与实战》笔记-05:netty内置的channelHandler

Netty 内置了很多开箱即用的 ChannelHandler。下面,我们通过学习 Netty 内置的 ChannelHandler 来逐步构建我们的 pipeline。 ChannelInboundHandlerAdapter 与 ChannelOutboundHandlerAdap...

Funcy1122
25分钟前
3
0
帧动画(wifi信号动态动画)

准备六张wifi不同信号强度的素材图片,复制到drawable目录中 在drawable目录中新建frame文件,并编写代码 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> ...

lanyu96
45分钟前
3
0
快速get到学习Linux操作系统的点

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件、网络协议和应用程序。它支持32位...

问题终结者
53分钟前
1
0
Django2 model操作数据库

1.将应用(如learn)添加到安装应用配置中 将我们新建的应用(learn)添加到 settings.py 中的 INSTALLED_APPS中,告诉Django有这么一个应用。 INSTALLED_APPS = [ 'django.contrib.ad...

MichaelShu
56分钟前
2
0
SpringBoot基础篇Bean之条件注入之注解使用

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 bean的条件注入,除了前面一篇博文中介绍的通过@Conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己...

小灰灰Blog
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部