劳力是无止境1 2026-01-08 15:29 采纳率: 0%
浏览 2

lmk04610时钟同步问题

有人用过lmk04610的SYNC mode吗?
我在给clkout CH12做同步时,发现一打开SYNC_EN_CH,时钟信号就没了,
流程是:打开了0x127/0x128的SYNC_EN_CH,然后GLOBAL_SYNC 置1再置0,clkout没有时钟波形。
CH12没有bypass,div也大于1,符合sync的要求。
重新描述问题:
我需要进行OUTCH1,2的SYNC,于是我在初始配置阶段打开SYNC_EN_CH1/2, STARTUP后进行GLOBAL_SYNC ,如下代码设置:

       6'h27:  pll_cfgdata_r <= 24'h01_27_20;    //OutputCH1SYNCEnable
        6'h28:  pll_cfgdata_r <= 24'h01_28_20;    //OutputCH2SYNCEnable
        6'h29:  pll_cfgdata_r <= 24'h00_11_01; //50110001
        6'h32:  pll_cfgdata_r <= 24'h00_14_01;  // Global SW SYNC. Writing 1 puts the Device into SYNC mode. Writing 0 exits SYNC mode.
        6'h3a:  pll_cfgdata_r <= 24'h00_14_00; 

我确定CH12的Divider value是2,以便它们可以被SYNC响应;
但上电后我发现ch12根本没有输出,它们只有很小的抖动,当我关掉SYNC_EN_CH1/2时,它们回到了稳定输出1ghz(what I configed)的波形,或许是打开SYNC_EN进入了SYNC的某些状态导致它们不输出了?我不确定,但我设置GLOBAL_SYNC后它们也并没有回到1ghz的输出状态。
LMK04610配置如下:

always @ (*)begin
    case (pll_reg_count)
        6'h0:   pll_cfgdata_r <= 24'h00_10_1e; //
        6'h1:   pll_cfgdata_r <= 24'h00_10_1e; //
        6'h2:   pll_cfgdata_r <= 24'h00_10_1e; //5010001e
        6'h3:   pll_cfgdata_r <= 24'h00_2e_0c; //502e000c
        6'h4:   pll_cfgdata_r <= 24'h00_2f_01; //502f0001
        6'h5:   pll_cfgdata_r <= 24'h00_6c_01; //506c0001
        6'h6:   pll_cfgdata_r <= 24'h00_12_04; //50120004
        6'h7:   pll_cfgdata_r <= 24'h00_13_10; //50130010
        6'h8:   pll_cfgdata_r <= 24'h00_14_00; //50140000
        // 6'h8:   pll_cfgdata_r <= 24'h00_14_80; //50140000  enable sync pin
        6'h9:   pll_cfgdata_r <= 24'h00_16_28; //50160028
        6'hA:   pll_cfgdata_r <= 24'h00_6d_88; //506d0088
        6'hB:   pll_cfgdata_r <= 24'h00_75_00; //50750000
        6'hC:   pll_cfgdata_r <= 24'h00_76_01; //50760001
        6'hD:   pll_cfgdata_r <= 24'h00_72_14; //50720014
        6'hE:   pll_cfgdata_r <= 24'h00_73_00; //50730000
        6'hF:   pll_cfgdata_r <= 24'h00_74_28; //50740008 14   PLL2 N-Divider Value   40
        // 6'h10:  pll_cfgdata_r <= 24'h01_46_3c; //5146003c  // prescaler is DIV6
        6'h10:  pll_cfgdata_r <= 24'h01_46_0c; //5146003c      // prescaler is DIV3
        6'h11:  pll_cfgdata_r <= 24'h00_34_63; //50340063 43 62   HSDS 8 mA   adc sampling clk
        6'h12:  pll_cfgdata_r <= 24'h00_35_18; //50350018 10                       adc sampling clk
        6'h13:  pll_cfgdata_r <= 24'h00_36_03; //50360003 02                      adc sampling clk
        6'h14:  pll_cfgdata_r <= 24'h00_37_18; //50370018 00   OUTCH34CNTL0
        6'h15:  pll_cfgdata_r <= 24'h00_38_63; //50380063 03   OUTCH34CNTL1
        6'h16:  pll_cfgdata_r <= 24'h00_39_18; //50390018 00      clkout5 fpga clk
        6'h17:  pll_cfgdata_r <= 24'h00_3a_03; //503a0003            clkout5 fpga clk enable
        6'h18:  pll_cfgdata_r <= 24'h00_3c_63; //503c0063 03   OUTCH6CNTL1
        6'h19:  pll_cfgdata_r <= 24'h00_3d_00; //503d0000 
        6'h1a:  pll_cfgdata_r <= 24'h00_3e_02; //503e0063 03
        6'h1b:  pll_cfgdata_r <= 24'h00_40_02; //50400063 03   OUTCH9CNTL1
        6'h1c:  pll_cfgdata_r <= 24'h00_41_00; //50410018 00   OUTCH10CNTL0
        6'h1d:  pll_cfgdata_r <= 24'h00_42_02; //50400063 03   OUTCH10CNTL1
        6'h1e:  pll_cfgdata_r <= 24'h00_4c_0a; //504c0005        clkout6  Divider val
        6'h1f:  pll_cfgdata_r <= 24'h00_4e_0a; //504e0005        clkout78  Divider val
        6'h20:  pll_cfgdata_r <= 24'h00_44_02; //50440001                clkout1    adc sampling clk Divider val
        6'h21:  pll_cfgdata_r <= 24'h00_46_02; //50460001                clkout2    adc sampling clk  Divider val
        6'h22:  pll_cfgdata_r <= 24'h00_47_00; //50470000
        6'h23:  pll_cfgdata_r <= 24'h00_48_0a; //50480005    clkout 34  Divider val
        6'h24:  pll_cfgdata_r <= 24'h00_4a_10; //504a000a        clkout5 fpga clk  Divider val
        6'h25:  pll_cfgdata_r <= 24'h00_50_08; //50500004     clkout9  Divider val
        6'h26:  pll_cfgdata_r <= 24'h00_52_08; //50520004        clkout10  Divider val
        6'h27:  pll_cfgdata_r <= 24'h01_27_20;    //OutputCH1SYNCEnable
        6'h28:  pll_cfgdata_r <= 24'h01_28_20;    //OutputCH2SYNCEnable

        6'h29:  pll_cfgdata_r <= 24'h00_11_01; //50110001
        6'h2a:  pll_cfgdata_r <= 24'h00_95_0d; //5095000d
        6'h32:  pll_cfgdata_r <= 24'h00_14_01;  // Global SW SYNC. Writing 1 puts the Device into SYNC mode. Writing 0 exits SYNC mode.
        6'h3a:  pll_cfgdata_r <= 24'h00_14_00; 
        6'h3b:  pll_cfgdata_r <= 24'h009402;
        // 6'h3b:  pll_cfgdata_r <= 24'h321321;

        default:  pll_cfgdata_r <= 24'h00_95_0d; //5095000d
    endcase
