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