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.

CDCE6214-Q1EVM: EEPROM WRITE OPERATION: DEVICE LOCKED ?

Part Number: CDCE6214-Q1EVM
Other Parts Discussed in Thread: CDCE6214

The Context:

Dear TI forum,

I hope you are all doing well, and I wish you can help me.

I'm using the CDCE6214-Q1EVM with the I2C external configuration and external supply. I'm using the ChipKIT Max32 and MPIDE to send I2C messages.

My hardware configuration is as follows: REF_SEL: HIGH and HW_SW_CTRL: HIGH. The CDCE6214 was configured with the evaluation software to output 122Mhz.

I wrote a function that does the "write transfer" following the Write Transfer Protocol. (i2cTransmission function in code)

Then I wrote a function that writes an EEPROM image into the EEPROM. (ecritureBrut2EEPROM function in code). Using the following protocol described in the datasheet:

The code:

#include <wire.h>

//Image of EEPROM
uint16_t Conf100MhzEEPROM[0x63] = {
  0x7002,	0x487f,	0x1b12,	0x0000,	0x38e0,	0x4d1e,	0x1f00,	
  0x6680,	0x82c0,	0x4200,	0x0418,	0x0c2c,	0x1602,	0x0106,	
  0x0404,	0x0100,
  0x2020,	0x0646,	0x4000,	0x8090,	0x0201,	0x00c0,	0x0000,	
  0x0000,	0x0000,	0x0a22,	0x1800,	0x00d8,	0x8000,	0x0c00,	
  0x0000,	0x0c10,	0x0000,	0x0c10,	0x0000,	0x0008,	0x0020,	
  0x0000,	0x0000,	0x1000,
  0x2020,	0x0646,	0x4000,	0x8090,	0x0201,	0x00c0,	0x0000,	
  0x0000,	0x0000,	0x0a22,	0x1800,	0x00d8,	0x8000,	0x0c00,	
  0x0000,	0x0c10,	0x0000,	0x0c10,	0x0000,	0x0008,	0x0020,	
  0x0000,	0x0000,	0x6e98
};

//Function declaration
void i2cTransmission();
void afficherMenu();
void ecritureBrut2EEPROM();

//SetUp
void setup(){
    Serial.begin(9600);  // Initialise la communication série à 9600 bauds
    Wire.begin();  // Initialise la communication I2C
}

//Main Loop

void loop() 
{
    if (Serial.available() > 0) {  // looks if available
        char c = Serial.read();  // reads the serial terminal
        if (c == '1') {  //if char 1 use function write EEPROM
            ecritureBrut2EEPROM(Conf100MhzEEPROM); 
            afficherMenu();
        }
        else {
          Serial.println("Invalid Choice");
          afficherMenu();
        }
    }
}

/* ---------------------------------
Fonction Afficher MENU
--------------------------------- */
void afficherMenu(){
  Serial.println("\n--- MENU ---");
  Serial.println("Press '1' to write Image to EEPROM");
}
  
/* ---------------------------------
Fonction Tramission I2C
--------------------------------- */
void i2cTransmission(uint8_t Addr, uint16_t data_to_send){
    Wire.beginTransmission(cdce6214Address); 
    Wire.write(0x00); // Envoie l'octet de poids fort de l'adresse du registre
    Wire.write(Addr); // Envoie l'octet de poids faible de l'adresse du registre
    Wire.write((data_to_send >> 8) & 0xFF); // Envoie l'octet de poids fort de la donnée
    Wire.write((data_to_send & 0xFF)); // Envoie l'octet de poids faible de la donnée
    Wire.endTransmission();
}

