AD9361正常更改射频频率需要设置一些寄存器,然后开启VCO校准,等待锁定。这个过程时间是比较长的,大概在37us~508us之间。如果你的系统是一个跳频的TDD系统,那相当于每个时隙都要浪费这个时间等待VCO锁定,开销实在太大。为了解决这个问题,就需要用到Fast Lock功能。简单点说就是提前校准好每个频点的参数保存起来,下次要用的时候直接调用。这种方法将切换频率后的锁定的时间缩短到6us左右。
前面提到保存校准结果以及调用结果,需要一个媒介,这个媒介叫profile,可以将其理解为一组寄存器,读写这个寄存器组就能实现频率切换。AD9361包含8个profile,每个profile包含16个8位寄存器,后面称为REG0~REG15。其中REG0 ~ REG4是根据射频频率计算出来的,REG6 ~ REG13是根据VCO的频率查表查到的,这个表是一个文件集,包含SynthLUT_40_TDD.txt,SynthLUT_40_FDD.txt,SynthLUT_60_TDD.txt,SynthLUT_60_FDD.txt等,根据实际情况选择使用哪个表。如果你已经安装了前面章节提到的脚本生成软件,则可以在路径 …/AD9361R2 Evaluation Software 2.1\data\下面找到这些表。
如果你的系统只工作 在8个频点上,那恭喜你,可以省不少事。因为ad9361自带8个profile,所以在系统跑起来之前,你可以校准好8个频点,每个profile存储一个,后面直接调用其中某个profile,系统就切换到对应的频率了。
如果你需要用到更多的频点,可行的方法是校准好每个频率,将结果保存到基带的ram中,后面要用的时候再写回来。这个时候,就只需要用2个profile做乒乓操作了。就是在时隙起始调用一个profile,时隙结束前写好另外一个profile。如下图
下面先讲几个比较重要的具体问题:
问题1:如何选择查找表?
参考《AD9361RFandBBPLLUserGuide2.4.pdf》第11页,根据RFPLL Fref选择。注意,这个指的是PLL的参考时钟,不是芯片的输入时钟。芯片时钟到Fref中间有一个分频器。比如你的系统输入是40M时钟,为了获得最佳的性能,分频器的倍数设置为2,则Fref为80M,另外我们一般都用FDD的数据表,所以你要用的表是SynthLUT_80_FDD.txt,这个文件目前发布了好几个版本,建议使用最新的版本。我实际用的表是SynthLUT_80_FDD_v3.txt
问题2:如何调用哪个profile?
方法有两个,一个是写SPI寄存器,另外一个是用CTL_IN引脚。推荐使用CTL_IN引脚控制,这样子控制的最精准。
问题3:校准的时候,一定要使能RX Quadrature Calibration Tracking和 BB and RF DC Tracking Calibration功能,否则多次校准出来的性能差异会比较大,这个是在官方文件中找不到说明的
问题4:RX profile REG6实际上是等与VCO Bias Tcf <<6+Charge Pump Current(init),文件《AD9361RFandBBPLLUserGuide2.4.pdf》第32页的对REG6的描述是错误的。
今天就写到这里,下一章节准备写如果根据射频频率,计算REG0~REG4的值,以及如果根据射频频率计算VCO,从而查表得出REG5 ~ REG13的值。