zoukankan      html  css  js  c++  java
  • Bluetooth Baseband介绍

    1. 介绍

    蓝牙的radio工作在2.4GHz的ISM Band(2400-2483.5 MHz),信道间隔1MHz,采用跳频技术

    2. 概述

    在连接(CONNECTION)状态, synchronization train和synchronization scan子状态每秒至少1600次
    在inquiry和page子状态时为每秒至少3200次/s

    蓝牙有如下的连接方式

    image

    蓝牙通过空气来传播数据,定义了两种模式

     - Basic Rate(强制模式):          1 Mbps
     - Enhanced Basic Rate(可选模式): 2 Mbps和3 Mbps

    2.1 时钟

    在蓝牙中有四种时钟(Clock)

     - CLKR:  reference clock (由运行系统时钟驱动)
     - CLKN:  native clock    (CLKR的偏移量)
     - CLKE:  estimated clock (CLKN的偏移量,page scan中使用)
     - CLK:   master clock    (Piconet的Master时钟)

    时钟决定了触发事件和关键周期,蓝牙系统中有四个重要周期: 312.5 μs, 625 μs, 1.25 ms, and 1.28 s
    这些周期分别对应时间的比特位0,1,2,12
    image

    2.2 寻址方式

    每个蓝牙设备都应该有唯一的48-bit设备地址(BD_ADDR),结构如下图

    image

     - LAP: Lower Address Part 
     - UAP: Upper Address Part 
     - NAP: Non-significant Address Part

    LAP有64个保留地址(0x9E8B00-0x9E8B3F);其中0x9E8B33是一般用于查询

    3. 物理信道

    物理信道(Physical Channels)是蓝牙系统的最底层;两个互相通信的设备通过将收发器(transceivers)调谐到同一RF频率来共享物理信道;蓝牙设备通过时分复用来支持多个操作的同时进行

    蓝牙定义了五种物理信道

     - basic piconet physical channel:        用于特定piconet中两个已经连接的设备之间的通信
     - adapted piconet physical channel:      用于特定piconet中两个已经连接的设备之间的通信
     - page scan physical channel:            用来连接设备
     - inquiry scan physical channel:         用来发现远端设备
     - synchronization scan physical channel: 以获取无连接从属广播物理链路的时间和频率信息

    4. 物理链路

    物理链路(Physical Links)表示两个设备间的基带(Baseband)连接,总是与某个特定的物理信道相关联

    5. 逻辑传输层

    在Master和Slave之间,可能建立不同类型的逻辑传输层(Logical Transports)
    有六种逻辑传输层

     - SCO:  Synchronous Connection-Oriented logical transport
     - eSCO: Extended Synchronous Connection-Oriented logical transport 
     - ACL:  Asynchronous Connection-Oriented logical transport
     - ASB:  Active Slave Broadcast logical transport
     - PSB:  Parked Slave Broadcast logical transport
     - CSB:  Connectionless Slave Broadcast logical transport

    SCO用于Master和Slave间的点对点传输,通常用于有时间限制的数据(如语音和同步数据);Master通过定期预留时缝(Reserved Slots)来维护SCO
    eSCO在SCO基础上多了一个重传窗口
    ACL同样用于Master和Slave间的点对点传输,但没有预留时缝;Master可以在任意slot上建立和Slave的连接
    ASB用于Master和Active Slaves通信
    PSB用于Master和Parked Slaves通信
    CSB用于Master发送Profile广播

    6. 逻辑链路

    逻辑链路(Logical Links)有六种

     - LC:     Link Control, 用于链路控制层(Link Control Level )和链路管理层(Link Manager Level) 
     - ACL-C:  ACL Control,  用于链路控制层(Link Control Level )和链路管理层(Link Manager Level) 
     - ACL-U:  User Asynchronous/Isochronous, 用于承载用户异步信息
     - SCO-S:  User Synchronous, 用于承载用户同步信息
     - eSCO-S: User Extended Synchronous, 用于承载用户同步信息
     - PBD:    Profile Broadcast Data, 用于承载Profile广播数据

    注意: LC在Packet的Header部分; 其他都在Payload部分

    6.1 LC

    LC携带底层的控制信息,如ARQ,Flow Control,Payload Characterization
    除了没有header的ID Packet,每个Packet都含有LC信息

    6.2 ACL-C

    ACL-C携带Link Manger层交换的控制信息,使用DM1/DV packets
    可由SCO/ACL Logical Transport承载;通过Payload Header的Logical Link ID(LLID)来指示

    6.3 ACL-U

    ACL-U携带L2CAP层用户数据,可能由一个或者多个baseband包来进行传输
    通常由ACL Logical Transport承载,也可由SCO Logical Transport的DV Packet的Data承载
    通过Payload Header的Logical Link ID(LLID)来指示

    6.4 SCO-S/eSCO-S

    SCO-S/eSCO-S携带同步用户数据,只由Synchronous Logical Transports承载

    6.5 PDB

    PBD由CSB Logical Transport承载;PBD携带Profile广播数据,并且数据应该完整,不可分片传输

    6.6 优先级

    ALC-C较之其他Logical Link具有最高优先级;PBD优先级最低

    7. 数据包

    7.1 General Format

    对于Basic Rate,一般格式如下

    image

    对于Enhanced Data Rate,一般格式如下

    image

    General Packet包含三个部分

     - Access Code: 72/68 bits 
     - Header:      54 bits 
     - Payload:     0~2790 bits

    7.2 Bit Ordering

    Baseband在传输时采用Little Endian格式,并有如下规则

     - LSB(Least Significant Bit)对应于B0 
     - LSB先传输 
     - LSB在左边显示

    如3-bit参数X=3 (b0b1b2 = 110),其中1最先传输,0最后传输

    7.3 Access Code

    每个报文以Access Code开始;Access Code标识了一个物理信道,在同一个物理信道中的报文有相同的Access Code

    Access Code有72和68 bits两种
    68 bits的Access Code(The shortened access code)不包含Trailer;也没有Header,用于同步(paging, inquiry, and park)

    Access Code格式如下

    image

    有三种不同的Access Code

     - DAC: device access code 
     - CAC: channel access code 
     - IAC: inquiry access code

    Access Code都是由BD_ADDR的LAP派生
    DAC用于Page、Page Scan、Page Respponse子状态
    CAC用于CONNECTION状态,Synchronization Train子状态,Synchronization Scan子状态
    IAC用于Inquiry子状态,包括一个GIAC(General IAC)和63个DIAC(Dedicated IAC)

    image

    Premble有两种1010/0101,由Sync Word的LSB决定

    image 
    Sync Word由LAP计算得到
    CAC的Sync Word使用Master的LAP来计算;IAC则使用Reserved/Dedicated LAPs;DAC使用Slave的LAP

    Trailer也是两种1010/0101,由Sync Word的MSB决定

    image 

    7.4 Packet 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

    其格式如下

    image

    7.4.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的数据包和广播数据包

    7.4.2 Type

    区分六种不同的Packet,主要有三种功能

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

    7.4.3 Flow

    在ACL Logical Transport中用来进行流控,其对应值含义为

     - 0: STOP indication 
     - 1: GO indication

    在SCO/eSCO(设为1)和CSB(设为0) Logical Transport中Flow位被忽略

    7.4.4 ARQN

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

    在CSB Logical Transport(设为0)中被忽略

    7.4.5 SEQN

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

    在CSB Logical Transport(设为0)中被忽略

    7.4.6 HEC

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

    7.5 Packet Types

    Packet类型与所使用的逻辑传输层(主要针对SCO/eSCO, ACL, CSB)相关联
    由Type字段来指定,可分为4 Segment(如下图)

     - 1th Segment: Control Packet 
     - 2th Segment: Occupying a single time slot 
     - 3th Segment: Occupying three time slots 
     - 4th Segment: Occupying five time slots

    Packets

    7.5.1 Common Packet Types

    有五种通用报文类型

     - ID Packet: 68 bits, 只有Access Code(DAC或IAC), 用于寻呼、探询、响应
     - NULL Packet: 没有Payload, 只有Access Code(CAC)和Header, 固定长度126 bits, 用于通过ARQN、FLOW等字段将链路信息返回给发送端; NULL Packet无需确认
     - POLL Packet: 与NULL Packet类似, 也没有Payload, 但是需要接收端的确认
     - FHS Packet: Frequency Hopping Synchronization, 是一种特殊的控制分组, 它宣告发送方的设备地址和时钟信息, 以实现跳频同步, Payload包含144个信息bits和16 bits的CRC校验码, 然后用速率为2/3的FEC保护, 最终长度为240 bit, 详细见规范 [6.5.1.4 FHS Packet] 
     - DM1 Packet: DM代表Data Medium rate, 1th Segment的一种,可在任意逻辑传输层上传输,用来支持控制信息, 也可用来携带用户数据

    7.5.2 SCO Packets

    有HV1、HV2、HV3和DV Packet这四种

    其中DV Packet包含Data和Voice两种数据,格式如下

    image

    7.5.3 eSCO Packets

    主要是EV Packets
    Basic Rate: EV3、EV4和EV5
    Enhanced Data Rate: 2-EV3、3-EV3、2-EV5和3-EV5

    7.5.4 ACL Packets

    在Asynchronous/CSB Logical Transport上传输
    Basic Rate: DM1、DH1、DM3、DH3、DM5、DH5和AUX1
    Enhanced Data Rate: 2-DH1、3-DH1、2-DH3、3-DH3、2-DH5和3-DH5

    7.6 Payload Format

    Payload中有区分两种字段: 同步数据字段(Synchronous Data Field)和异步数据字段(Asynchronous Data Field)
    ACL Packet只含有异步数据字段; SCO/eSCO只含有同步数据字段(例外: DV Packet两者都含有)

    7.6.1 Synchronous Data Field

    SCO只支持Basic Rate模式,其同步数据字段长度固定,只包含同步数据主体部分

    对于eSCO
    Basic Rate: 由同步数据主体部分和CRC两个部分组成
    Enhanced Data Rate: 由五个部分组成, Guard time、Synchronization sequence、Synchronous data body、CRC code和Trailer

    7.6.2 Asynchronous Data Field

    Basic Rate: 有2、3或4部分, Payload header、Payload body、possibly a MIC, and possibly a CRC code
    Enhanced Data Rate: 有6或7个部分, Guard time、Synchronization sequence、Payload header、Payload body、possibly a MIC, a CRC and a trailer

    其中Payload Header的格式如下

    image

    LLID字段定义如下

    image

    8. 链路控制

    链路控制器(Link Controller)中定义了几种状态

    主状态
     - STANDBY(默认状态)
     - CONNECTION
     - PARK
    
    子状态(建立连接和使设备发现的临时状态)
     - page
     - page scan
     - inquiry
     - inquiry scan
     - synchronous train
     - synchronous scan 
     - master response
     - slave response
     - inquiry respnse

    在CONNECTION状态下,蓝牙设备有四种模式(除活动模式外,其他三种均是节能模式)

     - 保持模式(Hold Mode)
     - 呼吸模式(Sniff Mode)
     - 休眠模式(Park Mode)
     - 活动模式(ActiveMode)

    下图显示了这些状态的转换图(三种Response子状态未显示)

    image

    参考:
    <BlueTooth: 蓝牙基带>

  • 相关阅读:
    进程同步和死锁;事务、悲观锁、乐观锁、表锁、行锁
    快速排序
    oracle索引分类
    数据结构
    MySQL视图
    sql优化的方法
    MySQL索引
    转:关于ROWNUM的使用
    转载:mybatis踩坑之——foreach循环嵌套if判断
    Spring 注意事项
  • 原文地址:https://www.cnblogs.com/hzl6255/p/3840641.html
Copyright © 2011-2022 走看看