从蓝牙specispecification中看,基带协议主要分为8个部分来介绍的,分别是概述、物理信道、物理连接、逻辑传输、逻辑连接、封包、比特流的处理、组网行为。这里面会涉及到很多的概念,主要是在概述中解释这些概念,下面分别来介绍上面的几个部分:

概述

首先,我们先看一下基带处于蓝牙的那一层:

其实现在蓝牙controller中,下面对接的直接是物理层的Radio,上面是controller端的和主机端的接口,以及链路管理模块。

我们这里注意到,上面涉及到了不少概念,我们来解释一下:

Device Manager:顾名思义,其是设备管理模块,我们想想作为一个蓝牙设备它有哪些方面需要管理?答案是该模块负责管理蓝牙设备的名字、link key ,以及一些行为比如扫描、配对、连接等行为。

Baseband resource manager:从名字上,他是负责协调基带资源的,这个也很好理解,蓝牙基带承载很多蓝牙链路,那么这些链路需要分时复用基带资源,Baseband resource manager就是来协调基带资源的。

Link controller:我们看到这个模块直接对接了底层的Radio了,其作用就是对于蓝牙原始封包的编码和解码。

1.1 蓝牙网络

蓝牙的网络结构如上,一般情况下,我们用的最多的是上面的a图所示情况,比如一个手机连接一个耳机进行听音乐。b图的情况虽然不是很多,但是随着蓝牙的普及,还是有很多场景的,比如一台电脑,通过蓝牙连接键盘和鼠标,甚至还可以连接一个蓝牙耳机听音乐。c图的情况目前使用的确不多,这里是组成了一个scatternet,一个master 同时是另外一个网络的slave。

1.2 蓝牙地址

蓝牙地址由两部分组成,高24bit是 company id,低24bit是 公司内部分配的,其中0X9E8B00~0X9E8B3F  是保留的,0X9E8B33是general inquiry 的access code,0X9E8B00 是Limited Dedicated inquiry access code。

我们看看空气包中 inquiry的access code 的确是0x9E8B33:

1.3 access code

那么这个access code 到底是什么呢?其实他就是为了识别某个特定的物理channel 而存在,我们可以把他翻译成接入码,相当于接入信道的通行证,这个物理上面的概念,并非逻辑上面的。

那么这个接入码是由什么组成的呢?它来自于设备的地址的LAP部分,或者是专有的inquiry 地址,这里专有的inquiry地址就是上面讲到的0x9E8B33 ,这个很好理解,因为inquiry 信道的接入码必须是固定的,不能随着设备而改变的,否则他就无法搜索到别的设备。接入码也分为几类:Device access code(DAC)、Channel access code(CAC)、Inquiry access code(IAC),

刚刚已经讲过,IAC不应该是随着设备而改变的,DAC是设备的接入码,他主要使用在page 、page scan 以及page response 的子流程中,它来自于被paged的设备的地址。CAC也很好理解,当两个设备配对之后,那么就会使用CAC 作为信道的接入码来通信,他来自于主设备(master)

1.4 bluetooth clock

设备之前的通信都会有时钟进行同步,蓝牙的时钟是一个28bit的计数器,时钟频率是3.2kHZ,也就是计数器每变化一下就是312.5us,

时钟这里还有几个概念,CLKN、CLKE、CLK

CLKN是本地时钟,它没有指明是master 还是slave,他只是指 设备的本地时钟。

CLKE是预计的对方的时钟,我们看上图,是pager 的本地时钟加上一个预估的offset ,得到了一个对于对方的时钟的一个预估。

CLK:一般就是指master的时钟。主设备的本地时钟就是CLK,从设备的时钟会和主设备的时钟有个offset的差距。

1.5 工作频段

蓝牙工作的频段是2400 – 2483.5 MHz.

物理信道

