我爱蓝牙网 - 52Bluetooth - 最具人气蓝牙技术交流网站

标题: 【转载】蓝牙核心协议,芯片结构,源码和移植 [打印本页]

作者: 326159487    时间: 2013-5-2 17:51
标题: 【转载】蓝牙核心协议,芯片结构,源码和移植
1 Bluetooth Core System Protocol(蓝牙核心协议)蓝牙技术规范(specification)包括核心协议(protocol)和应用规范(profile)两个部分。
核心协议包含蓝牙协议栈中最低的4个Layer,和一个基本的服务协议SDP(Service Discover Protocol),以及所有应用profile的基础Profile GAP(General Acess Profile)。核心协议是蓝牙协议栈中必不可少的。
除了核心协议外,蓝牙规范必须包含一些其他的应用层的服务和协议--应用层profile。
蓝牙协议栈通常有如下内容:

而蓝牙的核心系统协议为最低的4个Layer,再加上应用层profile SDP,包括:RF,LC(link control),LM(Link Manager),L2CAP(Logical Link Control and Adaptation Protocol),SDP。核心系统的架构图如下,为简明起见,没有画出SDP。

最低的3个Layer经常也看作一个子系统,叫Bluetooth Controler。Bluetooth Controler和包括L2CAP在内上层Profile之间的通信,是通过HCI(Host to Controler Interface)进行。HCI以下的内容Bluetooth Controler由蓝牙芯片实现,以上的内容由Bluetooth Host(比如手机Baseband)实现。
蓝牙核心系统通过一系列Service Access Point(如上图的椭圆部分所示)提供服务,这些服务包含了对蓝牙核心系统的最基本和原始的控制。可以分为3种类型:Device Control Service,修改蓝牙Device的行为,状态和模式;Tansport Control Sevice,创建修改和释放traffic bearers(信道和链接);Data Service,在Traffic bearers上进行数据传输。
由于蓝牙架构通过HCI将Controler和Host独立开来,所以对Controler做了一些基本假设。假定与Host相比,蓝牙Controler的数据buffer能力有限。所以L2CAP会对host传输给Controler的数据做预处理,数据包大小适合蓝牙Controler的buffer能力;L2CAP还会对数据进行质量控制和纠错。
对蓝牙核心系统协议的测试通过TCI(Test Control Interface)进行。
2 蓝牙芯片(Bluetooth Controler)结构蓝牙芯片,即上一节所说的Controler,实现的是蓝牙协议栈中最底3层的协议,RF,LC,LMP。用在Feature Phone上时,蓝牙芯片作为Slave挂在BB上(不知Smart Phone是不是挂在AP上)。他是一个相对独立完整的子系统,拥有自己的RF,基带,CPU,数据总线和存储设备。通过USB或UART(通常是UART)与Host通信,上一节架构图的HCI,物理上所依赖的便是UART或USB。如下图所示:

其中蓝牙基带控制器是蓝牙硬件模块的关键模块。其主要功能是在微处理器控制下,实现蓝牙基带部分的所有实时处理功能,包括负责对接收的bit流进行符号定时提取和恢复;分组头及净荷的循环冗余度校验(CRC),分组头及净荷的前向纠错码FEC处理,加密和解密处理等,且能提供从基带控制器到其它芯片的接口等。CPU一般采用RISC结构的嵌入式微处理器,如ARM7TDMI微处理器,才能满足对蓝牙核心协议的高速处理和大量数据bit流的处理。Flash 存储器用于存放基带和链路管理层中的所有协议软件。SRAM作为CPU 的运行空间,在工作时把Flash中的软件调入SRAM中处理。射频收发器负责接收或发送高频的通信信号。UART和USB接口提供到HCI的主机控制器接口传输层的物理连接,是上层协议与蓝牙硬件模块进行通信的通道。蓝牙测试模块主要提供无线层和基带层的认证和一致性规范,同时还管理产品的生产和售后的测试,为可选模块。
3 蓝牙源码和移植由上2节的内容可知,蓝牙芯片(Bluetooth Controler)实现的是协议栈最底下的3层,即HCI以下的部分;而Host实现HCI以上的内容,其中属于蓝牙核心协议的L2CAP和SDP是必须实现的,其他的Profile是可选的。
因此,除了蓝牙芯片厂商(如博通,CSR)外,其他使用蓝牙芯片的厂商不需要关注Bluetooth Controler(Slave端)的内容,而只是实现Host端的内容。当蓝牙芯片挂到不同的软硬件平台上时,软硬件只需要处理HCI相关的部分。
现在用得很广的Bluetooth源码是Linux下的BlueZ,源码包可以在BlueZ的官网http://www.bluez.org/download/下载到。将BlueZ移植到具体的硬件平台时,只需要关注HCI部分,HCI所依赖的硬件是UART或USB,大多数情况下是UART,所以移植蓝牙源码仅需要需要关注UART 驱动;另外加上电源开关。以Android为例:
(1)UART 驱动
BlueZ内核子系统通过守护进程hciattach 与特定硬件的UART驱动进行绑定。
以MSM7201A为例,参考drivers/serial/msm_serial.c。你可能还需要编辑init.rc 中hciattach 的命令行选项。
(2)蓝牙电源开关
Android V1.0与之前的版本采用不同的方式控制蓝牙芯片的电源开关。
1.0:Android 框架向/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on 写0或1.
Post1.0: Android 框架使用 linux中 rfkill 的API。
可以参考 arch/arm/mach-msm/board-trout-rfkill.c。
4 Referencehttps://www.bluetooth.org/apps/content/
http://www.avrw.com/article/art_104_1071.htm
http://blog.csdn.net/dinuliang/archive/2010/07/07/5717382.aspx
http://www.bluez.org/download/

