蓝⽛协议栈(Bluetoothstack)简介
1 前⾔
本⽂只要对蓝⽛协议栈做⼀个简单介绍,包含hci层、acl链路、
1
l2cap层,sdp服务及⼏个常见的profile,让初学蓝⽛协议栈的⼈
对整个蓝⽛协议栈有⼀个整体框架的了解。
2 HCI层
HCI(host communication interface)主机通讯端⼝,它主要为上层提供了⼀个统⼀的通讯端⼝,其主要⽤于传输命令和时间。⼤概关系图如下、
host(⽤户app)对蓝⽛的控制都是发送通讯协议中定义的命令来控制蓝⽛进⼊到响应的⼯作模式,蓝⽛处理之后会以事件的⽅式返回通知主机。
协议数据格式
HCI传输的数据格式有4种类型,分别为命令,acl,sco和事件,在协议数据中对应的type分别为、
command(0x01) command pocket
acl(0x02) ACL Data pocket
sco(0x03) SCO Data Packet
event(0x04)event主要是be设备在有事件发⽣时通知主机
command pocket
command pocket的数据格式如下,⼤家也可以阅读蓝⽛的协议栈⽂档去了解。
opcode为命令操作吗,由ocf与ogf组成。
opcode为命令操作吗,由ocf与ogf组成。
ACL Data pocket
acl主要⽤于主从设备之间数据的异步交换,⽐如⾳乐播放,我们的l2cap就是使⽤的是该模式。数据包的协议数据格式如下、
handle表⽰当前通信通道的句柄,PB Flag(packet boundary flag)表⽰包的可接收到的层。
SCO Data Packet
SCO主要⽤于ble与host之间同步数据的传输,数据包格式如下、
handle如上描述、PSF如下、
Event Packet
event主要是be设备在有事件发⽣时通知主机,格式如下。
2.1 Hci命令及应答的控制
由于不同的hci命令对结果有不同的处理,有的不需要结果,有些需要1
等待结果后才能执⾏下⼀步动作,有些在⼀定状态下才有效,对这样在hci层,都有⼀套机制,每发送⼀个命令,都会先检查当前是否可以发送该命令(有时hci controller当前不能接收命令时,也不能发送),若命令可以发送,检查该命令是否⼀定需要等待结果,并且等待结果的超时时间是多少,然后启动⼀个定时器监测该命令的返回结果,若超时还没有结果,就执⾏命令超时处理。
2.2 hci分组
《蓝⽛协议及其源代码分析》 208页
《bluetooth_Core_v4.2.pdf》779页
《蓝⽛协议及其源代码分析》该书可以购买或从⽹上下载,这⾥标志的是⽹上下载的版本,⾮完整版本,若对不上号,⾃⼰对应位置。
《bluetooth_Core_v4.2.pdf》下载地址:
2.3 HCI CONFIGURATION PARAMETERS
《bluetooth_Core_v4.2.pdf》787页
2.4 链路控制指令
《蓝⽛协议及其源代码分析》 214页
《bluetooth_Core_v4.2.pdf》813页
2.5 链路策略命令
《蓝⽛协议及其源代码分析》 216页
《bluetooth_Core_v4.2.pdf》926页
2.6 主机控制器和基带命令
《蓝⽛协议及其源代码分析》 216页
《bluetooth_Core_v4.2.pdf》951页
2.7 信息参数命令
《蓝⽛协议及其源代码分析》 218页
《bluetooth_Core_v4.2.pdf》1097页
2.8 状态参数命令
《蓝⽛协议及其源代码分析》 218页
《bluetooth_Core_v4.2.pdf》1110页
2.9 测试命令
《蓝⽛协议及其源代码分析》 218页
《bluetooth_Core_v4.2.pdf》1138页
2.10 事件
《蓝⽛协议及其源代码分析》 219页
《bluetooth_Core_v4.2.pdf》1152页
2.11 BLE控制器命令
《bluetooth_Core_v4.2.pdf》1271页
3 ACL链路
L2CAP的通信是基于ACL链路的,两个蓝⽛设备之间只有⼀条ACL链
1
路,由Connect Handle标识。在进⾏L2CAP的任何通信之前,都
需要先建⽴ACL链路,两个蓝⽛设备的配对,先建⽴⼀条ACL通
码。ACL链路建⽴后,就会进⾏L2CAP的⼀些交互,获取信息,但
需要基于SDP profile获取信息时,L2CAP就会建⽴⼀条SDP逻辑链
路(由Channel ID标识),SDP的交互就在L2CAP建⽴的Channel
上进⾏,SDP交互完成后,会断开SDP的逻辑链路,若后⾯没有其
它再需要交互的,ACL链路也会断开,但由于已经配对过,上层会
保存ACL配对的信息。
4 L2CAP层
4.1 l2cap层位置
4.2 L2CAP包
《bluetooth_Core_v4.2.pdf》1737页
L2CAP包的类型有CID(Channel ID)确定:
0x0000 Null identifier(不使⽤)
0x0001 L2CAP Signaling channel(信令信道)
0x0002 Connectionless channel(⽆连接信道,⽤于⼴播)
0x0003 AMP Manager Protocol
0x0004 Attribute Protocol(BLE)
0x0005 Low Energy L2CAP Signaling channel(BLE信令信道)
0x0006 Security Manager Protocol(BLE)
0x0007 BR/EDR Security Manager
0x0008-0x001F Reserved
0x0020-0x003E Assigned Numbers
pending0x003F AMP Test Manager
0x0040-0xFFFF Dynamically allocated(建⽴连接后动态分配的信道,承载profile数据)4.3 CONNECTION-ORIENTED CHANNELS IN BASIC
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论