主题中讨论的其他器件: CDCE6214
背景:
尊敬的 TI 论坛:
我希望你们都做得很好,我希望你们能帮助我。
我将 CDCE6214-Q1EVM 与 I2C 外部配置和外部电源一起使用。 我将使用 ChipKIT Max32和 MPIDE 发送 I2C 消息。
我的硬件配置如下:REF_SEL:高电平;HW_SW_CTRL:高电平。 CDCE6214经评估软件配置、可输出122Mhz。
我在 写入传输协议之后编写了一个用于执行"写入传输"的函数。 (代码中的 i2cTransmission 函数)
然后、我编写了一个函数、将 EEPROM 映像写入 EEPROM。 (代码中的 ecritureBrut2EEPROM 函数)。 使用数据表中所述的以下协议:
代码:
#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"); }
问题:
CDCE6214输出122Mhz。
我发送了代码、丢失了所有输出。
我使用评估软件导出了 EEPROM、得到了以下结果:
----- 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 ------
这表明组件处于忙状态。 是否有办法返回到标称状态? 或使组件进入工作状态。 它是否正在等待 nvmmlcrc 和 nvmscrc 值中的特定值、使其恢复为默认值、就好像写入过程已完成一样?
我试过但不起作用的东西:
导通和关断电路板。
使用评估软件 TICS 目标(内部 I2C 配置):
从.HXT 写入 EEPROM。(工作配置)=>小型终端显示没有错误、看起来 EEPROM 已经写入、但在读取 EEPROM 时、我得到与上图相同的 Hex 文件。
导入寄存器映射以查看是否可以获得输出(仅限原始寄存器选项卡)。
将寄存器导入 EEPROM。
以回退模式引导组件并将.HXT (工作配置)写入 EEPROM。=>我收到一些错误 crc=-1 (在 I2C 同步软件选项卡之前、 查找正常的新 I2C 地址)=>找到小终端后、没有显示错误、似乎 EEPROM 已写入、但在读取 EEPROM 时、我得到与上述相同的 Hex 文件