zoukankan      html  css  js  c++  java
  • 蓝牙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的介绍就先到这里



  • 相关阅读:
    判断添加用户名的唯一性
    显示用户登录用户名
    security安全框架,用户登录安全认证与退出
    mybatis分页助手分页
    javaWeb删除一条及多条数据
    javaWeb手动分页步骤
    自定义格式日期
    iOS开发UI篇—懒加载
    IOS-添加分段控件SegmentControl
    iOS设计模式——Category
  • 原文地址:https://www.cnblogs.com/libs-liu/p/9491173.html
Copyright © 2011-2022 走看看