3.1 控制器
控制器被很多人视为区分蓝牙芯片或无线电的特征之一。然而,把控制器叫做无线电就有些过分简单化了。蓝牙控制器由同时包含了数字和模拟部分射频器件和负责收发数据包的硬件组成。控制器与外界通过天线相连,与主机通过主机控制接口(HCI)相连。
3.1.1 物理层
物理层是采用2.4GHz无线电、完成艰巨的传输和接收工作的部分。对很多人而言,该层仿佛笼罩着一层神秘色彩。但本质上来讲,物理层其实并没有什么魔法,只不过是简单的传输和接收电磁辐射而已。无线电波通常可以在给定的某个频段内通过改变幅度、频率或相位携带信息。在低功耗蓝牙中,采用一种称为高斯频移键控(GFSK)的调制方式改变无线电波的频率,传输0或1的信息。
频移键控部分是指把1和0通过轻微升高或者降低信号频率进行编码。如果频率在改变的一瞬间突然从一端移向另一端,将会在更宽的频段上出现一个能量脉冲。因此用一个滤波器来阻止能量扩散到更高或更低的频率处。在GFSK的情况下,采用的滤波器的波形与高斯曲线一致。用于低功耗蓝牙的滤波器不像用于经典蓝牙的滤波器那样严格,这意味着低功耗无线电信号比经典蓝牙无线电信号要稍微分散一点。
适当拓宽无线电信号的好处在于无线电将遵循扩频(spread-spectrum)的约束,而经典蓝牙无线电则受跳频的约束。传输时,扩频无线电要比跳频无线电使用的频率更少。如果没有更宽松的滤波器波形,低功耗蓝牙将不能只在三个信道上广播,而不得不使用更多的信道,从而导致系统的能耗升高(如上一章所述)。
无线电信号的适度拓宽称为调制指数。调制指数表示围绕信道的中心频率的上下频率之间的宽度。传输无线电信号时,从中心频率出发超过185kHz的正向偏移代表值为1的比特;超过185kHz的负向偏移代表值为0的比特。
为使物理层能够工作,尤其是应对同一区域有大量无线电同时传输的情形,2.4GHz频段被划分为40个RF信道,各信道的宽度为2MHz。物理层每微秒传输1比特应用数据。例如要发送80比特的以UTF-8格式编码的字符串“low energy”将花费80μs,当然这里没有考虑数据报头的开销。
3.1.2 直接测试模式
直接测试模式是一种测试物理层的新方法。绝大部分的无线标准并未提供对物理层执行标准测试的统一方法。这就导致不同的公司采用专门的办法来测试物理层。这样一来,整个产业的成本增加,对终端产品制造商来说,从一家芯片供应商快速换到另一家的门槛也很高。
直接测试模式允许测试者让控制器的物理层发送一系列测试数据包或接收一系列数据包。测试者随后可以分析收到的数据包,或根据接收的数据包数量判断物理层是否遵循RF规范。直接测试模式不仅能量化测试,还能用于执行线性测试和校准无线电。比如,通过快速命令物理层在指定的无线电频率发送信号,并测量实际收到的信号频率,可以调节无线电直至正常工作。由于这类校准通常需要为每个单元执行,因而拥有一台能够高效地完成测试的设备将为产品制造商节约大量成本。
3.1.3 链路层
链路层是低功耗蓝牙体系里最复杂的部分。它负责广播、扫描、建立和维护连接,以及确保数据包按照正确的方式组织、正确地计算校验值以及加密序列等。为了实现上述功能,定义下列三个基本概念:信道、报文和过程。
链路层信道分为两种:广播信道和数据信道。未建立连接的设备使用广播信道发送数据。广播信道共有三个—再次说明,这一数字是在低功耗和鲁棒性之间折中的产物。设备利用该信道进行广播,通告自身为可连接或可发现的,并且执行扫描或发起连接。在连接建立后,设备利用数据信道来传输数据。数据信道共有37个,由一个自适应跳频引擎控制以实现鲁棒性。在数据信道中,允许一端向另一端发送数据、确认,并在需要时重传,此外还能为每个数据包进行加密和认证。
在任意信道上发送的数据(包括广播信道和数据信道)均为小数据包。数据包封装了发送者给接收者的少量数据,以及用来保障数据正确性的校验和。无论在广播信道还是数据信道,基本的数据包格式均相同,每个数据包含有最少80比特的地址、报头和校验信息。图3-2显示了链路层数据包的大致结构。
8比特前导优化数据包的鲁棒性,这一长度足够接收者同步比特计时和设置自动增益控制;32比特接入码在广播信道数据包中是固定值,而在数据信道数据包中是完全随机的私有值;8比特报头字段描述数据包的内容;另一个8比特长度的字段描述载荷的长度,由于不允许发送有效载荷长度超过37字节的数据包,不是所有的比特都用来记录长度;紧接着是变长有效载荷字段,携带来自应用或主机设备的有用信息;最后是24比特的循环冗余校验(CRC)值,确保接收的报文没有错误比特。
可以发送的最短报文是空报文,时长为80μs;而满载时的最长报文时长为376μs。大部分广播报文只有128μs,而大部分数据报文时长为144μs。
3.1.4 主机/控制器接口
对于许多设备,主机/控制器接口(HCI)的出现为主机提供了一个与控制器通信的标准接口。这种结构上的分割在经典蓝牙里十分盛行,有60%以上的蓝牙控制器都使用HCI接口。它允许主机将命令和数据发送到控制器,并且允许控制器将事件和数据发送到主机。主机/控制器接口实际上由两个独立的部分组成:逻辑接口和物理接口。
逻辑接口定义了命令和事件及其相关的行为。逻辑接口可以交付给任何物理传输(physical transport),或者通过位于控制器上的本地应用程序编程接口(API)交付给控制器,后者可以包含嵌入式主机协议栈。
物理接口定义了命令、事件和数据如何通过不同的连接技术来传输。已定义的物理接口包括USB、SDIO和两个UART的变种。对大部分控制器而言,它们只支持一个或两个接口。考虑到实现一个USB接口需要大量的硬件,而且不属于低功耗的接口,所以它通常不会出现在低功耗蓝牙的单模控制器上。
因为主机控制器接口存在于控制器和主机之内,位于控制器中的部分通常称为主机控制器接口的下层部分;位于主机中的部分通常称为主机控制器接口的上层部分。