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.

CDCI6214: crc总是错误,导致无法锁定

Part Number: CDCI6214
Other Parts Discussed in Thread: CDCE6214

我烧写eeprom的代码如下

cdci6214_write_reg(0x00,0x1010);//step2. Write 1 to recal to calibrate the VCO in this operation mode
cdci6214_write_reg(0x03,page);//step3. Select the EEPROM page,send regcommit command
cdci6214_write_reg(0x0f, 0x5037);//step4. Unlock the EEPROM for write access
cdci6214_write_reg(0x03, (1<<12)|page);//step5. Start the commit operation by writing a 1 to regcommit
usleep(100000);//wait 100ms
cdci6214_write_reg(0x03, 0x4000);//step6. Force a CRC update by writing a 1 to update_crc
cdci6214_read_reg(0x09,&nvmscrc);//step7. Read back the calculated CRC in nvmlcrc
cdci6214_write_reg(0x0d,0x3f);//step8. Store the read CRC value in the EEPROM by writing 0x3F to nvm_wr_addr
cdci6214_write_reg(0x0e, nvmscrc);//step8. and then the CRC value to nvm_wr_data.
usleep(10000);//wait 10ms

but according to cdci6215 datasheet , reg 0x3F is CHX_CTRL4 , is this a mistake?

现在的现象是复位后reg07为0x0024

 

regs [64]= [0x1000, 0x6854, 0x0055, 0x0000, 0x00f7, 0x0008, 0x19ca, 0x0024, 0x0001, 0x9928, 0x0000, 0x0000, 0xee00, 0x003f, 0x9928, 0x5037, 0x921f, 0x26c4, 0xa001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0580, 0x0601, 0x0006, 0x0e24, 0x0000, 0x0000, 0x000c, 0x5140, 0x1e72, 0x0000, 0x0007, 0x0050, 0x8000, 0x0000, 0x0006, 0x0405, 0x0851, 0x0008, 0x8000, 0x0000, 0x0006, 0x0005, 0x0851, 0x0000, 0x8000, 0x0000, 0x0006, 0x0425, 0x8861, 0x0008, 0x8000, 0x0000, 0x0000, 0x0005, 0x8851, 0x0000, 0x1061, 0x0018, 0x1500, 0x4218, 0xc210]

上面的regs是我回读eeprom的所有值,请帮忙判断问题所在

  • Hello,

    The data sheet is correct; therefore, I am a little confused what is your exact question.

    Note that the address of the registers are different that the addresses on SRAM/EEPROM, so if you are reading back from EEPROM the address of 0x3F, you wont get the same value as reading back from register 0x3F (again, because they have different addresses to store the same information.

    Also, when you posted your question, most of the text was in Chinese so I could only understand the step by step breakdown of the programming you followed and your question in red.

    Best,

    Andrea

  • hello vallenilla,

    I write the follow data to the eeprom page0, 

    u32 cdci_regs[]={
    0x003F4210,
    0x003E4218,
    0x003D1500,
    0x003C0018,
    0x003B1061,
    0x003A0000,
    0x00398851,
    0x00380005,
    0x00370000,
    0x00360000,
    0x00358000,
    0x00340000,
    0x00338861,
    0x00320025,
    0x00310006,
    0x00300000,
    0x002F8000,
    0x002E0000,
    0x002D0851,
    0x002C0025,
    0x002B0006,
    0x002A0000,
    0x00298000,
    0x00280000,
    0x00270851,
    0x00260005,
    0x00250006,
    0x00240000,
    0x00238000,
    0x00220050,
    0x00210007,
    0x00200000,
    0x001F1E72,
    0x001E5140,
    0x001D000C,
    0x001C0000,
    0x001B0000,
    0x001A8E24,
    0x00192406,
    0x00180000,
    0x00170000,
    0x00160000,
    0x00150000,
    0x00140001,
    0x00130000,
    0x0012FFFF,
    0x001126C4,
    0x0010921F,
    0x000FA037,
    0x000E0000,
    0x000D0000,
    0x000C0000,
    0x000B0000,
    0x000A0000,
    0x00090000,
    0x00080001,
    0x00070C0D,
    0x000619CA,
    0x00050008,
    0x000400F7,
    0x00030001,
    0x00020055,
    0x00016854,
    0x00001000,

    };

    then read back the eeprom page by 

     cdci6214_write_reg(0x03,0x2000);

    and read register by

    for(i=0;i<0x40;i++)
    {
    cdci6214_read_reg(i,regs+i);
    }

    get the result

    regs[64] =[0x1000, 0x6854, 0x0055, 0x0000, 0x00f7, 0x0008, 0x19ca, 0x0024, 0x0001, 0x9928, 0x0000, 0x0000, 0xee00, 0x003f, 0x9928, 0x5037, 0x921f, 0x26c4, 0xa001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0580, 0x0601, 0x0006, 0x0e24, 0x0000, 0x0000, 0x000c, 0x5140, 0x1e72, 0x0000, 0x0007, 0x0050, 0x8000, 0x0000, 0x0006, 0x0405, 0x0851, 0x0008, 0x8000, 0x0000, 0x0006, 0x0005, 0x0851, 0x0000, 0x8000, 0x0000, 0x0006, 0x0425, 0x8861, 0x0008, 0x8000, 0x0000, 0x0000, 0x0005, 0x8851, 0x0000, 0x1061, 0x0018, 0x1500, 0x4218, 0xc210]

    we can see most registers are the same as I writed into the eeprom,

    but the reg7 is 0x0024, this means the vco have not locked, and config_done is not high, what event would stoped its' configuration? and why nvmcrcerr is high? how to fix this problem?

  • Hello Xiao,

    When you say "reg07", do you mean the address pointing to the register map or the EEPROM? Also, note that it's normal for certain registers to show up different that the ones you wrote to IF that register is a read-only register. No matter the value you write to it, it won't change and always remain the default.

    Also, please note that TI highly recommends to switch to CDCE6214 since it's a better performing part. If possible, please do make the transition.

    Best,

    Andrea

  • Here reg07 is register map, not eeprom. I know that the ready only registers can't be writen, but why config_done is not high? 

     if cdce6214 is better ,we will make this transition, thank you very much!

  • Hello Xiao,

    Retry this on the CDCE6214 and if you still have this issue then let us know again and we will continue helping you. I will go ahead and close out this issue.

    Thanks,

    Andrea