Other Parts Discussed in Thread: CDCE6214-Q1
尊敬的 TI:
我们使用 CDCE6214-Q1作为为 FPGA 板计时的 PLL。
PLL 可通过 FPGA 主机 IIC 和 TICS Pro 成功配置。
但在通过我们更新的 SW 重新编程后、PLL 无法再配置、除了'LVCMOS OUTPUT0'之外、没有任何时钟输出。
可以通过 EEPROM 直接读取找到64个字的 EEPROM.HXT 始终为0x0000、并且无法通过 REG 提交模式和 EEPROM 直接模式成功修改: 当我使用这两种方法对 PLL 进行编程时、TICS Pro 日志记录显示它确实成功写入寄存器和 EEPROM、但4个通道上没有任何输出。
您能否帮助检查 EEPROM.HXT 并就这种错误状态提供一些建议?
提前感谢。
我已将 EETPROM.HXT 和我们的软件编程函数粘贴在此处:
++++++++++++++++++++++++++++++++++++++++
---- CDCE6214-Q1 EEPROM 十六进制文本文件---
标题信息2022年6月14日15:47:06
nvmbusy 0x0001
nvmcrcerr 0x0000
NVM_wr_error 0x0000
NVM_RD_ERROR 0x0000
nvmlcrc 0x0000
nvmscrc 0x0000
NVM_RD_ADDR 0x003F
NVM_RD_DATA 0x0000
NVM_wr_addr 0x003F
NVM_wr_data 0x0000
---- 基页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
---- 配置页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
---- 配置页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
---- 结束 EEPROM 十六进制文本文件---
++++++++++++++++++++++++++++++++++++++++
静态空 PLL_RESET ()
{
char GPIO_IO_FILE[128];
sprintf (GPIO_IO_file、"/sys/class/GPIO/GPIO%d"、GPIO_base + GPIO_PLL);
if (access (GPIO_IO_file、F_OK)!= 0)
{
if ((open_GPIO_channel (GPIO_PLL)!= 0)||(SET_GPIO_DIRECTION (GPIO_PLL、"OUT")!= 0))
{
返回;
}
}
SET_GPIO_VALUE (GPIO_PLL、0);
SET_GPIO_VALUE (GPIO_PLL、1);
}
int pll_reg_set (char *文件、int i2c_fd)
{
文件*fp=fopen (file、"r");
如果(fp== NULL)
{
printf ("打开文件失败<%s>\n"、文件);
返回-1;
}
char line];
char * end_ptr;
unsigned int idx = 0;
while (!feof (FP))(while (!feof (FP
{
Fgets (line、file_line_LEN_MAX、FP);
unsigned int reg_id;
unsigned int 值;
sscanf (line、"r%u %x"、_id、&value);
reg_id =(值>> 16)& 0xffffff;
Value = Value & 0xffffff;
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、REG_id、value);
printf ("reg_id:%d、value:0x%x\n"、reg_id、value);
usleep(30000);
}
fclose (FP);
返回0;
}
静态空 PLL_CONFIG (int i2c_fd)
{
内部温度;
/*向 RECAL 写入1以在此运行模式下校准 VCO */
temp = i2c_read (i2c_FD、PLL_SLAVE_ADDR、0x0000);
temp = temp | 0x0010;
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x0000、temp);
/*选择 EEPROM 第1页、使用 REGCOMMIT_PAGE 将寄存器设置复制到中。*/
temp = i2c_read (i2c_FD、PLL_SLAVE_ADDR、0x0003);
temp = temp | 0x0200;
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x0003、temp);
/*使用 EE_LOCK = 0x5.*/解锁 EEPROM 以进行写入访问
temp = i2c_read (i2c_FD、PLL_SLAVE_ADDR、0x000F);
temp = temp & 0x0FFF;
temp = temp | 0x5000;
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x000F、temp);
/*通过向 REGCOMMIT*/写入1来启动寄存器提交操作
temp = i2c_read (i2c_FD、PLL_SLAVE_ADDR、0x0003);
temp = temp | 0x0400;
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x0003、temp);
/*通过将1写入 update_crc.*/强制 CRC 更新
temp = i2c_read (i2c_FD、PLL_SLAVE_ADDR、0x0003);
temp = temp | 0x1000;
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x0003、temp);
/*读回 NVMLCRC 中计算出的 CRC。*/
int CRC = i2c_read (i2c_FD、PLL_SLAVE_ADDR、0x0009);
/*将0x3F 写入 NVM_WR_ADDR*/
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x000D、0x003F);
/*将 CRC 值写入 NVM_WR_DATA。*/
I2C_WRITE (i2c_FD、PLL_SLAVE_ADDR、0x000E、CRC);
}
静态空 PLL_init (空)
{
int i2c_fd = i2c_open (PLL_I2C_dev);
如果(i2c_fd =-1)
{
printf ("打开 i2c%d 设备失败。\n"、PLL_I2C_DEV);
返回;
}
PLL_RESET ();
if (pll_reg_set (g_pll_cfgdata_filepath、i2c_fd)!= 0)
{
printf ("设置 PLL 寄存器失败。\n");
返回;
}
PLL_CONFIG (i2c_FD);
if (i2c_close (i2c_fd)=-1)
{
返回;
}
PLL_RESET ();
}
void PLL_EEPROM_COMMIT (void)
{
int i2c_fd = i2c_open (PLL_I2C_dev);
如果(i2c_fd =-1)
{
printf ("打开 i2c%d 设备失败。\n"、PLL_I2C_DEV);
返回;
}
PLL_CONFIG (i2c_FD);
if (i2c_close (i2c_fd)=-1)
{
返回;
}
}
++++++++++++++++++++++++++++++++++++++++
以及我们的配置 BTW:
R85 0x00550000
R84 0x00540000
R83 0x0053FF00
R82 0x005201C0
R81 0x00510004
R80 0x0050000
R79 0x004F0008
R78 0x004E0000
R77 0x004D0000
R76 0x004C0188
R75 0x004B8008
R74 0x004AA181
R73 0x00491000
R72 0x00480005
R71 0x00470006
R70 0x00460808
R69 0x0045A181
R68 0x00441000
R67 0x00430004
R66 0x00420006
R65 0x00410808
R64 0x0040A181
R63 0x003F1000
R62 0x003E0004
R61 0x003D0000
R60 0x003C6008
R59 0x003B8008
R58 0x003A502C
R57 0x00391000
R56 0x00380019
R55 0x0037001E
R54 0x00363400
R53 0x00350069
R52 0x00345000
R51 0x003340C0
R50 0x003207C0
R49 0x00310013
R48 0x003023C7
R47 0x002F0380
R46 0x002E0000
R45 0x002D4F80
R44 0x002C0318
R43 0x002B0051
R42 0x002A0002
R41 0x00290000
R40 0x00280000
R39 0x00270000
R38 0x00260000
R37 0x00250000
R36 0x00240000
R35 0x0023005C
R34 0x00220000
R33 0x00212710
R32 0x00200000
R31 0x001F0000
R30 0x001E0064
R29 0x001D0000
R28 0x001C0000
R27 0x001B0004
R26 0x001A0000
R25 0x00190401
R24 0x00181930
R23 0x00170406
R22 0x001600A2
R21 0x00150583
R20 0x00140000
R19 0x00130000
R18 0x00120000
R17 0x001126C4
R16 0x0010921F
R15 0x000FA017
R14 0x000E9AF5
R13 0x000D003F
R12 0x000C7000
R11 0x000B0000
R10 0x000A6BF7
R9 0x00099AF5
R8 0x00080001
R7 0x00070C2D
R6 0x00060A6C
R5 0x00050008
R4 0x00040000
R3 0x00030000
R2 0x00020002
R1 0x00012310
R0 0x00001000
++++++++++++++++++++++++++++++++++++