Part Number:LMX2820
您好,我在使用LMX2820即时校准时发现,有时候最后facl_en=0时,器件又变会失锁,无法发出频率,我想问问,在不掉电情况,鉴相频不变的情况下,哪些因素会导致锁定后失锁???
Amy Luo:
您好,
感谢您对TI产品的关注!为更加有效地解决您的问题,我已将您的问题发布在E2E英文技术论坛上,请更了解这款芯片的TI资深工程师为您解答,一旦得到回复后我会立即回复给您。帖子链接如下,您也可以关注帖子,以方便查看或追问后续疑问。
英文论坛对应子论坛链接:https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1164675/lmx2820-locked-and-then-lose-the-lock
,
Amy Luo:
您可以提供具体的配置和测试程序吗,以方便我们进行验证?
,
BENN:
0x7A0000,0x790000,0x780000,0x770000,0x760000,0x750000,0x740000,0x730000,0x720000,0x710000, 0x70FFFF,0x6F0000,0x6E001F,0x6D0000,0x6C0000,0x6B0000,0x6A0000,0x69000A,0x680014,0x670014, 0x660028,0x6503E8,0x640533,0x6319B9,0x621C80,0x610000,0x6017F8,0x5F0000,0x5E0000,0x5D1000, 0x5C0000,0x5B0000,0x5A0000,0x590000,0x5803FF,0x57FF00,0x560040,0x550000,0x540040,0x530F00, 0x520000,0x510000,0x5001C0,0x4F0118,0x4E0000,0x4D0608,0x4C0000,0x4B0000,0x4A0000,0x490000, 0x480000,0x470000,0x46000E,0x450011,0x440020,0x431000,0x42003F,0x410000,0x400080,0x3FC350, 0x3E0000,0x3D03E8,0x3C01F4,0x3B1388,0x3A0000,0x390001,0x380001,0x370002,0x360000,0x350000, 0x340000,0x33203F,0x320080,0x310000,0x304180,0x2F0300,0x2E0300,0x2D0000,0x2C0000,0x2B0000, 0x2A0000,0x290000,0x280000,0x2703E8,0x260000,0x250500,0x240030,0x233100,0x220010,0x210000, 0x201081,0x1F0401,0x1EB18C,0x1D318C,0x1C0639,0x1B8001,0x1A0DB0,0x190624,0x180E34,0x171102, 0x16E2BF,0x151C64,0x14272C,0x132138,0x120000,0x1115C0,0x1017E,0x0F2001,0x0E3001,0x0D0038, 0x0C0408,0x0B0602,0x0A0000,0x090005,0x08C802,0x070000,0x060a43,0x050032,0x044204,0x030041, 0x0283E8,0x0157A1,0x004430,数组配置
,
BENN:
配置输出1200mhz
,
BENN:
uint8_t LMX2820_Vco_InstCal(double Cal_freq){ uint8_t cnt; static uint8_t CalCnt; uint16_t ReturnValue; uint8_t ReVal_Chan_Fre; double T; uint32_t Instcal_Dly;//瞬时校准的时间 uint32_t LmxRtemp;//寄存器中转值; uint32_t LmxR2=0,LmxR1=0,LmxR0=0; LMX2820_OutPuT_Set(Cal_freq); T=2.5*CBIASVCO/4.7; if(CAL_CLK_DIV!=0) Instcal_Dly=T*FOSCIN/(2<<CAL_CLK_DIV); else Instcal_Dly=T*FOSCIN; //1.设置即时校准时间 寄存器R2 LmxR2|=(0x02<<16)&(0x00ffffff); LmxR2|=(0x01<<15); LmxR2|=(CAL_CLK_DIV<<12); LmxR2|=(Instcal_Dly<<1); LmxR2|=(Quick_Recal_En);//快速重校准 SpiWriteRegisterByte(LmxR2); //2.打开即时校准 寄存器R1 LmxR1|=(0x01<<16)&(0x00ffffff); LmxR1|=(Phase_Sync_En<<15);//不打开相位同步 LmxR1|=(0x15E<<6); //保留位 LmxR1|=(LD_Vtune_En<<5); //打开即时校准 寄存器R1 LmxR1|=(0x00<<2); //保留位
LmxR1|=(Instcal_Dblr_En<<1);//vco double使能时 INSTCAL_DBLR_EN也要使能 LmxR1|=(Instcal_En);//即时校准使能 SpiWriteRegisterByte(LmxR1); //3.设置频率 ReVal_Chan_Fre=LMX2820_Pllassign_freq(Cal_freq); //4.写入INSTCAL_PLL_NUM N_Fraction=((double)Pll_Num)/((double)Pll_Den); Instacl_Pll_Num=(0x100000000)*N_Fraction; Instacl_Pll_Num_Lsb=(0x2d<<16)|(Instacl_Pll_Num&0x0000ffff); Instacl_Pll_Num_Msb=(0x2c<<16)|((Instacl_Pll_Num>>16)&0x0000ffff);
// SpiWriteRegisterByte(0X4F011E);// SpiWriteRegisterByte(0X4E0000);// SpiWriteRegisterByte(0X4600FE); SpiWriteRegisterByte(Instacl_Pll_Num_Lsb); SpiWriteRegisterByte(Instacl_Pll_Num_Msb); LMX2820_Freq_Out(Cal_freq);//配置 2b 2a 27 26 24 20 寄存器 //FCAL_EN=0,写入r0生效校准 LmxR0|=(0x00<<16)&(0x00ffffff); LmxR0|=(1<<14); LmxR0|=(INSTCAL_SKIP_ACAL<<13); LmxR0|=(0x00<<11); LmxR0|=(FCAL_HPFD_ADJ<<9); LmxR0|=(FCAL_LPFD_ADJ<<7); LmxR0|=(Dblr_Cal_En<<6); LmxR0|=(1<<5); LmxR0&=~((uint32_t)Fcal_En<<4); LmxR0|=(0x00<<2); LmxR0|=(Chip_Reset<<1); LmxR0|=(Chip_PowerDown); SpiWriteRegisterByte(LmxR0); //LMXR0 =0X004420 //FCAL_EN=1,写入r0锁定 LmxR0|=((uint32_t)Fcal_En<<4); SpiWriteRegisterByte(LmxR0); //LMXR0 =0X004430
while(((SpiReadRegisterByte(0x4a)&(0xc000))>>14)!=2) { SpiWriteRegisterByte(Instacl_Pll_Num_Lsb); SpiWriteRegisterByte(Instacl_Pll_Num_Msb); LMX2820_Freq_Out(Cal_freq);//配置 2b 2a 27 26 24 20 寄存器 SpiWriteRegisterByte(LmxR2); SpiWriteRegisterByte(LmxR1); SpiWriteRegisterByte(LmxR0); delay_ms(1);//每次检测前需要有个锁定时间延时 根据手册最少1ms
} LmxR0&=~((uint32_t)Fcal_En<<4); SpiWriteRegisterByte(LmxR0); //LMXR0 =0X004430 delay_us(50); }
配置即时校准
这个有些频率就可以出来,有些就出不来
,
BENN:
我是先初始化配置,再设置即时校准,在初始化配置里我已经配置了一次即时校准,但是直接使用好像不行,所以又重新配置了一次
,
BENN:
我监测rb_LD引脚发现,已经锁定了,但是模拟的LD引脚确没有亮
,
Amy Luo:
已将您的回复信息反馈给E2E英文论坛工程师,请耐心等待他们的答复