This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求助:CC1125的频率校准问题

Other Parts Discussed in Thread: CC1125

各位TI的工程师们,你们好:

我的项目中CC1125不用于通信,只是作为一个本振使用,用于发射一个没有任何信号的载波频率,频率范围400M~480M,使用的是同步串行模式(Synchronous Serial Mode), 没有syns word(同步码)和preamble(前置码),也不发射数据,一直处于发射固定频率载波的状态下。


现在的问题是,由于项目中需要经常对CC1125进行频率改变,但发现CC1125的频率校准功能经常不成功,导致没有频率输出。

我的测试过程在TI的开发板和我们公司自己的电路板上都进行过。


1、开始时我把程序设置了CC1125IDLETX自动校准功能,因此最早的频率改变程序是:

    halSpiStrobe(CC1125_SIDLE); //空闲状态

    halSpiWriteBurstReg(CC1125_FREQ2, freq, 3); //写频率

    halSpiStrobe(CC1125_STX); //发射

多次改变输出频率,发现输出的频率以 成功—失败—成功—失败—成功—失败......的方式出现,也就是自动校准功能每间隔一次失败,并且无输出频率。

2、后来程序改成每次频率切换时都进行手动校准功能,频率改变程序为:

    halSpiStrobe(CC1125_SIDLE); //空闲状态

    halSpiWriteBurstReg(CC1125_FREQ2, freq, 3); //写频率

    halSpiStrobe(CC1125_SCAL); //手动校准

    do

    {

        halSpiReadReg(CC1125_MARCSTATE, &marcstate); //等待回到idle状态,校准完成

    } while (marcstate != 0x41);

    halSpiStrobe(CC1125_STX); //发射

依照上面的方式,虽然每次频率切换时校准都成功了,但是经测量,ti开发板的手动校准时间约等于1.9ms,而我们自己的电路板约等于2.5msCC1125数据手册里的0.4ms相差太大,无法满足我们的要求。

3、后来根据CC112x的errata note上的手动校准方法,以及用户指南10.3.2上的方法:

在每次系统启动时都预先对需要的频率进行过校准,并把校准值存起来,在改变频率时,写完频率寄存器值后,接着写入存起来的频率校准值,程序如下所示。

    u8 marcstate;

    halSpiStrobe(CC1125_SIDLE);

    halSpiWriteBurstReg(CC1125_FREQ2, freq, 3);

    halSpiWriteReg(CC1125_FS_VCO2, buff[0]); //写频率校准值

    halSpiWriteReg(CC1125_FS_VCO4, buff[1]);

    halSpiWriteReg(CC1125_FS_CHP, buff[2]);

    do //等待芯片回到idle状态

    {

        halSpiReadReg(CC1125_MARCSTATE, &marcstate);

    } while (marcstate != 0x41);

    halSpiStrobe(CC1125_STX);

但写完频率校准值后,必须等待芯片回到idle状态(或者至少延时2.5ms),接着进行发射,才能发射载波成功。

如果不等待芯片回到idle状态,直接进行发射, 则情况跟第2种方法一样。


希望能够得到一些宝贵的建议。

谢谢了。