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 写入操作:器件已锁定?

Guru**** 1772095 points
Other Parts Discussed in Thread: CDCE6214-Q1EVM, CDCE6214
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1418831/cdce6214-q1evm-eeprom-write-operation-device-locked

器件型号:CDCE6214-Q1EVM
主题中讨论的其他器件: 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 文件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Cedric

    当您尝试使用 TICS Pro 时、是否在 EEPROM 编程后对器件进行下电上电、仍然看到该编程没有在下次启动时生效?

    谢谢!

    Kadeem