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-Q1:I2C 编程问题

Guru**** 2796955 points

Other Parts Discussed in Thread: CDCE6214, CDCI6214, CDCE6214-Q1

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/918499/cdce6214-q1-i2c-programming-issues

器件型号:CDCE6214-Q1
主题中讨论的其他器件:CDCE6214CDCI6214

我尝试在 I2C 模式下使用 CDCE6214。

我已将 REFSEL 直接接地、因此它将在运行模式下加电。  所有电源均为2.5V。  我正在 output0上查找 LVCMOS、在另一个上查找 LVDS 4.  我有3个该系统的原型、它们的运行方式都是相同的。

PDN、SDA、SCL、HW_SW_CTRL 和 GPIO4均由 FPGA 驱动。  GPIO1也连接到 FPGA、但现在 FPGA 将该引脚配置为输入。

如果我设置 HW_SW_CTRL='1'、 GPIO4 (OE)='0'、则将 PDN 从"1"更改为"0"。  我可以通过 I2C 进行通信、我还看到电源电流增加。

这是 PDN 被清零后的寄存器值。

0x0053 (d83)= 0xFF00
0x0052 (d82)= 0x05C0
0x0051 (d81)= 0x0004
0x0050 (D80)= 0x0008
0x004F (d79)= 0x0008
0x004E (D78)= 0x0000 0x0000 0x004D
(d77)= 0x0002
0x00241 (d80)= 0x0008 0x0074



