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.

[参考译文] LMX2594:来自寄存器 R3、R2、R1、R0的读回值不一致

Guru**** 2553360 points
Other Parts Discussed in Thread: LMX2594

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/957316/lmx2594-inconsistent-readback-values-from-registers-r3-r2-r1-r0

器件型号:LMX2594

您好!

我们尝试在 COTS 板上使用 LMX2594、并使用板上主机 Xilinx RFSoC 器件的 SPI 接口对其进行配置。  但是、我们很难确定寄存器是否配置正确、因为我们在特定寄存器上获得了错误/不一致的回读结果。 我们遵循数据表第7.5.1节的建议过程:

1)上电、2)设置 R0中的复位(0x002012)、3)清除 R0中的复位(0x002010)、4)以相反的顺序对寄存器 R78-R0进行编程(因为不使用斜坡)

在对寄存器进行编程时、我们会读回每个写入的值以进行验证。  这对于 R78-R4来说是完美的、回读值与写入的数据匹配。  但对于寄存器 R3-R0、我们得到以下结果:

R3:WR:0x0642
    RD:0x0000
R2:WR:0x0500
    RD:0x0000
R1:WR:0x0808
    Rd:0x0808
R0:WR:0x2010
    RD:0x0000

是否知道为什么我们会从 R3、R2、R0获取全零回读数据?  由于前75个寄存器的写入/回读工作正常、我们似乎没有 SPI 总线问题。  不知道要尝试什么、我们随后对 R0执行了另一次写入0x2010、以确保将"MAXOUT_LD_SEL"清零以进行回读、并重新读取所有寄存器 R78-R0。  这次、我们获得了多个具有与编程数据不匹配的读回值的寄存器(或之前的读回):

寄存器78:0x0064 (写入的值为0x016F)
寄存器75:0x0800 (写入值为0x0880)
寄存器71:0x0080 (写入的值为0x0081)
寄存器62:0x00af  (写入的值为0x0322)
寄存器60:0x03e8 (写入的值为0x0000)
寄存器58:0x8001 (写入值为0x9001)
寄存器57:0x0000 (写入的值为0x0020)
寄存器46:0x07fd  (写入的值为0x07FC)
寄存器45:0xcedf  (写入的值为0xC0DF)
寄存器44:0x1fa2  (写入的值为0x1fa4)
寄存器43:0x0000 (写入的值为0x0009)
寄存器39:0xFFFF   (写入的值为0x0019)
寄存器38:0xFFFF   (写入的值为0x0000)
寄存器37:0x0204 (写入值为0x0504)
寄存器36:0x0032 (写入的值为0x0057)
寄存器31:0x43e8 (写入的值为0x43EC)
寄存器30:0x2108 (写入的值为0x318C)
寄存器29:0x2108 (写入的值为0x318C)
寄存器25:0x0624 (写入的值为0x0C2B)
寄存器20:0xb848 (写入的值为0xF848)
寄存器17:0x00fa  (写入的值为0x012C)
寄存器07:0x00b2 (写入的值为0x40B2)
寄存器03:0x0642 -这次读回纠正
寄存器02:0x0500 -这次读回纠正
寄存器01:0x080b (写入值为0x0808)
寄存器00:0x2010 -这次读回纠正

在第二次读回中、稳压器 R3/R2/R0读回正确(尽管在第一次尝试时读回所有零)、而列出的所有其他寄存器读回错误值(即使我们之前读回了正确的值)。 我们无法对此有任何了解。  有些具有未定义字段的寄存器是否具有随时间推移而变化的值、因此回读结果取决于读取它们的时间?  在我们启用 FCAL 之前、似乎不应更改任何寄存器值、直到收集上述数据后才启用 FCAL。

对我们的错误行为有什么想法、或对尝试什么的建议?  我们是否应该期望回读每次返回不同的结果?  您是否可以提供任何正确的写回寄存器和读回寄存器的 C/C++示例代码?

FYI 在我们启动 FCAL 后、LMX2594无法锁定。

谢谢、Ted    

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

    尊敬的 Ted:

    这似乎很奇怪。 寄存器值不应更改。 您是否确定您的 SPI 协议满足"6.6计时要求"和 "图2 "中提到的所有时序要求? 串行数据读回时序图"?

    对于许多回读而言、区别是1位还是位移、这是您可以调试的吗?

    您是否能够复制此内容、即每次加电并按照此序列执行回读时、第一次回读除了最后4个寄存器之外具有正确回读、第二次回读有很多错误?

    遗憾的是、我们没有任何样例代码可供使用。 通常情况下、在低于50MHz 的频率下实施的 SPI 协议应该起作用? 您的 SPI 频率是多少?

    谢谢、

    Vibhu

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

    您好、Vidhu、

    感谢您的回复。  我们使用的是6.25MHz SPI 时钟、因此我不太担心是否满足时序要求。 不过、我将对此进行验证。

    是的、问题是可重复的-每次执行序列时、我们似乎都会获得上述相同的结果。

    另一个信息: 您可能已经注意到、上面我们使用0x2010而非0x2410对 Reg0进行编程-唯一的区别是位 D10被清除而不是被置位。  如果我们使用0x2410 (如表23/Figure 35中所示的位 D10设置)、则我们的所有寄存器回读所有的零值。  数据表中未描述该位 Reg0位 D10、但似乎完全中断了读回功能???

    谢谢、Ted   

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

    您好、Vidhu、

    我们发现了问题:SPI 编程代码中的一个错误导致将额外的数据写入多个寄存器、这显然导致了各种各样的问题。  直到探测 SPI 总线并看到额外的时钟周期、我们才意识到这一点。  现在、我们能够成功实现锁定。

    谢谢、Ted   

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

    谢谢