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.

[参考译文] LMK04828:支持32位 SPI 事务长度

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1273433/lmk04828-support-for-32-bit-spi-transaction-length

器件型号:LMK04828
主题中讨论的其他器件: LMK04832LMK04821LMK04826、LMK04228

根据 TI 规格表、LMK04828使用24位 SPI 事务长度。  我能否用一个32位 SPI 字驱动 LMK04828 SPI 接口、并移动24位"相关字"、使得移入的前8位为零?  由于 LMK04828基本上会在时钟沿将 SPI 位发送到移位寄存器中、假设它是24位移位寄存器、那么它是否会在 CS 取消置位之前继续移动完整的32位并保持最后24位?

任何说明都将非常有帮助。

此致、

大卫

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

    David:

    LMK04828可能 通过对最终的8位而不是前8位进行零填充来支持这一点;移位寄存器逻辑可能会在每个事务的第24位进行更新、因此后续的8位将被忽略。

    我还在等待我们的设计团队对此进行确认。 一旦我确定、我就会报告相关情况。

    此致、

    D·佩恩

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

    尊敬的 Derek:

    感谢您的回答。  期待您的确认。  我假设每次 CS 取消置位时、负责选择前24位的 FSM 复位、这样就不会有从一个 SPI 事务传输到下一个 SPI 事务的状态?  因此、每个大于或等于24位的 SPI 事务都会导致使用前24位并丢弃后续位。

    谢谢。

    大卫

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

    您正确的是、FSM 会在 CS 取消置位后重置事务。 现在的困难在于、我不确定 LMK04828是否实现了与 LMK04832相同类型(大多没有文档记录)的块读取/写入功能(请参阅 https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1036075/lmk04832-change-the-external-clk-frequency-setting)。 如果实现了此功能、则 最后8位将具有一些意义;我们不需要填充零事务、而是需要为下一个寄存器偏移准备数据、或找到保存地址并复制数据字节的方法。

    由于各种原因、设计团队可能需要花一些时间才能联系到我们、所以我  明天会尝试通过实验 来验证 SPI 函数、那时我可以进入我们的实验室进行测试。 对于长时间的延迟、我们深表歉意。

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

    尊敬的 Derek:

    感谢您在这方面的及时支持。  我不清楚如何配置 RO 位。  考虑到这是未记录的行为、我担心这种行为可能会从一个修订版本变为下一个修订版本。  TI 是否会考虑插入一个附录来记录此功能?

    谢谢!

    大卫

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

    我确定了以下几点:

    • 4字节写入行为使用前16位对地址进行一次解码、随后的所有字节都写入该地址。 在大多数情况下、 应在事务结束时复制每个数据字节。 示例:如果您要将0x01写入0x0002地址、则应写入0x00020101。
    • 4字节读取行为使用前16位解码一次地址、将该地址上的字节读取到下一个字节、并将尾部字节用零填充。 示例:如果您要读取0x0005、您会将0x8005XXXX 写入器件、回读将为0xXXXX5B00 (X =无关)。
    • 在写入时、我可以想象几个可能需要异常处理的寄存器:
      •  复位=1时写入0x0两次将连续快速复位器件两次。 这应该没问题;复位 明显短于最大 SPI 时钟频率的8个周期。 如果这种情况不太可能会导致故障、您可以通过 RESET=0写入第二个数据字节。
      • 如果在 SPI 模式下使用了 SYSREF 脉冲发生器、则写入0x13E 来触发 SYSREF 脉冲计数可能会重新触发 SYSREF 脉冲发生器。 一种可能的权变措施是使用引脚触发模式。 我认为不存在 SPI 权变措施、因为所有代码都有效、并且所有代码都会触发脉冲发生器。
      • 写入0x142以触发动态数字延迟调整可能会重新触发调整。  您可以将第一个数据字节设置为0、将第二个数据字节设置为所需的值、以避免 调整周期加倍。
      • 写入地址0x168 (N 分频器的 LSB)会触发 VCO 校准;我不确定如果重新触发 VCO 校准会发生什么情况。 可能存在锁定周期、也可能只是复位校准状态机。 我不希望这会阻止锁定 PLL2、但锁定 PLL2可能需要比正常时间长8个 SPI 周期。 如果有问题、作为一种权变措施、您可以在写入此寄存器时将 SPI 时钟频率设置得非常慢、例如10kHz、以便为校准状态机提供800µs 来完成其运行。 该时间应该足够多、以便校准状态机完成最终操作。
      • 写入 SPI_LOCK 寄存器可能会受到影响、但我不确定是如何影响的。  这些寄存器在正常情况下无需写入、因此它可能不会影响您的用例。

    对于只读位或无法识别的地址、可以写入最方便的任何内容、器件将忽略该内容。 我怀疑这个问题的 主要针对 4字节事务中每个数据字节之间的寄存器地址解码发生变化时该怎么办、但我没有观察到在数据字节之间发生变化的地址、因此我认为这是有争议的问题。

    我将会研究如何在数据表中的某个位置记录该行为。 目前、我可以向您保证、此行为在 LMK04828 (-LMK04826 EP、LMK04821和 LMK04228器件的所有生产器件中都是一致的、而且此行为不大可能改变、因为它需要对器件进行重大修订。 为了确保 PCN 包含此类更改、我将在数据表中的某个位置记录这种行为。