(d74)
= 0x0047 (0x0074)= 0x0074 (d48)= 0x0074 (0x0047 (d74)= 0x0048 (0x0074) 0x0047 (d74)= 0x0074 (d48) = 0x0406
0x0046 (d70)= 0x0898
0x0045 (D69)= 0xA241
0x0044 (d68)= 0x0000
0x0043 (d67)= 0x0006
0x0042 (D66)= 0x0006
0x0041 (D65)= 0x4AD8
0x0040 (d64)= 0xA241 0x0043 (d67)= 0x0006 0x0042 (D66)= 0x0006 0x00061


(0x00036)

= 0x00061 (D360)= 0x0036 (0x0036)= 0x0036 (0x0063) 0x0036 (0x00061)(0x0036 (D360)= 0x0036 (D360)= 0x00061
0x003A (d58)= 0x5032
0x0039 (d57)= 0x0000
0x0038 (d56)= 0x0006
0x0037 (d55)= 0x001E
0x0036 (d54)= 0x3400
0x0035 (d53)= 0x0069
0x0034 (D52)= 0x5000
0x0033 (d51)= 0x0040




(d54)= 0x0035 (d53)= 0x0021)= 0x0040 (d02)= 0x0032 (d32) 0x0040 (d02)= 0x0040 (d02)= 0x2 (d02 (d02) = 0x0000
0x002D (D45)= 0x4F80
0x002C (D44)= 0x0318
0x002B (D43)= 0x0051
0x002A (D42)= 0x0002
0x0029 (d41)= 0x0000
0x0028 (D40)= 0x0000
0x0027 (d39)= 0x0026 (d42)= 0x0002 0x0029 (d41)= 0x0000 0x0028 (
0x0034
)= 0x0000=0x0023 (0x0038) 0x0023 (0x0000=0x0023) 0x0000=0x0034


(D35) 0x0023 (0x0023) 0x0023 (0x0023)
0x0021 (D33)= 0x0000
0x0020 (D32)= 0x0000
0x001F (D31)= 0x0000
0x001E (D30)= 0x0030
0x001D (d29)= 0x0000
0x001C (d28)= 0x0000
0x001B (D27)= 0x0004
0x001A (d26)= 0x0030 0x001D (d29)= 0x0000 0x001C (d28)= 0x0020 (d28)= 0x00000x00000x0021 (

0x0022)= 0x0020 (D24

)= 0x0020 (0x0020 (D24) 0x0020 (D27) 0x0020 (0x0021)= 0x0020 (0x00
= 0x0503
0x0014 (d20)= 0x0000
0x0013 (D19)= 0x0000
0x0012 (d18)= 0x0000
0x0011 (d17)= 0x26C4
0x0010 (D16)= 0x921F
0x000F (D15)= 0xA037
0x000E (D14)= 0x09
0x000D (0x0000 0x000D)=



0x000D (0x0000 0x000C)= 0x0009 (0x000C)= 0x0009 (0x000C)= 0x0009 (0x000C)= 0x00012 (0x000C (0x000C)= 0x00012 (0x000B) 0x000C (0x000C)= 0x00012 (
0x0008 (D08)= 0x0001
0x0007 (D07)= 0x0C2D
0x0006 (D06)= 0x0DEC
0x0005 (D05)= 0x0008
0x0004 (D04)= 0x0000
0x0003 (D03)= 0x0200
0x0002 (D02)= 0x0000
0x0001 (D01)= 0x0000 7652
(0xd00) 

我注意到两件事。  寄存器0为0x2000。  非常确定它应该是0x1000。  寄存器3指示 CRC 故障。  不确定这是否正常。

我有一个在 TICS Pro 中开发的配置。  我导出寄存器设置并尝试将其写入 CDCE6214。  第三列是将第二列中的值写入第一列中的地址后的回读值。

0x0053 = 0xFD00 0xFF00
0x0052 = 0x01C0 0x05C0
0x0051 = 0x0004 0x0050
= 0x0000 0x0000
0x004F = 0x0000 0x0000 0x004E
= 0x1000 0x1000
0x004D = 0x0000 0x0000 0x004C
= 0x0188 0x0188
0x004B = 0x8008 0x0047


= 0x0048 = 0x0048 = 0x0006 0x00181 = 0x0048 = 0x0048
0x0006 0x0006
0x0046 = 0x0008 0x0008
0x0045 = 0xA181 0xA181 0x0044
= 0x0000 0x0043
= 0x0006 0x0006 0x0042
= 0x0006 0x0006
0x0041 = 0x0808 0x0808
0x0040 = 0xA3C 0xA181
0x003F = 0x8000000 0x00008 0x003B


= 0x8000000 0x008 = 0x0008 0x0008 0x0008 = 0x0008 0x0008 0x0008 0x0008 0x0008 = 0x0003

0x003A = 0x502C 0x0039
= 0x0002 0x0002
0x0038 = 0x0006 0x0006
0x0037 = 0x001E 0x0036
= 0x3400 0x0035
= 0x0069 0x0034
= 0x5000 0x5000
0x0033 = 0x40C0 0x40C0
0x0032 = 0x0031 = 0x0014



= 0x0014 = 0x0013 0x0014 = 0x0014 = 0x0013 0xA2F = 0x0014 = 0x0013 0x0013 0x0013 0x0013 0x0013 0x0013 0x0013 0x0013 0x0013 0x0013 0x0013 0x0014 = 0x0013 0x0013 0x0013 0x0013 0x0013 0x 0x0000 0x0000
0x002D = 0x4F80 0x002C
= 0x0318 0x0318
0x002B = 0x0051 0x002A
= 0x0002 0x0002
0x0029 = 0x0000 0x0000 0x0028
= 0x0000 0x0000
0x0027 = 0x0000 0x0000 0x0026
= 0x0000 0x0025
= 0x0000 0x0022 = 0x0000 0x0023

= 0x0000 0x0000 0x0023

0x0021 = 0x0000 0x0020
= 0x0000 0x001F
= 0x0000 0x001E
= 0x0030 0x0030 0x001D
= 0x0000 0x0000
0x001C = 0x0000 0x0000 0x001B
= 0x0004 0x0004
0x001A = 0x0000 0x0000 0x0019
= 0x0400 0x0018
= 0x0006
= 0x0018 = 0x07A2 0x0018 = 0x0018 = 0x0018 = 0x0006 0x00A2 0x0018 = 0x0006 0x0018 = 0x00A2 0x0017

0x0503 0x0503
0x0014 = 0x0000 0x0013
= 0x0000 0x0012
= 0x0000 0x0011
= 0x26C4 0x0010
= 0x921F 0x921F
0x000F = 0xA037 0x000E
= 0x0000 0x0000 0x000D
= 0x0000 0x0000 0x000C = 0x0000 0x0000 0x000C
= 0x0000


0x0000 0x000B = 0x0000 0x0000 000B = 0x0000 0x0000 000B
0x0008 = 0x0001 0x0007
= 0x0C0D 0x0C2D
0x0006 = 0x0E2C 0x0DEC
0x0005 = 0x0008 0x0008
0x0004 = 0x0040 0x0040
0x0003 = 0x0000 0x0002
= 0x0000 0x0000
0x0001 = 0x2660 0x2660
0x0000 = 0x100C 0x2000 

您可以在此处看到地址0未更改。  我知道 RESET 位应该自行清除、但 GPIO 方向仍然不正确。

我还可以读取 EEPROM。  以下是有用的结果。

EE 地址0x0000 (00)= 0x7002
EE 地址0x0001 (01)= 0x487F
EE 地址0x0002 (02)= 0x1B12
EE 地址0x0003 (03)= 0x0000
EE 地址0x0004 (04)= 0x28A0
EE 地址0x0005 (05)= 0x4CD0
EE 地址0x0006
(07)= 0x0007
EE 地址0x0007 (EE 地址) 0x0008 (08)= 0x8320
EE Addr 0x0009 (09)= 0x5A24
EE Addr 0x000A (10)= 0x6C24
EE Addr 0x000B (11)= 0x122D
EE Addr 0x000C (12)= 0x1626
EE Addr 0x000D (13)= 0x4909

EE Addr 0x000E (0x00014
) EE Addr 0x00014 (0x0410) = 0xA801
EE Addr 0x0011 (17)= 0x00EC
EE Addr 0x0012 (18)= 0x4000
EE Addr 0x0013 (19)= 0x2470
EE Addr 0x0014 (20)= 0x0200
EE Addr 0x0015 (21)= 0x0060
EE Addr 0x0016 (22)= 0x0000
EE Addr 0x0017 (0x0023
)
EE Addr 0x0019 (25)= 0x0A22
EE Addr 0x001A (26)= 0x1800
EE Addr 0x001B (27)= 0x00D8
EE Addr 0x001C (28)= 0x8000
EE Addr 0x001D (29)= 0x0C40
EE Addr 0x001E (30)= 0x0000
EE Adr 0x001C
(30)= 0x0000 EE ADDR 0x0031 (0x0040
EE ADDR 0x001F)= 0x0032) 0x0021 (33)= 0x0D08
EE 地址0x0022 (34)= 0x0000
EE 地址0x0023 (35)= 0x1008
EE 地址0x0024 (36)= 0x0000
EE 地址0x0025 (37)= 0x0000
EE 地址0x0026 (38)= 0x0000
EE 地址0x0027 (39)= 0x1000
EE 地址0x40 (
39) = 0x00EC
EE 地址0x002A (42)= 0x4000
EE 地址0x002B (43)= 0x2470
EE 地址0x002C (44)= 0x0200
EE 地址0x002D (45)= 0x0060
EE 地址0x002E (46)= 0x0000
EE 地址0x002F (47)= 0x0000 EE
地址0x002F (47)= 0x000000 EE 地址0x0031
(0x0031) 0x0048
EE Addr 0x0032 (50)= 0x1800
EE Addr 0x0033 (51)= 0x00D8
EE Addr 0x0034 (52)= 0x0000
EE Addr 0x0035 (53)= 0x0C50
EE Addr 0x0036 (54)= 0x0000
EE Addr 0x0037 (55)= 0x0C50
EE Addr 0x0038 (0x0039

) EE Addr 0x0039 (EEE Addr) 0x003A (58)= 0x0000
EE 地址0x003B (59)= 0x1100
EE 地址0x003C (60)= 0x0000
EE 地址0x003D (61)= 0x0000
EE 地址0x003E (62)= 0x0000
EE 地址0x003F (63)= 0x0000 

我注意到 CRC 寄存器全为0、因此很可能难怪 CRC 比较失败。

我卡住了。  我已经尝试过几件事、但无法使其生成所需的输出。  这似乎是一个编程问题。  您是否看到过这样的内容?

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

    更多注意事项:

    输入是 SECREF 上的25MHz 8pF 100Ω 晶振、没有额外的串联电阻或负载电容器。

    PRIREF 未连接。

    电源全部为2.5V、但它们之间确实使用建议的滤波。

    我们在之前的设计中使用了与 CDCI6214非常相似的电路、并且能够毫无问题地对其进行编程。  器件型号的唯一主要区别是 REFSEL 被拉低、10kΩ Ω 电阻接地。  在新设计中、REFSEL 直接接地。

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

    现在、我看到、如果我将寄存器0写入0x1000或0x1008 (不进行复位)、它就会起作用、并且我回读0x1000或0x1008。

    接下来、如果我用复位位位位将0写入0x1004、则在下一次读取时返回0x2000。  

    在复位过程和重新配置寄存器中、我看起来出现了问题。

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

     这里没有太多、但欢迎您进行评估。  所有标记的连接都路由到 FPGA。

    此外、来自 TICS Pro.e2e.ti.com/.../SimlaClockRegisterValues.txt 的寄存器文件

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

    可能我找到了。

    为了绝望、我切断了 REFSEL 的接地线。  

    现在、我可以对该部件进行编程、并看到时钟按照我的预期运行。

    您能否确认将 REFSEL 直接接地会导致问题?

    CDCI6214的情况似乎更糟。  我们使用该电路尝试了该器件、它将 SDA 永久地短接至接地、并汲取了~100mA @ 2.5V 的电压。

    显然、REFSEL 在这些器件上的表现比数据表所描述的要好。

    此外、在 REFSEL 悬空时、我能否配置 EEPROM 使其上电正常、或者我现在是否在每个下电上电后一直无法重新编程?

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

    您好 Barry、

    首先、一个简单的问题:使用 Ticpsro 时一切都正常吗?

    其次、我建议从回退模式开始、其中 REFSEL 和 EEPROMSEL 都是悬空的。

    REFSEL 不必是悬空的。 尝试使用寄存器 REFSEL_SW。  

    即使 REFSEL 处于悬空状态、EEPROM 仍可编程和使用。 引脚 EEPROMSEL 选择 EEPROM 页(0或1)。

    此致、
    Hao

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

    我们没有直接连接到 TICS Pro 所需的硬件。  如果 TICS Pro 硬件拉取 REFSEL 或悬空 REFSEL、则会掩盖此问题。

    我们最初使用 CDCI6214构建了该电路的4个原型。  他们都可怕地失败了。  施加功率后、SDA 始终接地、并且流耗非常高。  一个之前的电路板、REFSEL 被拉至低电平、在 CDCI6214中工作正常。

    我们使用 CDCE6214-Q1器件替换了所有4个器件。  一个电路板因返工问题而丢失。  I2C 接口现在可以在其余3个板上工作、但软复位将失败、并在所有3个板上将寄存器0复位为0x2000。  我没有找到任何有关此故障模式的文档。

    我切断 REFSEL 的迹线、CDCE6214-Q1按预期工作。

    我建议您使用极低的电阻将 REFSEL 接地并测试此情况。  我相信、这是一个带有简单权变措施的部件问题。

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

    是否有任何方法可以在不循环通电的情况下退出降压模式?

    我想我还记得为什么我们将 REFSEL 设为低电平以避免回退模式。  您似乎必须写入所有寄存器才能使部件在回退模式下正常工作。

    现在、我将 REFSEL 至 GND 迹线切断、我始终在回退时加电、EEPROM 似乎无用。

    我认为循环 PDN 引脚会重新采样 EEPROMSEL、我可以退出下降沿、但看起来需要真正的断电。  对吧?

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

    切换 PDN 引脚将具有与下电上电相同的效果。 此外、当 REFSEL 为低电平时、您仍然可以使用 EEPROM。 REFSEL 和 EEPROMSEL 必须悬空才能进入回退模式。

    此致、
    Hao

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

    这就是我测试 PDN 运行的方式。 (更新了实际极性)

    我使用 REFSEL 和 EEPROMSEL 悬空为电路板供电、并按照预期进入 PDN=1的降压模式。

    在回退模式下、我可以写入寄存器并将其传输到 EEPROM。  到目前为止都很好。

    现在我设置 PDN='0'和 EEPROMSEL='1'。  器件进入复位状态、并且我无法读取 I2C 寄存器。  这是预期的。

    我在保持 EEPROMSEL='1'的同时设置 PDN='1'、希望它将进入串行接口模式。  我现在可以读取 I2C 寄存器、但使用的是降压 I2C 从器件地址、该地址表示器件仍处于降压模式。  它不会应答串行模式地址、并且寄存器未从 EEPROM 刷新。

    我从两个不同的器件获得相同的结果。

    我认为 PDN 上升并不会重新评估 REFSEL 或 EEPROMSEL。  

    我是否应该以不同的方式执行它?

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

    您好 Barry、

    我非常确信、切换 PDN 会将 EEPROM 内容重新加载到寄存器中、或者让器件重新进入回退状态。 但正确的是、不会对 EEPROMSEL 和 REFSEL 电平进行重新采样。

    有两个方面:

    1.您不必在回退模式下写入 EEPROM。 您可以在 EEPROM 第1页(请参阅数据表的表20)中执行此操作、因为默认情况下、EEPROM 第0页配置为引脚模式、其中禁用了 I2C。

    2.不必悬空 REFSEL 引脚。 我不知道为什么悬空该引脚会使事情正常工作、但通常您不必这样做。 基准选择可由引脚或寄存器控制。 寄存器控制具有更高的优先级。 有关详细信息、请参阅数据表的表1。

    此致、
    Hao

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

    Hao、

    感谢您考虑我的问题并作出回应。

    1.我知道您不必对 EEPROM 进行编程。  如果可能、我希望使用 EEPROM、而不是在每个下电上电后重新编程。  在 REFSEL 和 EEPROMSEL 在加电时悬空的情况下、您永远不能将 EEPROM 内容应用到寄存器。  数据表从未提到过、如果循环 PDN 重新采样 REFSEL 和 EEPROMSEL、我的测试表明没有。

    2.我知道 REFSEL 可以被拉低(或拉高)。  我发现您无法将 REFSEL 直接接地。  在 REFSEL 直接接地的情况下、CDCx6214无法正常工作。  我建议您使用0Ω Ω 将其接地、以便自行测试、或者至少对其进行仿真。

    谢谢、

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

    您好 Barry、

    明白。 感谢您的评论。 如果还有其他问题、请告诉我。

    此致、
    Hao