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.

[参考译文] LMX2592:时钟输出在未进行下电上电的情况下不工作

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1438556/lmx2592-clock-output-not-working-without-power-cycle

器件型号:LMX2592

工具与软件:

您好!



我们在项目中使用了 LMX2592芯片、我们希望能够在100 MHz 和2.5GHz 之间设置每个频率(精度为~1Hz)。 我们根据在 Github (未经测试)上找到的 C++实现、数据表中的信息以及 TICS Pro 提供的信息、在 Python 中编写了自己的驱动程序。 在对电路板进行下电上电后、似乎一切都在相应地工作、我们可以 一次性设置所需的每个频率。 但是、如果我们不对电路板进行下电上电(例如、我们重新启动电路板、重新启动应用、或者我们只是尝试在运行时设置新频率)、我们只能 得到少量频率的有效输出、对于大多数频率、我们根本不会得到输出。 每次启动应用时、我们都要遵循以下启动过程:

1.我们依次向寄存器0的"RESET"字段写入0和1、对芯片进行软复位

2.我们写入的默认寄存器值似乎按降序排列有效:

(第一个值是地址、第二个值是值)
64:0x0077
62:0x0000
61:0x0001
59:0x0000
48:0x03FC
47:0x08CF
46:0x0FE3
45:0x0000
44:0x0000
43:0x0000
42:0x0000
41:0x03E8
40:0x0000
39:0x8204
38:0x0036
37:0x4000
36:0x0011
35:0x021F
34:0xC3EA
33:0x2A0A
32:0x210A
31:0x0601
30:0x0034
29:0x0084
28:0x2924
25:0x0000
24:0x0509
23:0x8842
22:0x2300
20:0x012C
19:0x0965
14:0x018C
13:0x4000
12:0x7001
11:0x0018
10:0x10D8
9:0x0302
8:0x1084
7:0x28B2
4:0x3F43
2:0x0500
1:0x0808
0:0x221C

3.我们读回所有寄存器

4.我们 先写入0、然后再写入1到寄存器0的'FCAL_EN'字段

5.我们再次读回所有寄存器

如果我们要更改输出频率、 首先确定所有所需的值、然后将所有寄存器(仅更改了的寄存器)中的新值按降序写入、然后再次运行校准序列。 更改输出频率时、以下值可能会发生变化:

- OSC_2X
- PLL_R_PRE
- Mult
- PLL_R
- PLL_N_PRE
- PLL_N
- PLL_NUM_LSB
- PLL_NUM_MSB
- PLL_DEN_LSB
- PLL_DEN_MSB
- CHDIV_SEG1_EN
- CHDIV_SEG2_EN
- CHDIV_SEG3_EN
- CHDIV_SEG2.
- CHDIV_SEG3
- CHDIV_SEG_SEL
- CHDIV_DIST_PD
- CHDIV_SEG1
- FCAL_LPFD_ADJ
- FCAL_HPFD_ADJ
- PFD_CTL
如果我们要更改输出功率、 我们首先确定所有必需的值、然后将新值按降序写入所有寄存器(仅限已更改的寄存器)。 更改输出功率时、以下值可能会发生变化:
- CHDIV_DIST_PD
- CHDIV_dista_en
- VCO_dista_pd
- CHDIV_dista_en
- VCO_dista_pd
- OUTA_PD
- OUTA_POW
- CHDIV_DISTB_EN
- VCO_DISTB_PD
- OUTB_PD
- OUTB_POW
按照启动过程执行之后、我们首先将两个端口的输出频率设置为某个值(例如200 MHz)、并将两个端口的输出功率设置为15。 如果我们在下电上电后从200 MHz 开始、我们可以再次写入200 MHz 以及一些其他值(例如150MHz)、但我们不能写入201 MHz。 如果我们在下电上电后从201 MHz 开始、可以再次写入201 MHz 和一些其他值、但无法写入200 MHz 等值。 我们还尝试每次在写入新频率之前进行软复位、但这没有帮助。 我们希望能够随时随地使用所有频率、不受芯片是否进行了下电上电的影响、也不受下电上电后从哪个频率开始的影响。 我们如何实现这一点?


