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频率校准方面的问题,希望能够得到你们的帮助,谢谢了。

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

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

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

  • //
    // 寄存器设置如下,是TI代理商的技术支持工程师提供的
    //
    halSpiWriteReg(CC1125_IOCFG3,0x08); //GPIO3 IO Pin Configuration
    halSpiWriteReg(CC1125_IOCFG2,0x08); //GPIO2 IO Pin Configuration
    halSpiWriteReg(CC1125_IOCFG1,0xB0); //GPIO1 IO Pin Configuration
    halSpiWriteReg(CC1125_IOCFG0,0x40); //GPIO0 IO Pin Configuration
    halSpiWriteReg(CC1125_SYNC_CFG1,0x0B); //Sync Word Detection Configuration
    halSpiWriteReg(CC1125_DEVIATION_M,0xA3); //Frequency Deviation Configuration
    halSpiWriteReg(CC1125_MODCFG_DEV_E,0x02); //Modulation Format and Frequency Deviation Configuration
    halSpiWriteReg(CC1125_DCFILT_CFG,0x1C); //Digital DC Removal Configuration
    halSpiWriteReg(CC1125_PREAMBLE_CFG1,0x00); //Preamble Length Configuration
    halSpiWriteReg(CC1125_FREQ_IF_CFG,0x33); //RX Mixer Frequency Configuration
    halSpiWriteReg(CC1125_IQIC,0xC6); //Digital Image Channel Compensation Configuration
    halSpiWriteReg(CC1125_CHAN_BW,0x19); //Channel Filter Configuration
    halSpiWriteReg(CC1125_MDMCFG1,0x06); //General Modem Parameter Configuration
    halSpiWriteReg(CC1125_MDMCFG0,0x05); //General Modem Parameter Configuration
    halSpiWriteReg(CC1125_DRATE2,0x3F); //Data Rate Configuration Exponent and Mantissa [19:16]
    halSpiWriteReg(CC1125_DRATE1,0x75); //Data Rate Configuration Mantissa [15:8]
    halSpiWriteReg(CC1125_DRATE0,0x10); //Data Rate Configuration Mantissa [7:0]
    halSpiWriteReg(CC1125_AGC_REF,0x20); //AGC Reference Level Configuration
    halSpiWriteReg(CC1125_AGC_CS_THR,0x19); //Carrier Sense Threshold Configuration
    halSpiWriteReg(CC1125_AGC_CFG1,0xA9); //AGC Configuration
    halSpiWriteReg(CC1125_AGC_CFG0,0xCF); //AGC Configuration
    halSpiWriteReg(CC1125_FIFO_CFG,0x00); //FIFO Configuration

    //halSpiWriteReg(CC1125_SETTLING_CFG,0x0B); //Frequency Synthesizer Calibration and Settling Configuration 
    halSpiWriteReg(CC1125_SETTLING_CFG,0x03); //Frequency Synthesizer Calibration and Settling Configuration     不自动校准

    halSpiWriteReg(CC1125_FS_CFG,0x14); //Frequency Synthesizer Configuration

    halSpiWriteReg(CC1125_PKT_CFG2,0x05); //Packet Configuration, Reg 2
    halSpiWriteReg(CC1125_PKT_CFG1,0x00); //Packet Configuration, Reg 1
    halSpiWriteReg(CC1125_PKT_CFG0,0x20); //Packet Configuration, Reg 0

    halSpiWriteReg(CC1125_PA_CFG2,0x3f); //Power Amplifier Configuration, Reg 2

    halSpiWriteReg(CC1125_IF_MIX_CFG,0x00); //IF Mix Configuration
    halSpiWriteReg(CC1125_FREQOFF_CFG,0x22); //Frequency Offset Correction Configuration
    halSpiWriteReg(CC1125_SOFT_TX_DATA_CFG,0x01);//Soft TX Data Configuration

    halSpiWriteReg(CC1125_FREQ2,0x56); //Frequency Configuration [23:16] //434MHz
    halSpiWriteReg(CC1125_FREQ1,0xCC); //Frequency Configuration [15:8]
    halSpiWriteReg(CC1125_FREQ0,0xCC); //Frequency Configuration [7:0]

    halSpiWriteReg(CC1125_IF_ADC0,0x05); //Analog to Digital Converter Configuration, Reg 0
    halSpiWriteReg(CC1125_FS_DIG1,0x00); //
    halSpiWriteReg(CC1125_FS_DIG0,0x5F); //
    halSpiWriteReg(CC1125_FS_CAL0,0x0E); //...
    halSpiWriteReg(CC1125_FS_DIVTWO,0x03); //Divide by 2
    halSpiWriteReg(CC1125_FS_DSM0,0x33); //Digital Synthesizer Module Configuration, Reg 0
    halSpiWriteReg(CC1125_FS_DVC0,0x17); //Divider Chain Configuration, Reg 0
    halSpiWriteReg(CC1125_FS_PFD,0x50); //Phase Frequency Detector Configuration
    halSpiWriteReg(CC1125_FS_PRE,0x6E); //Prescaler Configuration
    halSpiWriteReg(CC1125_FS_REG_DIV_CML,0x14); //
    halSpiWriteReg(CC1125_FS_SPARE,0xAC); //
    halSpiWriteReg(CC1125_XOSC5,0x0E); //Crystal Oscillator Configuration, Reg 5
    halSpiWriteReg(CC1125_XOSC3,0xC7); //Crystal Oscillator Configuration, Reg 3
    halSpiWriteReg(CC1125_XOSC1,0x07); //Crystal Oscillator Configuration, Reg 1
    //halSpiWriteReg(CC1125_XOSC0,0x01); //Crystal Oscillator Configuration, Reg 0
    //halSpiWriteReg(CC1125_PARTNUMBER,0x58); //Part Number
    //halSpiWriteReg(CC1125_PARTVERSION,0x21); //Part Revision
    halSpiWriteReg(CC1125_SERIAL_STATUS,0x08); //Serial Status
    //halSpiWriteReg(CC1125_RX_STATUS,0x10); //RX Status
    //halSpiWriteReg(CC1125_XOSC_TEST1,0x00); //

  • 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.5ms,CC1125数据手册里的0.4ms相差太大,无法满足我们的要求。

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

    2) Fast frequency hopping without calibration for each hop can be done by performing the necessary 
    calibration at start-up and saving the resulting FS_CHP, FS_VCO4, and FS_VCO2 register values in 
    MCU memory. Between each frequency hop, the calibration process can then be replaced by writing 
    the calibration values that corresponds to the next RF frequency.

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

        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),

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

        {

            halSpiReadReg(CC1125_MARCSTATE, &marcstate);

        } while (marcstate != 0x41);

    接着进行halSpiStrobe(CC1125_STX),才能发射载波成功。

    如果不等待芯片回到idle状态,直接进行halSpiStrobe(CC1125_STX), 则输出的频率以

    成功—失败—成功—失败—成功—失败......的方式出现,跟使用SCAL一样。

    希望TI的工程师们能帮一下忙,给我一些宝贵的建议。

    谢谢了。

  • 主要是我想知道为什么频率校准的时间跟数据手册上的差太多,希望能有一些减少时间的办法

  • 怎么都没TI的工程师出现啊,求帮助啊。。。