物理信道是蓝牙通信架构的最底层,当两个设备进行的通信的时候,共享一个物理信道。我们上面讲过了接入码的概念,他是和信道是对应的。总共有五种物理信道:

  1. Basic piconet channel
  2. Adapted piconet channel
  3. Inquiry scan channel
  4. Page scan channel
  5. Synchronization scan physical channel

1.2 都是用于两个设备之前的通信,他们之间的区别是,第二个信道中从设备使用的频点和主设备是一样的,并且他并不会使用全部的79个频点,如果他检测到一些频点受到的干扰比较重,就不会去使用,那么其抗干扰能力肯定会更强一点。

目前市面上蓝牙设备基本都支持Adapted piconet channel,3,4,5用途也很明显,分别是inquiry scan的信道,page scan的信道,以及同步的信道。设备在某个信道上通信的时候,是会不断地跳变频点的,在1、2、5信道上跳变频率是1600hops/s,在3,4 上面是3200hops/s  ,这里我们发现3,4 信道上明显跳变很快,这个很好理解,因为他们处于未连接状态,需要一个快速跳变的频率以完成扫描 配对等动作。

我们简单看下在page scan 信道上面的通信时序:

我们可以看出:

  1. 经过312.5us 之后其page频点变化,也就是3200hops/s
  2. 当slave 收到mster的page信息之后,会过固定时间625us 去 回复这个封包。
  3. slave 在回复了master 的page 封包之后,过312.5us 之后去监听 master 发过来的FHS 包。

inquiry scan的时序图如下:

  1. 经过312.5us 之后其inquiry频点变化,也就是3200hops/s
  2. slave 在收到inquiry消息之后625us之后发送FHS 给对方
  3. 如果还有EIR data 需求传输,那么将在 1250us 之后。

相应的air log 如下:

上面两个例子,我截图的图片都是在一个slot中的靠近开始的地方成功接收到对方的封包的情况,另外一种情况也是类似的,这里不作具体分析。

Physical link

他代表两个设备之间基带层建立的连接,他是基于物理信道之上的概念,两个设备建立连接往往只有一条物理链路,因而每个物理信道上往往只有一条物理link。

Logical Transports

逻辑传输层是基于物理链路层的。specification总共定义了5种(core_v5.0)逻辑链路:

  1. Synchronous Connection-Oriented (SCO) logical transport
  2. Extended Synchronous Connection-Oriented (eSCO) logical transport
  3. Asynchronous Connection-Oriented (ACL) logical transport
  4. Active Slave Broadcast (ASB) logical transport
  5. Connectionless Slave Broadcast (CSB) logical transport.

1、2  是用于传输同步数据的点对点通道,他们对于时间有严格的限制,并且master会通过预留slot的方法来达到同步传输的效果。其中1和2的区别在于2有重传的机制

3也是用于两个设备的点对点的传输,但是其一般传输对时间没有严格要求的数据,属于异步传输。

4和5 是mater 通过广播的方式和各个slave 进行通信。

Logical Links

逻辑链路分为6种:

  1. Link Control (LC)
  2. ACL Control (ACL-C )
  3. User Asynchronous/Isochronous (ACL-U)
  4. User Synchronous (SCO-S)
  5. User Extended Synchronous (eSCO-S)
  6. Profile Broadcast Data (PBD)

LC和ACL-C用于链路控制层(Link Control Level )和链路管理层(Link Manager Level) ,其中LC 存在于packet的header里面,而其他存在payload里面。

ACL-U用于传输用户异步信息 
SCO-S/eSCO-S用于承载用户同步信息 
PBD用于承载Profile广播数据

ACL-C/ACL-U通过Payload Header的Logical Link ID(LLID)来指示

SCO-S/eSCO-s只由Synchronous Logical Transports承载 
ACL-U通常由ACL Logical Transport承载,也可由SCO Logical Transport的DV Packet的Data承载 
ACL-C可由SCO/ACL Logical Transport承载 
PBD由CSB Logical Transport承载

packet

关于packet 部分,我们分为Basic Rate和Enhanced Data Rate

其格式分别如下:

