随着手机内RF芯片的集成度不断增加,编程需求也在显著增加。但另一方面,手机生命周期在日益缩短。解决复杂性增加和生命周期缩短之间的矛盾的一个方法是采用“硬件”应用编程接口(API)。本文讨论开发API时应遵循的一些规则以及应避免的一些设计陷阱。
射频IC的主要工作是调制与解调发射数据并接收想要的信号。随着数字信号处理技术的出现,越来越多的射频IC架构把模拟功能和处理信号所需的数字信号处理功能块整合在一起。但是,蜂窝标准的复杂性要求作为一个整体的蜂窝芯片必须具备灵活性,特别是对射频IC而言。灵活性即意味着可编程能力。
独立射频IC的输入构造一直是串行外设接口(SPI)映射。图(a)通常的SPI映射架构。本质上,可将该SPI映射方法看作接入射频IC的一个“开关”和“旋钮”阵列,典型情况下有若干个使能位(开关)和工作参数(旋钮)。以PLL为例,它一般至少有一个启动PLL的使能位,还可能有若干确定PLL输出频率的调节参数。
当控制IC(通常是数字基带)开始对PLL进行编程时,它必须编写参数和使能位。在基于SPI映射的接口架构中,DBB固件需了解它要编写的每一比特的地址和位置。它还必须了解SPI的构造以便能正确计算所需参数。有时,这些位彼此间会有时序方面的关联,为确保计算结果正确,必须审慎对待这种关联。
由于所需编程的比特数以千计。在某些场合,射频IC的不同子系统间存在关联,即便技术文档写得非常清楚,DBB固件开发团队也可能无法很好理解。即使当DBB固件开发团队成功地把一款射频IC整合进芯片组后,DBB固件也就因此与射频IC的特性有千丝万缕的联系。采用防御式和分层级式编程方法,仍会存留无法彻底抹去的痕迹。从商业角度看,这意味着对单一软件构造组件通过另外一个渠道进行外包几乎行不通,因为这样做就必须维护两个软件构造。此外,后续的射频IC将需要改进或升级,这样寄存器将无法严格兼容,维护起来困难重重。
在软件领域,解决这些问题的传统方法是抽象(abstraction)。抽象一般意味着对其它实体用来完成任务的一些算法进行收集。高级别的实体不关心低级别实体如何完成任务,它只要求一切都在预期的参数内运行。高级别软件使用的低级别程序集被称为应用编程接口(API)。
对抽象的期望在一定程度上把一个系统平台内的分布式IC维系在一起。增加的抽象层使得无需了解数字基带的物理逻辑细节,取而代之的是简单发布一个命令——“启动接收器”。这个命令还采用有更详细描述的语句:“启动该通道的接收器,实施AFC校正,并根据预期的信号水平在天线端设置增益(如图(b)所示)”。