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.

[参考译文] LMK04832:更改外部 CLK 频率设置

Guru**** 2551110 points
Other Parts Discussed in Thread: LMK04832

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1036075/lmk04832-change-the-external-clk-frequency-setting

器件型号:LMK04832

大家好、

我们使用 NXP 处理器来控制 LMK 04832、其 SPI 是4线制 SPI、尤其是 DMA 控制、最小传输 SPI 数据为4字节(32位)、但 LMK04832编程是24位寄存器、因此我们在末尾修复了编程寄存器、一个字节填充为0。

这是否会导致 LMK04832寄存器被异常写入? 请建议如何处理 SPI 配置的不同器件之间的通信?

下图显示了向寄存器 addr 0x00写入值0x90、底部是 SCK、顶部是 SDIO、顶部是 CS、您可以看到应该向 SDIO 发送24位(2字节地址、1字节数据)、但 NXP 处理器 的 SPI 向 SDIO 发送了总共32位数据。

谢谢。

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

    您好、Ryan、

    尽管数据表中的任何位置都未记录此功能、但 LMK04832 SPI 接口实际上设计为处理突发写入/读取模式、因此理论上您应该能够连续写入多个寄存器。 显然、在对初始16位读取/写入+地址进行解码后、使用片选低电平读取/写入的每个字节都会自动触发地址增量、地址减量或地址保持。 假设您写入了32位、您将有以下三个选项之一:

    • 升序:例如、16位 r/w 和地址位、寄存器0x000处8位数据、寄存器0x001处8位
    • 降序:例如、16位 r/w 和地址位、寄存器0x001上的8位数据、寄存器0x000上的8位数据
    • 地址保持:例如、16位 r/w 和地址位、寄存器0x000处8位数据、寄存器0x000处8位

    此控制由 R0[2](上行/下行)和 R0[3](保持/提前)处理:

    R0[3] R0[2] 第四个字节的行为
    1 X 写入/读取到同一地址
    0 1 写入/读取地址+ 1
    0 0 写入/读取地址- 1

    尽管它没有说任何地方、但我已确认 R0 = 0x00 (全为零)的默认值、这应使您按降序排列; 这建议了一个序列、在该序列中、您写入 R0以配置 R0[3:2]的设置、让第四个字节写入0x7FFF (写入将被忽略)、然后继续后续写入以使用第四个字节的编程行为。 复位序列会稍微复杂一些、因为使用 RESET=1进行写入会清除 R0[3:2]中的任何设置以使寄存器默认值;因此、用于复位器件的第一次写入和用于配置 R0[3:2]的第二次写入将始终降序为被忽略的地址。

    在某些情况下、您可以写入寄存器映射中未明确定义附近寄存器的寄存器:

    • 0x000 -> 0x001:没关系、0x001未使用(忽略)
    • 0x000 -> 0x7FFF:没关系、0x7FFF 未使用(忽略)
    • 0x7FFF -> 0x000:没关系、0x7FFF 未使用(忽略)
    • 0x16E -> 0x16F (R366 -> R367):不能写入0x16F。 升序写入应从0x16D 开始。
    • 0x16E -> 0x16D (R366 -> R365):0x16D 未使用(忽略)
      • 在这条注释中、网络数据表在寄存器映射中似乎有误:0x16C 包含在全零中、0x16D 省略、0x16E 省略。 相反、应省略0x16C 和0x16D (忽略)、0x16E 应包含 PLL2_LD_MUX 和 PLL2_LD_TYPE 字段。
    • 0x173 -> 0x174 (R371 -> R372):0x174未使用(忽略)
    • 0x173 -> 0x172 (R371 -> R370):您不能写入0x172。 降序写入应从0x174开始。
    • 0x177 ->任意一种(R375 ->任意一种):32位写操作无法达到我所能说的程度、因为您不能写入0x178或0x176。 如果必须访问此字段、则设置 R0[3]= 1。
    • 0x188 -> 0x189 (R392 -> R393):没关系。 0x189是只读的、未公开的器件状态字段。  
    • 0x555 -> 0x556 (R1365 -> R1366):没关系、0x556未使用(忽略)
    • 0x555 -> 0x554 (R1365 -> R1366):没关系、0x554未使用(忽略)
    • -> 0x168 (任意-> R360):任意一种都可以。 确保在写入0x168之前写入0x173、以确保在写入 N 分频器的 LSB (触发 VCO 校准)之前清除 PLL2_PD 和 PLL2_PRE_PD。

    虽然升序/降序写入可能会将编程序列时间缩短近一半、但升序/降序写入的特殊大小可能会增加太多的复杂性、这是可以理解的。 从编程角度而言、最简单的方法是设置 R0[3]= 1、然后用数据字节的副本填充最终字节。

    此致、

    Derek Payne