微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 求助:CC1125的频率校准问题

求助:CC1125的频率校准问题

时间:12-22 整理:3721RD 点击:

各位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、开始时我把程序设置了CC1125从IDLE到TX自动校准功能,因此最早的频率改变程序是:

    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、后来根据CC112x的errata 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的工程师出现啊,求帮助啊。。。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top