Part Number:LMK61E07
在使用中我发现在Autostart启用时,将LMK61E07由100M配置为125M后实际输出频率为130M+。
在未启用Autostart时复位PLL并重新置位Autostart或置位Calibration可输出正确的频率。或写入PLL配置后复位两次PLL也可输出正确频率。
请问是否是我的操作步骤有问题导致了该现象。
以下是可复现现象的Linux Shell脚本
配置为100M
Amy Luo:
您好,
输出频率为130M+时,您读取寄存器R66是什么?
如果将AUTOSTRT设置为1,设备需要复位reset才能自动尝试锁定和启用输出,您是否进行了reset操作?
,
Amy Luo:
您是使用自己的方法对设备进行编程吗?您是否使用TIC Pro或 LMK61xx Oscillator Programming Tool 生成寄存器设置?或者您是否手动生成了设置?
,
Blue Zhang:
在频率为130M+时R66寄存器的值为0xca。
在配置PLL后我进行了Reset操作,Reset前输出频率为117M+,配置PLL后进行两次Reset操作后可输出正确的频率,且R66的值变为0xc8。在125M 配置写入EEPROM中后,启动后就可输出正确的频谱,频率不准现象出现在从100M修改为125M时,由125M修改为100M不存在此现象。
,
Blue Zhang:
我参考配置工具生成的设置用自己的方法对设备进行编程。
,
Amy Luo:
从100M修改为125M的具体操作过程是什么?是否使用了EEPROM或SRAM?
在我看来,如果在100 MHz和125 MHz之间切换,那么您可以设置相同的VCO频率,这样您只需更改输出分频器(OUTDIV)来切换这两种情况,也就是只修改OUTDIV寄存器,无需VCO 复位以重新校准。
,
Amy Luo:
设置VCO频率为5000MHZ,一个 OUTDIV值是50,一个是40这样。
,
Blue Zhang:
从100M修改为125M 修改了PLL和OUTDIV配置,以下为操作使用的Linux Sehll脚本,倒数第二个参数为写入的地址,倒数第一个为写入的数据:
i2ctransfer -y $i2c_index w2@$dcxo_addr 21 0x03i2ctransfer -y $i2c_index w2@$dcxo_addr 23 0x28i2ctransfer -y $i2c_index w2@$dcxo_addr 26 0x32i2ctransfer -y $i2c_index w2@$dcxo_addr 36 0x08i2ctransfer -y $i2c_index w2@$dcxo_addr 72 0x02未使用EEPROM和SRAM,相同的配置写入EEPROM掉电重启后可输出正确的频率。
我只是想知道出现该现象的原因,以避免未来使用过程中可能遇到的问题。
,
Amy Luo:
我还是没明白LMK61E07的工作过程,它是不是这样的?您是先配置输出100MHZ,工作一段时间后(或延迟一段时间后),又做以上寄存器修改,期望LMK61E07 输出125MHZ的频率,结果实际输出频率为130M+?
,
Amy Luo:
我注意到 LMK61E07没有RESETn pin和 RESETN_SW bit,那么触发 PLL Lock只能是上电复位(power-on-reset)。
是不是在没有使用EEPROM的情况下,没法使用Autostart功能?
,
Blue Zhang:
是的
,
Blue Zhang:
SWR2PLL bit也可触发PLL Lock,当未置位AUTOSTART时置位SWR2PLL,LMK61E07会没有输出,随后需要置位AUTOSTART或ENCAL,才会输出。
当置位AUTOSTART时将输出由100M改为125M,会频率不准。而未置位AUTOSTART时做相同PLL配置修改,再置位AUTOSTART或ENCAL不会出现频率不准现象。
,
Amy Luo:
我理解的是在没有使用EEPROM的情况下,没法使用Autostart功能。在100M配置变为125M配置后需执行Autostart值 0->1的这个过程,这样 PLL 才能Lock
,
Blue Zhang:
这无法解释将频率由125M修改为100M时,进行一次RLL Reset 后 PLL即可Lock。
也无法解释将频率由100M修改为125M时,进行两次PLL Reset 后 PLL才能Lock。
,
Amy Luo:
Blue Zhang 说:SWR2PLL bit也可触发PLL Lock,当未置位AUTOSTART时置位SWR2PLL,LMK61E07会没有输出,随后需要置位AUTOSTART或ENCAL,才会输出。
您这里是说SWR2PLL bit不能触发PLL Lock吧?
,
Blue Zhang:
未置位AUTOSTART时,SWR2PLL不能触发PLL Lock,置位时可以触发。
根据我发现的现象,我的理解是当置位AUTOSTART时,置位SWR2PLL可触发PLL Lock sequence,但由100M修改为125M时无法成功Lock导致输出频率存在误差。
未置位AUTOSTART时,置位SWR2PLL不会触发PLL Lock sequence,器件会停止输出。
,
Amy Luo:
我理解的SWR2PLL、AUTOSTART和ENCAL的功能分别是这样的:
SWR2PLL需要在每次寄存器写入或更改后写1以 resets the PLL calibrator and clock dividers。这个是编程寄存器后必须的一个步骤。
在编程完寄存器后需要执行触发PLL Lock,这样PLL才能LOCK设备才能输出正确频率。
AUTOSTART和ENCAL都有触发PLL Lock的功能。AUTOSTART在置1时,配置完寄存器后将SWR2PLL置1后会自动触发PLL Lock。这是上电后一次自动的功能,如果再修改寄存器、SWR2PLL置1,设备不会再自动触发PLL Lock,那么输出频率就会不对,需要使用ENCAL来触发PLL Lock以输出正确频率。或者在需要配置寄存器修改输出频率前,将AUTOSTART置0,配置完寄存器和SWR2PLL置1后,再将AUTOSTART置1以触发PLL Lock输出正确频率。
Blue Zhang 说:
这无法解释将频率由125M修改为100M时,进行一次RLL Reset 后 PLL即可Lock。
也无法解释将频率由100M修改为125M时,进行两次PLL Reset 后 PLL才能Lock。
以上两种情况,分别是在什么情况下触发PLL Lock的?如果与我上述描述功能相冲突,我再去确认下这几个寄存器位的功能。
,
Blue Zhang:
据我测试AUTOSTART并非上电后一次性功能,因为在AUTOSTART置0时置1 SWR2PLL设备会停止输出而非频率不准。
频率不准仅在AUTOSTART置1时,将频率由100M修改为125M时置1 SWR2PLL后存在,在再次将SWR2PLL置1后输出频率正常。在仅写入PLL配置和OUTDIV而不操作SWR2PLL时输出频率为117M左右,与修改前的PLL频率/修改后的OUTDIV相等。
在AUTOSTART置1且SWR2PLL置1后ENCAL似乎无效,因为当输出频率不准时置位ENCAL输出频率不会发生变化,也不会触发PLL Lock,仅当AUTOSTART置0时SWR2PLL置1后置ENCAL才有效。
我的推测原因为在AUTOSTART置1时将频率由100M修改为125M,将SWR2PLL置1后AUTOSTART会自动触发PLL Lock与ENCAL,但不知什么原因导致无法成功Lock,当再次将SWR2RLL置1时,PLL成功Lock。
,
Blue Zhang:
在AUTOSTART置1时
125M->100M: 写PLL与OUTDIV -> SWR2PLL -> Lock
100M->125M: 写PLL与OUTDIV -> SWR2PLL -> 输出频率不准 且 Loss of Lock PLL -> SWR2PLL->Lock
在AUTOSTART置0时
125M->100M: 写PLL与OUTDIV -> SWR2PLL -> 无时钟输出输出 -> AUTOSTART 或 ENCAL -> Lock
100M->125M: 写PLL与OUTDIV -> SWR2PLL -> 无时钟输出输出 -> AUTOSTART 或 ENCAL -> Lock
,
Amy Luo:
Blue Zhang 说:据我测试AUTOSTART并非上电后一次性功能,因为在AUTOSTART置0时置1 SWR2PLL设备会停止输出而非频率不准。
是的,在AUTOSTART置0时,配置完寄存器设备会停止:
Blue Zhang 说:频率不准仅在AUTOSTART置1时,将频率由100M修改为125M时置1 SWR2PLL后存在,在再次将SWR2PLL置1后输出频率正常
在这种情况下,即AUTOSTART置1时,且修改了频率配置时,应使用ENCAL bit 触发PLL LOCK,您是否可以尝试:置1 SWR2PLL后,置1 ENCAL bit是否可以lock?
Blue Zhang 说:在AUTOSTART置1且SWR2PLL置1后ENCAL似乎无效,因为当输出频率不准时置位ENCAL输出频率不会发生变化,也不会触发PLL Lock,仅当AUTOSTART置0时SWR2PLL置1后置ENCAL才有效。
在这种情况下,应该是AUTOSTRT takes precedence.即AUTOSTRT 优先级高,在AUTOSTRT =1时,ENCAL 无效。
In powerup or software rest mode, AUTOSTRT takes precedence.
Blue Zhang 说:
在AUTOSTART置1时
125M->100M: 写PLL与OUTDIV -> SWR2PLL -> Lock
100M->125M: 写PLL与OUTDIV -> SWR2PLL -> 输出频率不准 且 Loss of Lock PLL -> SWR2PLL->Lock
在AUTOSTART置0时
125M->100M: 写PLL与OUTDIV -> SWR2PLL -> 无时钟输出输出 -> AUTOSTART 或 ENCAL -> Lock
100M->125M: 写PLL与OUTDIV -> SWR2PLL -> 无时钟输出输出 -> AUTOSTART 或 ENCAL -> Lock
这四种情况中,第1、3、4项都符合我上述理解描述,第2种情况,我认为您应该置1 ENCAL bit 来触发PLL LOCK,所以测试后请反馈给我是否可以得到正确输出?
,
Blue Zhang:
Amy Luo 说:这四种情况中,第1、3、4项都符合我上述理解描述,第2种情况,我认为您应该置1 ENCAL bit 来触发PLL LOCK,所以测试后请反馈给我是否可以得到正确输出?
在第2种情况
写PLL与OUTDIV -> SWR2PLL -> 输出频率不准 且 Loss of Lock PLL -> ENCAL -> 输出频率无变化且 Loss of Lock PLL
写PLL与OUTDIV -> SWR2PLL -> 输出频率不准 且 Loss of Lock PLL -> AUTOSTART置0 -> ENCAL -> 输出频率无变化且 Loss of Lock PLL
,
Amy Luo:
好的,感谢您的反馈,我去确认下这个问题
,
Amy Luo:
已得到的回复,他说包含ENCAL bit 和AUTOSTRT bit 的寄存器R10 (dev_CTL)可能已弃用,他正在确认这个寄存器的问题。
Blue Zhang 说:100M->125M: 写PLL与OUTDIV -> SWR2PLL -> 输出频率不准 且 Loss of Lock PLL -> SWR2PLL->Lock
关于这个现象,您是否知道出现这种现象的频率?他说他无法复现出这种现象。当他写入输出分配器寄存器时,输出频率发生了变化,之后触发SWR2PLL不会打破锁定或产生持续的错误输出频率。但是在触发SWR2PLL后,偶尔会在很短的时间内出现不正确的输出频率,但它会立即自行纠正。
,
Blue Zhang:
这个现象使用特定配置出现的频率是100%,我在4个芯片测试都是如此。
我修改频率时不仅修改了OUTDIV也修改了PLL相关配置具体使用的配置如下,未注明的寄存器均使用Data Sheet中的Reset值,若需要我可提供我配置使用的Linux sheel脚本。
100M
ADDR
21
23
26VAL
0x03
0x2e
0x2e125M
ADDR
21
23
26VAL
0x03
0x28
0x32
,
Amy Luo:
感谢您的反馈,如果需要我会在这里向你索要。
,
Amy Luo:
已收到以下回复内容,美国的工程师说他还是无法复现您的现象,他希望您提供配置代码,以查看初始化寄存器配置和寄存器写入顺序。
I have learned that register R10 was inherited from an older product and there typically should not be a reason for customers to program it. The device's EEPROM by default has AUTOSTRT = 1, so the device will automatically calibrate its VCO after power-on and after manually triggering a software reset through the SWR2PLL bit, which is generally desired behavior. ENCAL manually triggers the VCO calibration but I think it makes more sense to use SWR2PLL instead, which exists in the fully supported register R72.
I ran some tests in the lab today using in the information you provided. First I configured my device to correctly output a 100 MHz HCSL signal using a N-divider of 0x2e (therefore VCO frequency of 4600 MHz) and output divider of 0x2e. I wrote 0x28 to R23 to change the output divider, the output signal became 4600 MHz / 40 = 115 MHz as expected. Then I wrote 0x32 to R26 to change the N-divider to decimal 50, the output signal deviated to around 116.42 MHz as expected (PLL has not been allowed to recalibrate yet). Finally I wrote 0x02 to R72 to trigger the SWR2PLL software reset and the correct output frequency of 125 MHz immediately appeared. So I was again unable to replicate the problem because I achieved a stable 125 MHz output after the first SWR2PLL reset.
I think it would help to have the customer's configuration code, I would like to check the initial register configuration and the subsequent writes for next week
,
Blue Zhang:
我已将配置脚本发送到英文e2e
,
Amy Luo:
很高兴您已将配置脚本发送到英文e2e,感谢您的反馈!
,
Amy Luo:
已收到回复:
大意是 应该是将0x00写入寄存器R42导致的问题。
R42寄存器隐藏在GUI内部,因此是不打算让客户修改它的。将其写入0x00将模拟闭环稳定时间和VCO等待时间都设置为其最小值,这是不推荐的,并且在您启动软件重置后可能不会给VCO足够的时间来正确重新校准。如果您在更改输出频率之前的任何时间点运行reset(),或者该寄存器值已写入EEPROM,则这可能是导致此现象的原因。
建议根据数据表,将R42的值写入推荐/默认值,应为0b00001001=0x09。修改后看是否解决此问题?如果可以的话,请确保R42在EEPROM中具有正确的值0x09,并避免将来对其进行修改。
,
Blue Zhang:
修改R42值后已解决问题。
但是我发现Data sheet中,Reg map和Reg description中reset值不同,且两套值均无法输出默认频率70.656MHz,Reg map中的值甚至超出了PLL输出频率上限。
以下是我发现的不同
| Reg | 17 | 26 | 34 | 36 | 42 || ————————- | —- | —- | —- | —- | —- || Reg map reset val | 0x00 | 0x64 | 0x24 | 0x28 | 0x00 || Reg description reset val | 0x80 | 0x32 | 0x28 | 0x08 | 0x09 |