其中access code 我们之前提到过这个概念,他来源于蓝牙设备地址的LAP或者是专门的inquiry address。其由68或者72bit组成,enchanced rate 比Basic 格式的数据多了 SYNC以及TRAILER

6.1access code

access code 的格式如下:

  

其尾部的4个bit根据access code 是否接有header 来决定,其后面有header 的时候,才会有尾部的4个bit 存在。

6.2 header

其格式如下:

包含LC的Header有6个字段,18 bits

• LT_ADDR: 3-bit logical transport address
• TYPE: 4-bit type code
• FLOW: 1-bit flow control
• ARQN: 1-bit acknowledge indication
• SEQN: 1-bit sequence number
• HEC: 8-bit header error check

6.2.1 LT_ADDR

Logical Transport Address(LT_ADDR) 
用来标识在Master-to-Slave中的目的Slave或Slave-to-Master中的源Slave

每个Active Slave都有一个主要的3-bit LT_ADDR 
全零的LT_ADDR用于ASB/PSB广播消息, CSB使用单个非零LT_ADDR 
Master没有LT_ADDR,使用Timing Relative来区分Slaves 
对于eSCO传输方式,每个Slave都有一个次要的LT_ADDR 
Slave只接收匹配主要/次要的LT_ADDR的数据包和广播数据包

6.2.2 Type

区分六种不同的Packet

主要有三种功能 
- 决定使用的Logical Transport(SCO/eSCO,ACL,CSB) 
- 是否使能Enhanced Data Rate 
- 标识Packet类型(SCO/eSCO,ACL)

6.2.3 Flow

在ACL Logical Transport中用来进行流控 
其对应值含义为 
- 0: STOP indication 
- 1: GO indication

6.2.4 ARQN

Automatic Repeat reQuest Number 
确认指示位,指示数据源是否成功地传输了带有CRC的Payload数据

6.2.5 SEQN

Sequence Number 
用来保证数据流有序的传输

6.2.6 HEC

Header Error Check 
用于检测Header的完整性

这里需要注意的一点是,流控针对的数据包,不会对POLL以及NULL包产生影响。

6.3 Payload format

其格式区分了basic和enchanced 两种模式,分别如下:

其主要区别是 EDR 模式的数据包的length 用了10个bit来表示数据从长度。

LLID 的字段的定义如下:

这里需要注意的一点是,这里也有一个流控的标志,这里是针对l2cap的流控。

Link Controller Operation

最近的specification 规范已经拿掉了park state,那么现在只有两个主要的状态是 standby和connection状态,

另外其还有9个子状态:page, page scan, inquiry, inquiry scan,synchronization train, synchronization scan, master response, slave response, and inquiry response

这里主要提一下 关于page scan的两种模式

standard和interlaced,首先看一下相关的概念:

Page Scan Window: amount of time for the duration of the page scan.
Page Scan interval: amount of time between consecutive page scans.
standard: Page Scan interval > Page Scan Window > 11.25ms(18(16)slots)
interlaced: Page Scan interval > 2 * Page Scan Window
Every 1.28s a different freq is selected.

标志模式 page scan 如下:

在每个interval 里面只有一个scan window,并且每个interval期间,其scan 的频点是不变的。

interlaced模式如下图:

他在每个interval里面有两个scan window,所处的频点分别是trainA 和trainB,其条件就是interval要比两个 scan window 要大。

那么关于baseband的介绍就先到这里