end

  • 写回答

2条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2026-01-08 15:30
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析:
      - 使用lmk04610的SYNC mode对clkout CH12进行同步时,打开SYNC_EN_CH后时钟信号消失。
      - 已知操作流程为打开了0x127/0x128的SYNC_EN_CH。
    2. 解决方案:
      - 首先,检查相关寄存器设置是否正确。对于lmk04610,在使用SYNC mode时,除了设置SYNC_EN_CH,还需要确保其他相关的时钟配置寄存器(如时钟源选择、分频设置等)没有冲突或错误配置。例如,确认clkout CH12的时钟源是否正确连接且配置无误,以及是否有其他设置影响了该通道的输出。
      - 代码示例(假设使用SPI接口配置寄存器):
      ```c
      // 初始化SPI通信
      void spi_init() {
      // 配置SPI引脚
      // 配置SPI时钟等参数
      }

      // 写入寄存器函数
      void write_register(uint16_t address, uint8_t data) {
      spi_select_device();
      spi_transfer(address >> 8);
      spi_transfer(address & 0xFF);
      spi_transfer(data);
      spi_deselect_device();
      }

      // 检查是否正确配置了SYNC_EN_CH
      void check_sync_config() {
      uint8_t sync_status;
      write_register(0x127, 0x00); // 读取SYNC_EN_CH相关寄存器值
      spi_transfer(0x00);
      sync_status = spi_transfer(0x00);
      if ((sync_status & 0x01)!= 0) { // 假设最低位对应SYNC_EN_CH
      // SYNC_EN_CH配置正确
      } else {
      // 重新配置SYNC_EN_CH
      write_register(0x127, 0x01); // 设置SYNC_EN_CH
      }
      }
      ```
      - 另外,查看芯片手册中关于SYNC mode的详细说明,确认是否有特定的初始化步骤或条件需要满足。比如,可能需要在特定的时钟模式下才能正常使用SYNC mode,或者需要先进行一些预配置。
      3. 多种解决方案优缺点:
      - 优点:
      - 检查寄存器设置的方法较为直接,能够快速定位到可能的配置错误点。通过代码示例可以方便地实现自动化检查和配置调整,适用于批量生产或需要频繁配置的场景。
      - 参考芯片手册能获取最准确的官方信息,确保按照正确的流程和条件进行操作,避免因遗漏关键步骤而导致问题。
      - 缺点:
      - 检查寄存器设置需要对芯片的寄存器结构和功能有深入了解,对于新手可能有一定难度。
      - 芯片手册可能篇幅较长,查找相关信息需要花费一定时间,尤其是手册内容复杂时。
      4. 总结:
      - 针对lmk04610时钟同步问题,首先要仔细检查寄存器设置,特别是与SYNC_EN_CH相关的配置以及其他影响clkout CH12的时钟配置。通过代码示例可以辅助进行配置检查和调整。同时,参考芯片手册获取准确的初始化步骤和条件也是解决问题的关键。要综合运用这些方法来排查和解决时钟信号消失的问题。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月8日