RADIO SPECIFICATION
1. 工作频段
蓝牙工作在2.4G的频段。RF通道就是我们通常说的传输的通道,它一共有79个通道(BLE为40个通道),从2.402GHz开始,每隔1MHz有一个RF通道。
蓝牙采用跳频技术 (Frequency-Hopping Spread Spectrum),將時間切成一段一段的時槽,每个时槽的长度为625μs , 每換一時槽即換一頻道 ,其跳頻速率為1600hops/sec(=1000000微秒/625微秒)(注意:在page 和 Inquiry 跳频为 3200跳/s) 。其主要目的是避免干扰和安全考虑 。蓝牙网络中依据master的mac地址和Clock来决定一个伪随机跳频序列,整个网络上的设备根据这个序列同时切换通道。
2. 传输速度
蓝牙的调制方式分为 Basic Rate 和 Enhanced Data Rate ,其中前者是必须实现的。另外 Enhanced Data Rate 使用 PSK 调制方式有两个变种 : π/4-DQPSK 和 8DPSK 。他们的数据传输数度分别为:
- Basic Rate : GFSK 1Mbps
- Enhanced Data Rate :π/4-DQPSK 为 2Mbps,8DPSK 为 3Mbps
蓝牙3.0+HS 集成802.11PAL最高速度可达24Mbps,是2.0速度的8倍。
3. 传输功率
蓝牙的传输功率分为3个级别,通常情况下传输距离分别在100、10、1米范围内。
BASEBAND SPECIFICATION
1. 时钟
蓝牙的时钟为3.2kHz。就使用的时钟而言,master就是使用的它的native的时钟,而slave则是在它的native时钟上加上对应的offset得到和master同步的时钟。这个offset是在inquiry过程中交互得到的。为了防止时钟的偏移,slave在每次收到master的packet的时候都需要刷新offset。
2. 蓝牙设备地址
每一个蓝牙设备都会被分配唯一一个48位bt_addr,该地址的结构如下图,其中分为LAP(24位地址低端部分)、UAP(8位地址高端部分)和NAP(16位无意义地址部分)。其中,NAP和UAP是生产厂商的唯一标识码,必须由蓝牙权威部门分配给不同的厂商,而LAP是由厂商内部自由分配。
其中NAP和UAP可以在 IEEE 查询到
3. 物理信道(Physical Channel)
Physical Channel是piconet区分的标准,它是蓝牙系统结构层次中的最底层了。不同物理信道(意味着不同piconet)有不同时钟和调频序列 HFSS(frequency hopping spread spectrum) 。Physical Channel通常可以分为四种类型:
- basic piconet channel:两个已经连接设备之间通信使用
- adapted piconet channel:两个已经连接设备之间通信使用,用于连接支持AFH(Adapter Frequency Hopping)的设备时使用的。
- inquiry scan channel:用于discovering蓝牙设备
- page scan channel:用于连接蓝牙设备
- synchronization scan physical channel: 用以获取无连接从属广播物理链路的时间和频率信息
在已连接设备的通信中,会把通道分为以625μs为单位的时间长度(slot),每个slot 会被标记为0到227-1,总共227为一个cycle。使用的是TDD的策略进行传输,可以理解为TX和RX是时分双工的。需要注意的是packet的开始和slot的开始需要是对齐的。从目前的packet type来看,最长会占用5个time slot。多packet的slot传输情况见下图。其中k为时间,f(k)为时间k时的频率。
从目前来看,各种packet type所占的slot只有三种,分别占1,3,5个slot,暂未有偶数个的slot的packet出现。另外,需要注意的是master的tx需要在奇数个的slot开始,rx必须在偶数个的slot开始。也就是说 master 使用偶数 slot 传输,slave 使用奇数 slot 传输。
inquiry 和 page scan channel 与上面最大的不同之处在于为了更好地利用时间,他不是625μs才发送一次,而是在625μs中发送了两次,也就是312.5μs发送一次,这也是蓝牙clk最小的时间间隔了。于是从master的角度来看,我们可以看到的内容就如下图所示了。
4. 逻辑传输
一个master在同一个物理通道上是可以对应多个slave的。在逻辑层,是通过一个称之为“逻辑传输地址”(LT_ADDR)来进行区分各个slave的。它的长度是3个bit,全0是用来广播的。因为是用来区分slave的,所以只有slave才有这个地址,master是没有的。需要注意的是这个地址只有在slave活跃的时候才有效,当他断开或者parked的时候,这个地址就立即没有了。
目前来看一共有5种类型的逻辑传输层位于物理链路上。他们分别是:
- SCO:Synchronous Connection-Oriented 即面向连接的同步逻辑传输,用来传输语音等对时间比较敏感的数据信息的
- eSCO:Extended Synchronous Connection-Oriented 扩展的面向连接的同步逻辑传输,支持重传
- ACL:Asynchronous Connection-Oriented 面向连接的异步逻辑传输
- ASB:Active Slave Broadcast 活跃的slave广播逻辑传输
- PSB: ParkedSlave Broadcast 休眠的slave关闭逻辑传输
- CSB: Connectionless Slave Broadcast (CSB) logical transport.
5. PACKETS
数据包的格式根据 base rate 和 enhanced data rate 又有不同。
Basic Rate:
ACCESS CODE : 长度是68或者72bit,当HEADER域没有的话就是68,否则就是正常的72bit。他是用来同步和DC偏移补偿的。更通俗地来讲他是同一个piconet上的标志,也就是一个piconet上(即同一个物理通道上)传输的packet的ACCESS CODE是相同的。其中Access Code又分为3种 :
HEADER : 包含用于链路控制的信息
PAYLOAD : 就是信息内容,他的大小最大是2745bit。
总得来说,一个Basic Rate的packet可以由上面三者的以下组合组成:
1)ACCESS CODE;
2)ACCESS COED + HEADER;
3)ACCESS CODE + HEADER + PAYLOAD;
Enhanced Data Rate : 这里的ACCESS CODE和HEADER是和Basic Rate一样的。事实上,我们可以理解为后面的都是payload的部分,只不过在payload部分,我们强制使用了一些头和尾的内容。
Guard :保护间隔,它要来表示HEADER的结尾到SYNC开始之间的时间。范围是4.75μs到5.25μs。
Sync :同步序列,DPSK使用的同步序列。
Enhanced data rate payload :对应的负载。
Trailer :payload的尾,其实他们都是0,对π/4 DQPSK调制而言是0000,对8DPSK的调制而言是000,000.
下面再来看一下Header 的结构:
Header域包含了很多链路控制的信息,不过总得来说,可以总结为6个部分:
LT_ADDR : 3bit的逻辑传输地址,他是用来表示master是把这个包发给哪一个slave的。或者这个包是从哪个slave发送过来的。
TYPE : 表示packet的类型
FLOW : 是流控位,只有在ACL逻辑传输的时候才会使用,当RX buffer满的时候,就会把这个位置0,表示stop。当buffer又空了之后,就会把这个位置为1告诉TX可以继续发送了。需要注意的是ACL-C以及SCO,ESCO是不能使用这个位的。
ARQN : 是用来告知tx放,payload是成功传输的,就是通过了CRC校验。
SEQN : 就是数据流的sequence number。
HEC : 就是前向纠错。
根据 TYPE 和 逻辑传输的类型就可以获得该 packet 的类型 。
下面主要介绍5个common packet type, 这几种Type称为Link control packets:
ID Packet :这个packet就是上文提到的只有ACCESSCODE那一种packet。我们之后提到的inquiry msg就是一个ID Packet。
NULL Packet :这个packet只有ACCESS CODE和HEADER。一般来说他是用来返回链路信息的,比如什么rx buffer状态,或者ARQN之类的。他不需要对端的确认。
POLL Packet :和NULL Packet是类似的,比较大的差别就在于它需要对端回确认信息。需要注意的是不能会POLL Packet,否则就没玩没了。
FHS Packet :这个包的特别之处在于他包含了发送的clk信息和address信息,在page等开始的同步过程中起到了很大的作用。
DM1 Packet :这个packet的特别之处在于所有逻辑链路的控制信息都需要允许这种包,不过他也能传输data,不过仅限于ACL链路中,从一定程度上来说,可以认为他是一种ACL的packet。
其他类型的 packet 类型大概可以分为
(1)SCO Packets
HV1 Packet, HV2 Packet, HV3 Packet,DVPacket。
(2)eSCO packet
EV4、EV5 for Basic Rate
2-EV3,3-EV3,2-EV5,3-EV5 for Enhanced Data Rate
(3)ACL Packrt
DM1, DH1, DM3, DH3, DM5, DH5 and AUX1 for basic Rate
2-DH1, 3-DH1, 2-DH3, 3-DH3, 2-DH5 and 3-DH5 for Enhanced DataRate