蓝牙历史
1998.5,瑞典爱立信、芬兰诺基亚、日本东芝、美国IBM和英特尔公司五家著名厂商,在联合拓展短程无线通信技术的标准化活动时提出了蓝牙技术。
1999年下半年,著名的业界巨头微软、moto、3COM、朗讯与蓝牙特别小组5家公司共同发起成立了蓝牙技术推广组织,从而在全球范围内掀起了一股蓝牙潮。
蓝牙解决的问题
解决的是 一些小型的设备和移动终端的互联
wifi 解决的是 移动终端与网络(网关设备)互联的技术
蓝牙解决的是点对点的问题,
但是wifi解决的是 点到 中央的问题.
蓝牙特点
传统蓝牙特点
短距离通信(一般10m内)
蓝牙设备工作在全球通用免费的2.4GHz的ISM(即工业、科学、医学)频段
现在拥有三种类别和四个版本
比特率已经从1Mbps发展的将近54Mbps的境界,在传输速度上似乎要与Wifi分庭抗礼
蓝牙最致命的弱点在于高功耗
一旦打开蓝牙,它就会持续进行搜索并试图与设备保持连接,这个过程的功耗是很大的。
所以蓝牙技术的未来在于如何降低功耗,同时保持高速的传输速率。
低功耗蓝牙特点
蓝牙4.0支持低功耗蓝牙
耗电量极低,睡眠模式一般是4-7个uA,广播状态是1个mA以下
接入时间短
低功耗蓝牙设备匹配和接入时间比传统蓝牙大大降低,低功耗蓝牙15ms就可以匹配上。
低功耗不是协议达成,是硬件决定
蓝牙系统
蓝牙系统
天线单元
链路控制(硬件)单元
---------------------------- 上面都是硬件,下面都是软件
链路管理(软件)单元
软件(协议)单元
蓝牙类别和版本
三个类别,四个版本(还是5个?)
现在蓝牙(V4.0的蓝牙)主要分三类
br/edr
le
amp
版本从 v1.0 到 v5.0 ,5个版本
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cc0d3932ef388d69db99e0e951bfdc05.png)
蓝牙系统详解
全是硬件,怎么实现?
全是硬件,怎么实现?
全是软件,是怎么实现的?
CSR
BlueZ
BlueDroid
Broadcom BSA
纯硬件(浅绿色部分)就是蓝牙硬件模块(一般是芯片中的一个模块),下面就以蓝牙模块(硬件)代指浅绿色部分
这个蓝牙模块需要驱动程序,来控制蓝牙模块(硬件)工作.
这个驱动程序提供给其他软件的接口(这个接口包括硬件和软件接口)为 HCI,其他软件不会直接操作蓝牙模块,只会通过 该驱动程序,准确来说是该驱动程序提供的 HCI 来操作硬件.
一般驱动程序提供的接口不是 API 吗?不是纯软件的吗?
是的,但是蓝牙模块可以 单单 以模块存在,然后驱动程序跑在蓝牙模块上.
如果其他软件(想要使用该驱动程序的软件)想要调用这些接口,就要看 该软件 是否和 蓝牙模块上的驱动程序是否在同一cpu上.
如果是,则是纯软件接口.如果不是,那除了软件接口还需要考虑硬件接口,例如硬件接口可能是串口,可能是usb接口.
Link Manager 的主要内容一般是 驱动该蓝牙模块(硬件)的 驱动程序
该驱动程序一般提供什么样的软件 API
1. 定义数据包结构/信道
2. 发现/连接程序
3. 发送/接收数据。
L2CAP
从0开始
一开始涉及的 ble 蓝牙协议只有一种 profile ,那么就不需要用到 L2CAP .
此时想再弄一个 profile ,问题就来了.
如果两个应用并发调用驱动,怎么办?显然会出现问题.
有人就说了,那应用处理吧,应用就不干了,我用你的协议,还要处理你内部的并发,这不合理
有人就说了,说的也是,那蓝牙协议栈处理吧,于是,蓝牙协议栈内部为了解决这个计算机难题,就在蓝牙协议栈中加了一层.(该层用来去并发),做出来了之后,各种好处就出来了.又增又补的,这一层的功能又多了起来.
从0 开始
有很多应用,每种应用都要处理自己的封包,
例如 蓝牙耳机使用的 蓝牙音频协议.
应用1 想用 蓝牙传输音频 ,对不起,蓝牙传输音频的协议没有,自己实现吧,于是,应用1实现了一套
应用2 想用 蓝牙传输音频 ,对不起,蓝牙传输音频的协议没有,自己实现吧,于是,应用2实现了一套
应用3 想用 蓝牙传输音频 ,对不起,蓝牙传输音频的协议没有,自己实现吧,于是,应用3实现了一套
...
有些人一看,得了,这么多人用蓝牙传输音频, 我能不能将一些 通用的 蓝牙传输音频 的代码抽出来,单独做出来,然后别人再实现的 这种应用的时候,直接调用不就行了.ok,于是,出来了 一种 通用的应用协议.
然后麻烦事就来了,这些协议放哪里呢?
照旧,新增一层,这层就放到 L2CAP 和 之前的 app 层 中间吧.用于存放各种 通用应用协议
虽然历史不是这么发展的,但是应该是这么理解的.
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/65b71b1be99a668eef75877f03403fe4.png)