谢谢、我们期待您的答复。

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

    您好、Roy:

    由于您具有 TICS Pro 的相关经验、最好能以 TICS Pro 格式提供配置。

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

    Noel、您好!

    我们不使用 TICS Pro、我们仅使用它一次、以获取寄存器的默认设置。

    此致、
    罗伊

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

    Noel、您好!

    我尝试通过在 TICS Pro 导出的十六进制寄存器值中提供寄存器值来说明一切。 我希望这是明确的。

    Fosc = 625 MHz


    在应用的初始启动期间、我们首先写入此地址以复位芯片:

    Fullscreen
    1
    R0 0x00221E
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    接下来、我们写入所有初始值:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    R64 0x400077
    R62 0x3E0000
    R61 0x3D0001
    R59 0x3B0000
    R48 0x3003FC
    R47 0x2F08CF
    R46 0x2E0FE3
    R45 0x2D0000
    R44 0x2C0000
    R43 0x2B0000
    R42 0x2A0000
    R41 0x2903E8
    R40 0x280000
    R39 0x278204
    R38 0x260036
    R37 0x254000
    R36 0x240011
    R35 0x23021F
    R34 0x22C3EA
    R33 0x212A0A
    R32 0x20210A
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    之后、我们首先编写这个来进行校准:

    Fullscreen
    1
    R0 0x000000
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后出现以下问题:

    Fullscreen
    1
    R0 0x000008
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    接下来、通过写入以下内容来设置所需的时钟频率(200 MHz)和输出功率值(两个端口上都为15):

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    R47 0x2F00CF
    R46 0x2E0F23
    R45 0x2D2815
    R44 0x2C007F
    R41 0x29EA15
    R40 0x280C6A
    R38 0x26002E
    R36 0x240C20
    R35 0x23109F
    R12 0x0C7009
    R11 0x0B0028
    R10 0x0A11D8
    R0 0x000088
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    然后、我们通过首先写入以下内容再次进行校准:

    Fullscreen
    1
    R0 0x000080
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    随后说明:

    Fullscreen
    1
    R0 0x000088
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    现在启动序列已完成、输出时钟为200 MHz。


    我们可以更改时钟频率、例如201 MHz。 为此、我们首先重新计算所有值、然后写入以下寄存器值:

    Fullscreen
    1
    2
    R45 0x2D5E15
    R44 0x2C01ED
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后、使用以下内容进行校准:

    Fullscreen
    1
    R0 0x000080
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    随后说明:

    Fullscreen
    1
    R0 0x000088
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    这将导致时钟上没有更多的输出。

    现在、我们想把频率改回200 MHz。 我们首先编写这样的代码:

    Fullscreen
    1
    2
    R45 0x2D2815
    R44 0x2C007F
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    然后、使用以下内容进行校准:

    Fullscreen
    1
    R0 0x000080
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    随后说明:

    Fullscreen
    1
    R0 0x000088
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    这将导致200MHz 的输出时钟。 有时这也会导致没有输出时钟。


    现在、我们要将频率改回110 MHz。 我们首先编写这样的代码:
    Fullscreen
    1
    2
    3
    4
    5
    R45 0x2DB340
    R44 0x2C09D5
    R38 0x260042
    R36 0x240C42
    R35 0x23119B
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后、使用以下内容进行校准:

    Fullscreen
    1
    R0 0x000080
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    随后说明:

    Fullscreen
    1
    R0 0x000088
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    这将产生一个110 MHz 的输出时钟。  有时这也会导致没有输出时钟。


    问题是:为什么 200 MHz 和110 MHz 可以工作(大多数情况下)、但201 MHz 不能工作? 如果我们对电路板进行下电上电、并从头开始对201 MHz 进行编程、则201 MHz 可以正常工作、但我们无法再设置200 MHz。 为什么会出现这种情况、我们能解决它吗?

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

    您好、Roy:

    在 TICS Pro 中使用初始寄存器值 WTIH Fosc = 625MHz 时、表明存在错误。 您是否要再次检查您的寄存器设置?

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

    尊敬的 Noel:
    谢谢您、我们对初始寄存器值和频率校准过程进行了一些更改、因为它现在更加频繁(但不是每次)地工作。 这是我们新的初始化过程:

    首先、我们通过写入以下内容来复位芯片:

    Fullscreen
    1
    R0 0x000292
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后、我们写入以下初始值:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    R64 0x400077
    R62 0x3E0000
    R61 0x3D0001
    R59 0x3B0000
    R48 0x3003FC
    R47 0x2F08CF
    R46 0x2E0FE3
    R45 0x2D0000
    R44 0x2C0000
    R43 0x2B0000
    R42 0x2A0000
    R41 0x2903E8
    R40 0x280000
    R39 0x278204
    R38 0x260036
    R37 0x254000
    R36 0x240011
    R35 0x23021F
    R34 0x22C3EA
    R33 0x212A0A
    R32 0x20210A
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    接下来、我们对芯片进行编程、以生成200 MHz 输出:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    R47 0x2F00CF
    R46 0x2E0F23
    R45 0x2D2815
    R44 0x2C007F
    R41 0x29EA15
    R40 0x280C6A
    R38 0x26002E
    R36 0x240C20
    R35 0x23109F
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    然后、我们启用频率校准:

    Fullscreen
    1
    R0 0x000298
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后等待1秒、然后我们禁用频率校准:

    Fullscreen
    1
    R0 0x000290
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    如果我们要将频率更改为其他频率、我们首先写入更改后的寄存器值、然后按照上述方法进行校准。 它似乎适用于大多数频率。 但是、如果我们专门将其更改为110 MHz、则输出频率变为~87 MHz。 我们以这种方式编写110 MHz:
    首先、写入这些寄存器:

    Fullscreen
    1
    2
    3
    4
    5
    R45 0x2DB340
    R44 0x2C09D5
    R38 0x260042
    R36 0x240C42
    R35 0x23119B
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后、我们通过首先写入此函数来启用校准、从而进行校准:

    Fullscreen
    1
    R0 0x000298
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后等待1秒钟、然后写入该值以禁用校准:

    Fullscreen
    1
    R0 0x000290
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我们试图将启用和禁用频率校准的间隔时间从1秒增加到10秒、但这没用。 如果我们在 TICS Pro 中导入寄存器值、输出频率似乎正确、但当我们用示波器测量时、不正确。 您是否知道问题可能出在哪里?

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

    您好、Roy:

    首先、请勿使用 CP_ICOARSE、否则锁定检测可能无法正常工作、请参阅最新版本数据表中的建议。

    这是您当前的配置:

    将其更改为以下值会在不启用 CP_ICOARSE 的情况下产生相同的电荷泵电流。

    其次、除非您不使用、否则 R0位13应设置为=1以启用锁定检测。

    事实上、初始化和200MHz 时钟生成可以同时包含在一个序列中。 将 R64编程为 R0 (FCAL_EN = 0)、等待10ms、然后对 R0编程(FCAL_EN=1)。 您可以始终保持 FCAL_EN = 1。 10ms 等待时间仅适用于初始化。

    对于110Mhz 的输出、您的 VCO 超过7GHz、这是无效配置。

    要获得110Mhz、VCO 应在3564MHz 到3996MHz 的范围内、有关详细信息、请参阅最新版本的数据表。