一. 声明
本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:
第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。
第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等
第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。
第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)
第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展
第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。
另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。
------------------------------------------------------------------------------------------------------------------------------------------
CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144
蓝牙交流扣扣群:970324688
Github代码:https://github.com/sj15712795029/bluetooth_stack
入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708
------------------------------------------------------------------------------------------------------------------------------------------
二 .HCI概念
HCI提供了访问bluetooth host/control的统一接口,通俗来讲,就是定义了特定的格式由蓝牙协议栈来控制蓝牙芯片来做相应的动作(比如inquiry,connect,disconnect)。并且由蓝牙芯片回应蓝牙协议栈状态以及事件消息。蓝牙HCI在整个蓝牙的架构图如下:
还有一个问题,为什么我们发送的HCI data 芯片能识别并且执行相应的动作呢?
->很简单,蓝牙芯片中也有HCI协议代码,烧到Bluetooth chip中,所以我们发送的data可以被正确的parse,执行相应的动作后再准确的回送给我们response
所以章节可以放在controller的篇去讲,也可以单独的独立章节来讲,但是我们协议栈有实现HCI,所以此部分放在host来说明吧。
我们来大概扫一下HCI的目录,这样以后查阅文档的时候我们能更快找到我们想要的地方,
蓝牙Core文档HCI目录介绍如下:
可以看到整个HCI的章节分为以下几个小节
1)contents -> 整个HCI章节的介绍
2)Introduction -> HCI的总体介绍,有以下结构图,主要跟我们上面画的架构图类似,但是我们更加细化。跟我们架构图的对应关系是:
- BR/EDR/LE controller
- AMP controller(BT3.0 HS)
- Transport,主要看我们Transport章节介绍
- Host,蓝牙协议栈
点对点发送图示(先来看张原图哈):
然后来看下我涂鸦的图片:
图示中红色是:BR/EDR/LE local跟remote交互数据的path
图示中绿色是:BT3.0 HS local跟remote交互数据的path
3)OVERVIEW OF HOST CONTROLLER TRANSPORT LAYER
主要介绍下Transport层,详细见下我们Transport章节
4)OVERVIEW OF COMMANDS AND EVENTS
总体汇总HCI command 和event.这里面牵扯内容较多,我们在后续command/event章节做详细介绍,需要注意以下几个术语:
For the respective Core Configuration,
the letter “M” indicates that it is mandatory to claim support,
“O” indicates that it is optional to claim support, “P” indicates that it is optionally permitted to claim only partial support of the Core Configuration,
“I” indicates that the Core Configuration is inherently included inthe combined
Core Configuration,
“E” indicates that support for the Core Configuration shall not be claimed
5)HCI FLOW CONTROL,主要讲解下HCI流控,在后续章节会介绍
6)HCI DATA FORMATS,分为,具体格式在后续章节会介绍
HCI command(蓝牙协议栈--->蓝牙芯片)
HCI event(蓝牙协议栈---蓝牙芯片)
HCI acl(蓝牙协议栈 蓝牙芯片)
HCI sco(蓝牙协议栈 蓝牙芯片)
HCI iso(蓝牙协议栈 蓝牙芯片)
7)HCI CONFIGURATION PARAMETERS,HCI data的参数,在command/event会捎带讲解几个,但是不会全讲解
8)HCI COMMANDS AND EVENTS HCI command & event,在后续章节会介绍,重点章节!!
9)APPENDIX A:DEPRECATED COMMANDS, EVENTS, AND CONFIGURATION PARAMETERS
->被抛弃的command/event/数据参数