原文地址:http://blog.csdn.net/evanwu_85/article/details/6316780
作者: goldenwater    时间: 2013-5-2 20:55
很精辟的蓝牙基础知识。
Bluetooth core specification中有很大部分的内容都是这些知识,这篇文章总结得不错。
作者: bidezhi7777    时间: 2013-7-27 13:19
thankyou support you  ! i see
作者: luoguangqi    时间: 2013-8-12 14:19
不错的蓝牙协议解释
作者: martin221    时间: 2013-8-26 21:41
好东西,顶一个,谢谢分享!
作者: gdsdpcb    时间: 2013-9-3 11:32
非常不错的蓝牙协议解释
作者: ldch    时间: 2013-10-1 12:35
不错的蓝牙协议解释
作者: whljsh    时间: 2013-11-4 10:50
好东西,学习。
作者: yuewen20080812    时间: 2013-11-4 11:54
学习了  谢谢斑竹
作者: tsdeng    时间: 2013-11-5 22:37
不错,不错,相当好的科普
作者: smx    时间: 2013-11-6 15:58
学习了  谢谢。
作者: cnc2020    时间: 2013-11-17 20:37
good job
作者: 342756469    时间: 2013-11-17 23:16
楼主太专业了
作者: dragon20100708    时间: 2013-11-18 09:14
好好学习,天天向上
作者: hsintung    时间: 2013-11-18 09:28
这资料太好了,对学习BT的很有帮助
作者: hangkzhou    时间: 2013-12-24 13:48
牛逼牛逼的,哈哈哈哈哈哈哈哈哈
作者: Diana    时间: 2013-12-24 15:25
挺好 正要学习
作者: tony_bian    时间: 2013-12-24 15:44
学习学习学习学校学东西
作者: hangkzhou    时间: 2013-12-29 12:07
不错不错的东东啊啊啊啊啊啊啊啊啊啊
作者: josoncao    时间: 2014-1-20 14:44
不错的蓝牙协议解释
!!!1
作者: chief    时间: 2014-2-9 12:12
很精辟的蓝牙基础知识。
这篇文章总结得不错。
作者: 秋天    时间: 2014-2-9 17:49
不错的资料,学习下。
作者: centuryair    时间: 2014-3-10 10:54
Mark  学习蓝牙中..
作者: xiaoquelinyuan    时间: 2014-3-10 13:54
高深莫测啊
作者: yilujiangnan    时间: 2014-3-10 17:07
学习学习 不错
作者: sunfly7    时间: 2014-4-7 12:40
标记一下,打算学习蓝牙中。。。
作者: chrisxie    时间: 2014-4-10 02:01
非常不错的代码,可以很好的学习。谢谢!
作者: xfqjklw    时间: 2014-4-10 10:04
谢谢 学习了
作者: zbfanxin    时间: 2014-5-20 14:12
支持。。。。。。。。。。。。
作者: developer04    时间: 2014-8-14 18:28
相当cool  信息量很大 多了解了不少
作者: 秋天    时间: 2014-8-15 09:42
好好学习,天天向上。
作者: xxhuan_2003    时间: 2014-8-24 11:05
很好的一个说明呢
作者: wangai1qiang    时间: 2014-8-25 20:36
kanbudao aaaaaaaaaaaa
作者: lingxfeng    时间: 2014-11-21 18:15
不错的蓝牙协议解释
作者: xbx    时间: 2015-2-15 10:49
非常不错的蓝牙协议解释
作者: hnylcz    时间: 2015-3-27 08:14
逛论坛 赚积分 下资料
作者: liyimin2001    时间: 2015-4-9 15:55
不错的蓝牙协议解释

作者: 蓝愿    时间: 2015-6-30 12:32
路过学习ing。。。。。

作者: eben_yl    时间: 2015-7-22 13:47
非常不错的解释

作者: breaknormal    时间: 2016-4-15 16:04
不错,对蓝牙整体上有了了解


作者: Rhino007    时间: 2017-11-24 23:44
路过,小白受益匪浅!楼主继续转好文章,,,
作者: 蓝晨若溪    时间: 2020-10-29 17:26
总结的不错,学BT先弄清楚其架构流程,在逐步细节化
作者: pp55m    时间: 2021-1-20 14:08
路过,学习中
作者: Eric9527    时间: 2021-7-4 14:03
谢谢楼主分享
作者: Kok_Keong_国强_    时间: 2021-9-3 11:33
谢谢
作者: 国强    时间: 2021-9-3 14:22

作者: rickzxy    时间: 2024-4-10 22:20
谢谢分享!




欢迎光临 我爱蓝牙网 - 52Bluetooth - 最具人气蓝牙技术交流网站 (https://www.52bluetooth.com/) Powered by Discuz! X3.5