蓝牙baseband概述的更多相关文章

  1. 蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)

    关键词:蓝牙核心技术协议  irDA BNEP  AVDTP AVCTP 作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢! )欢迎指正错误,共同学习.共同进步!! 下载链接:Bl ...

  2. 蓝牙(CoreBluetooth)-概述

    蓝牙(CoreBluetooth)-概述 通过此框架可以让你的Mac和iOS应用程序与外部蓝牙设备通信 外部设备: 就是需要通过iOS App控制器的其他设备: 例如:心率检测仪.数字温控器 蓝牙通讯 ...

  3. 蓝牙LMP概述

    LMP 全称是Link Manager Protocol,我们还是要一张图,说明LMP 在哪里? 他是在HCI 以下,baseband 以上,实现在蓝牙控制器中. 按照协议规范,我们分几个部分来分别介 ...

  4. 蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)(转载)

    一.主机控制接口协议  HCI 蓝牙主机-主机控模型 蓝牙软件协议栈堆的数据传输过程: 1.蓝牙控制器接口数据分组:指令分组.事件分组.数据分组(1).指令分组 如:Accpet Connection ...

  5. Qt 蓝牙部分翻译

    这是我第一次尝试翻译技术文档,自己英语太烂,一直不敢尝试,感谢生活,让我勇敢迈出这第一步. 大部分都是直译,如有不妥,还请制导. Qt Bluetooth The Bluetooth API prov ...

  6. [蓝牙嗅探-Ubertooth One] 千元开源蓝牙抓包 Ubertooth One 安装和使用

    目录 前言 1.编译 Ubertooth tools 1.1.准备工作 1.2.编译安装 libbtbb 1.3.编译安装 Ubertooth tools 1.4.Wireshark 插件 1.5.更 ...

  7. 【Bluetooth|蓝牙开发】二、蓝牙开发入门

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! [所有文章汇总] 1.蓝牙基础概念 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电 ...

  8. 一、Stream,sink,source,transform

    1. 蓝牙核心概述 2.Stream,sink,source,transform 在ADK的blueCore里面,Stream作为一个逻辑结构用来描述一个数据终点(data Endpoint).通常, ...

  9. 《深入浅出Windows 10通用应用开发》

        <深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...

随机推荐

  1. Expo大作战(三十四)--expo sdk api之LinearGradient(线性渐变),KeepAwake(保持屏幕不休眠),IntentLauncherAndroid,Gyroscope,

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. python之装饰器函数

    本章内容 引入 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 引入 作为一个会写函数的python开发,我们从今天开始要去公司上班了.写了一 ...

  3. 洗礼灵魂,修炼python(17)--跨平台操作三剑客—os,os.path.sys模块

    os 1.作用: 因为客户基本都是使用不同的操作系统,在不同的系统下,要完成一个项目,那必须跨平台操作,而python本来就是一个跨平台的语言,而有了os模块,则不需要在意什么系统.并且os模块是用于 ...

  4. "error lnk1158 无法运行rc.exe”解决方案

    最近使用VS2012编译时,出现" error lnk1158 无法运行rc.exe”的问题,无法编译生成.exe文件,连最基本的HelloWorld控制台程序都无法运行,重置了VS的默认设 ...

  5. SSRS奇怪报错Could not update a list of fields for the quer.

    今天遇到一个奇怪的问题,SSRS我觉得是个半成品,很多东西都搞不了.写了一段SQL,本来SQL写法都有点怪了,如下 WITH TMP_A AS (SELECT *,ROW_NUMBER() OVER( ...

  6. Lua基础之MetaTable(6)

    Lua基础之MetaTable(6) 转载地址:http://nova-fusion.com/2011/06/30/lua-metatables-tutorial/ 关于MetaTable的补充:ht ...

  7. leetcode 44. Wildcard Matching(模糊匹配)

    搬运工了- - https://blog.csdn.net/jmspan/article/details/51460021

  8. 寒假集训——搜索 B - Sudoku

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream&g ...

  9. http://blog.csdn.net/pipisorry/article/details/51471222

    这个博主很有意思 机器学习之用Python从零实现贝叶斯分类器 参数估计:贝叶斯思想和贝叶斯参数估计

  10. Jenkins忘记密码解决方案

    # 当jenkins忘记了管理用户的密码时,只能通过修改配置文件并重启的方式初始化设置用户名及密码,操作如下: 找到jenkins的配置目录,笔者的jenkins是下载的war包直接丢在tomcat下 ...