蓝牙baseband概述

从蓝牙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的介绍就先到这里



原文地址:https://www.cnblogs.com/libs-liu/p/9491173.html