/* ---------------------------------
Fonction Ecriture EEPROM en brut
--------------------------------- */
void ecritureBrut2EEPROM(uint16_t EEPROM[]){

  i2cTransmission(0x0F,0x5037);// EE_LOCK => Unlocked
  i2cTransmission(0x0D,0x0000);//Initial address offset bit
  for(uint8_t NVM_WR_ADDR=0x00;NVM_WR_ADDR<=0x3F;NVM_WR_ADDR++){
	i2cTransmission(0x0D,NVM_WR_ADDR)
    i2cTransmission(0x0E,EEPROM[NVM_WR_ADDR]);
    
    //Print data sent
    Serial.print("NVM_WR_ADDR: ");
    Serial.print(NVM_WR_ADDR,HEX);
    Serial.print(" ,Value:");
    Serial.println(EEPROM[NVM_WR_ADDR],HEX);
  }
  Serial.println("Ecriture en brut EEPROM: DONE");
  
}

The Problem:

The CDCE6214 was outputing 122Mhz.

I sent the code and lost all outputs.

I did export the EEPROM using the evaluation software and got the following:

----- CDCE6214-Q1 EEPROM HEX TEXT FILE ------
Header Info	Thu Sep 26 18:01:19 2024
nvmbusy	0x0001
nvmcrcerr	0x0000
nvm_wr_error	0x0000
nvm_rd_error	0x0000
nvmlcrc	0xc0f0
nvmscrc	0x0000
nvm_rd_addr	0x0000
nvm_rd_data	0x0000
nvm_wr_addr	0x003f
nvm_wr_data	0x6e98

----- BASE   PAGE 0 ------
00	0x0000	0
01	0x0000	0
02	0x0000	0
03	0x0000	0
04	0x0000	0
05	0x0000	0
06	0x0000	0
07	0x0000	0
08	0x0000	0
09	0x0000	0
10	0x0000	0
11	0x0000	0
12	0x0000	0
13	0x0000	0
14	0x0000	0
15	0x0000	0

----- CONFIG PAGE 0 ------
16	0x0000	0
17	0x0000	0
18	0x0000	0
19	0x0000	0
20	0x0000	0
21	0x0000	0
22	0x0000	0
23	0x0000	0
24	0x0000	0
25	0x0000	0
26	0x0000	0
27	0x0000	0
28	0x0000	0
29	0x0000	0
30	0x0000	0
31	0x0000	0
32	0x0000	0
33	0x0000	0
34	0x0000	0
35	0x0000	0
36	0x0000	0
37	0x0000	0
38	0x0000	0
39	0x0000	0

----- CONFIG PAGE 1 ------
40	0x0000	0
41	0x0000	0
42	0x0000	0
43	0x0000	0
44	0x0000	0
45	0x0000	0
46	0x0000	0
47	0x0000	0
48	0x0000	0
49	0x0000	0
50	0x0000	0
51	0x0000	0
52	0x0000	0
53	0x0000	0
54	0x0000	0
55	0x0000	0
56	0x0000	0
57	0x0000	0
58	0x0000	0
59	0x0000	0
60	0x0000	0
61	0x0000	0
62	0x0000	0
63	0x0000	0
----- END EEPROM HEX TEXT FILE ------

Which shows that the component is in a busy state. Is there a way to get back to the nominal state? Or get the component into a working state. Could it be that it's waiting for a particular value in the nvmlcrc and nvmscrc value that could make it back to default as if the writing process has been finished?

What I tried and didn't work:

Turning on and off the board.

Using the evaluation software TICS to (Internal I2C configuration):

Write the EEPROM from an .hxt.(working configuration) => the small terminal shows no errors and seems that EEPROM was been written but when reading the EEPROM I get the same Hex file as shown above.

Importing a register map to see if I could get an output (only the raw registers tab).

Importing registers to the EEPROM.

Booting the component in fallback mode and write the .hxt (working configuration) to the EEPROM.=> I get some errors CRC=-1 (before I2C sync software tab to look for the new I2C address wich is normal) =>once found the small terminal shows no errors and seems that EEPROM was been written but when reading the EEPROM I get the same Hex file as shown above