简介:LMK04821中文数据手册是一份面向硬件工程师与时钟设计人员的芯片级参考资料,围绕TI LMK0482x系列超低噪声时钟抖动消除器展开,重点解读其符合JEDEC/JESD204B标准、双PLL架构、14路可编程差分时钟输出及SYSREF生成机制,适用于无线基础设施、数据转换器时钟、测试测量等高性能时钟树设计场景。资源内为1个PDF文件,压缩包大小6.48MB,内容涵盖芯片特性、应用说明、封装引脚定义、引脚功能配置、SPI接口及关键设计注意事项,可直接对照英文原版手册使用。目前已有288人学习下载。读者通过该中文手册可快速掌握芯片的时钟分组、输出格式选择、动态数字延迟与模拟延迟等核心功能,减少查阅原始英文数据手册的时间,尤其适合需要完成JESD204B时钟同步方案选型与硬件调试的工程师参考。
1. 超低噪声时钟抖动消除器:JESD204B 时钟树里的关键角色
做高速数据采集或者 JESD204B 接口系统时,最怕的不是信号电平不够,而是采样时钟抖动在频域上表现为噪声本底抬升,直接影响 ADC 的 SNR。LMK0482x 这颗超低噪声时钟抖动消除器,把双 PLL 集成在一颗 64 引脚 QFN 封装里,专治这一类时钟树问题。如果你正在给 FPGA、ADC/DAC 或者无线收发链路设计时钟分配方案,这颗芯片能在一个封装内同时提供设备时钟和 SYSREF 时钟,最多驱动 7 个 JESD204B 转换器。这篇笔记从工作原理讲到寄存器配置、从引脚分配到高频踩坑,适合正在读数据手册、准备画原理图或者已经拿到样片调板的人。
2. 双 PLL 架构与三种工作模式:先选对模式再谈配置
2.1 PLL1 和 PLL2 各自干什么
LMK0482x 内部是两个级联的 PLL。PLL1 主要负责参考时钟的选择和净化:它有 CLKin0、CLKin1、CLKin2 三个输入端口,支持冗余备份,自动切换和手动切换都能做,切换时保证不产生中断脉冲,并且带 LOS 检测。如果参考源全部丢失,它还能进入保持模式,靠内部低噪声晶体振荡器电路维持输出频率稳定一段时间。这组功能对通信设备特别重要,因为基站或传输设备不允许因为某一路参考钟故障就导致整板失锁。
PLL2 才是真正干活的部分。它负责把 PLL1 净化后的时钟倍频到 VCO 频率,再通过分频器分到各个输出端口。PLL2 的鉴相频率最高到 155 MHz,PLL 本底噪声做到 -227 dBc/Hz,两个集成的低噪声 VCO 覆盖不同频段。按照原厂手册给的指标,12 kHz 到 20 MHz 积分区间内 RMS 抖动 88 fs,100 Hz 到 20 MHz 区间 91 fs,245.76 MHz 处本底噪声 -162.5 dBc/Hz。这个量级已经足够喂饱大多数 14 位以上的高速转换器。
级联架构的核心价值在于:PLL1 把输入的参考钟带宽压得很窄,滤掉参考源本身的近端相噪;PLL2 再把干净的参考倍频到高频。这样外部参考钟的质量要求可以大幅放宽,系统里其他数字器件产生的电源噪声也不会轻易耦合到最终输出上。
2.2 三种模式的适用场景
芯片支持双 PLL、单 PLL 和时钟分配三种模式。双 PLL 模式最常用,外部输入经 PLL1 净化后送给 PLL2 倍频输出;单 PLL 模式绕过 PLL1,直接用 OSCin 作为 PLL2 的参考,适合参考源本身已经很干净、不需要额外净化的场合;时钟分配模式则完全关闭 PLL,只做缓冲和分频,等于一颗高精度时钟扇出芯片。
我一般这样选型:如果参考源是普通 10 MHz OCXO 或者板载晶体,走双 PLL;如果系统里有现成的高性能时钟模块,比如 -150 dBc/Hz 级别的恒温晶振,直接走单 PLL 更省功耗;如果只是想把一路时钟分成多路给不同器件,不要求抖动清洗,分配模式就够了。
三种模式下寄存器配置差异很大,尤其是 PLL1 使能位、OSCin 倍频器旁路位、VCO 选择位,搞错的最终表现都是输出频率不对或者失锁。下面给一个双 PLL 模式下的频率规划计算示例。
# 示例:参考 122.88 MHz,输出 245.76 MHz 设备时钟 fin_ref = 122.88e6 # OSCin / PLL1 输出频率 f_vco = 2457.6e6 # PLL2 VCO 目标频率 f_out = 245.76e6 # 目标设备时钟 # PLL2 反馈分频比:VCO / 鉴相频率 f_pd = 122.88e6 # 鉴相频率等于参考频率 n_div = round(f_vco / f_pd) # 输出分频比:VCO / 输出频率 out_div = round(f_vco / f_out) print(f"N 分频 = {n_div}, 输出分频 = {out_div}") # 结果:N 分频 = 20, 输出分频 = 10这段逻辑的核心是先把目标频率换算成 VCO 频率,再反推 N 分频和输出分频。n_div 决定了压控振荡器反馈回来的分频比,out_div 决定最终输出频率。实际配置时还要考虑 VCO 频率是否落在芯片两个 VCO 的覆盖范围内、鉴相频率是否超过 155 MHz、输出分频是否在 1 到 32 之间。如果参考频率不是 122.88 MHz 这类整数友好值,就要用 OSCin 倍频器先把它凑到合适的鉴相频率,或者启用小数分频。我在板子上第一次配 245.76 MHz 输出时没注意 OSCin 倍频器的存在,直接用 10 MHz 参考去算 N 分频,结果 N 分频算出个非整数,最后查寄存器才发现倍频器没使能,参考频率得先倍频到 122.88 MHz 再做整数分频。
2.3 保持模式和冗余切换的寄存器侧重点
PLL1 的冗余输入切换分为自动和手动两种。手动模式由 CLKin_SEL0 和 CLKin_SEL1 两个引脚的电平直接决定选哪一路输入,适合系统主控明确知道当前应该用哪路参考的场景。自动模式则由片内逻辑根据 LOS 检测结果自行切换,一旦当前输入丢失就转到备份输入。这里有个容易被忽略的点:自动切换时的切换条件不只是 LOS,还包括频率是否在可接受范围内,配置寄存器里有一组频率检测阈值参数,默认值对某些慢速参考钟不一定合适。
保持模式的基础是 PLL1 的保持 DAC 电路。芯片在正常锁定时会持续采样 VCO 控制电压,参考丢失后保持电路用之前采样的值继续驱动 VCO,让输出在短时间内仍然维持正确频率。保持模式下输出频率漂移速度取决于保持 DAC 的精度和采样数据质量,所以配置时要保证从锁定到丢失之间给了保持电路足够的采样时间。刚加电就立刻拔掉参考钟,保持效果往往很差,因为采样值还没稳定。
3. 十四路输出与时钟组分配:设备时钟和 SYSREF 时钟的拆分逻辑
3.1 输出引脚分组与电源域
芯片一共有 14 路来自 PLL2 的差分输出,命名规律是 DCLKout 偶数编号和 SDCLKout 奇数编号成对出现。比如 DCLKout0 和 SDCLKout1 组成一对,DCLKout2 和 SDCLKout3 组成一对,以此类推。DCLK 端口用于输出设备时钟,SDCLK 端口可以单独配置为 SYSREF 时钟或者普通设备时钟。手册把输出端口分成了四个时钟组,每组对应独立的电源引脚,这是布局布线时最重要的约束。
| 时钟组 | 输出端口 | 电源引脚 | 典型用途 |
|---|---|---|---|
| 组 0 | DCLKout0 / SDCLKout1 / DCLKout12 / SDCLKout13 | Vcc12_CG0 | 设备钟 + SYSREF |
| 组 1 | DCLKout2 / SDCLKout3 | Vcc2_CG1 | 设备钟 + SYSREF |
| 组 2 | DCLKout4 / SDCLKout5 / DCLKout6 / SDCLKout7 | Vcc4_CG2 | 多路设备钟 |
| 组 3 | DCLKout8 / SDCLKout9 / DCLKout10 / SDCLKout11 | Vcc11_CG3 | 多路设备钟 |
不同组的输出由不同电源引脚供电,且每个电源引脚的去耦要求随输出频率变化。数据手册里有一句需要反复读的话:为尽量减少噪声,应使同一时钟组内的所有输出保持相同频率或无杂散干扰的频率。如果组 0 里一路跑 245.76 MHz,另一路跑 10 MHz,这两路频率不是整数倍关系时,混频产物可能直接落进带内,导致测到的相噪曲线在某个 offset 频率处出现异常的凸起。设计输出频率规划时,尽量把频率相关的输出放在同一组,或者让同一组输出频率呈整数倍关系。
3.2 SYSREF 的产生和对齐机制
JESD204B 的 Subclass 1 要求设备钟和 SYSREF 之间有确定的相位关系。LMK0482x 的做法是:从 PLL2 的 VCO 分出一路给 SYSREF 分频器,SYSREF 分频器的输出再送到各个 SDCLKout 端口。这样设备钟和 SYSREF 都由同一个 VCO 产生,天然具备确定的相位关系,剩下要做的就是保证相位延迟一致。
SYNC/SYSREF_REQ 引脚承担同步职能。它可以复位输出分频器,让所有输出从同一个边沿开始计数;也可以触发 SYSREF 脉冲发生器,产生单次、连续或 N 次脉冲的 SYSREF。实际使用中,FPGA 会在初始化完成后拉一次 SYNC,把各路输出的相位重新对齐,然后释放,JESD204B 链路才开始传送数据。
如果物理走线长度不一致导致 SYSREF 到达各转换器的时间不同,就要用到芯片的延迟调节功能。动态数字延迟可以在不改变输出频率的前提下,按 SYSREF 分频器的时钟步进调整 SYSREF 的相位,适合粗调;25 ps 步进的模拟延迟则用在最后一级做细调。我的习惯是先用数字延迟把相位粗调到接近目标,再用模拟延迟做精细补偿,避免上来就动模拟延迟,因为模拟延迟的调节范围有限,且对电压和温度更敏感。
# SYSREF 对齐参数估算:已知设备钟周期,计算数字延迟步进数 f_device = 245.76e6 # 设备时钟频率 245.76 MHz device_period = 1e12 / f_device # 设备时钟周期,单位 ps sysref_div = 10 # SYSREF 分频比 sysref_step = device_period * sysref_div # 数字延迟一个步进对应的 ps # 假设走线延迟差实测为 850 ps delay_diff_ps = 850.0 steps = round(delay_diff_ps / sysref_step) print(f"设备钟周期 = {device_period:.2f} ps, 数字延迟步进 = {sysref_step:.2f} ps") print(f"需要设置 {steps} 步数字延迟")这段代码算的是理论步进数。关键参数是 sysref_div,它决定了数字延迟的最小可调颗粒度。实际板卡上走线延迟差不会刚好是步进的整数倍,剩余部分交给 25 ps 模拟延迟补齐,两条腿走路。如果算出来的数字延迟步数正好能让 SYSREF 边沿落在设备钟窗口中心位置,那对齐效果就非常好。
3.3 输出格式选择
每路差分输出可以独立配置为 LVPECL、LVDS、HSDS、LCPECL 格式。不同格式对端接电阻的要求不同,LVPECL 需要 240 Ω 发射极电阻到地,LVDS 需要 100 Ω 差分终端匹配,HSDS 和 LCPECL 各有各的共模电压范围。电源电压 3.15 V 到 3.45 V 的范围内,这些格式都能正常工作,但电平摆幅和共模点会随供电电压略有偏移。
高频输出首选 LVPECL,因为它摆幅大、边沿快,驱动能力最好,代价是功耗高,而且必须严格按手册要求接终端电阻。LVDS 功耗低、接口兼容性好,但驱动长距离走线能力弱一些。做 1 GHz 以上的时钟分配,我基本只用 LVPECL,做板内短距离低速 SYSREF 则可以用 LVDS 省电。未使用的输出端口必须把输出格式缓冲器配置为掉电状态,并让引脚保持浮空,这能明显减少输出级翻转产生的串扰。
4. SPI 寄存器配置:写对每个字节才是第一步
4.1 接口时序和帧格式
芯片的 SPI 接口是标准 20 MHz 以下的三线或四线模式。CS 低电平有效,SCK 上升沿把 SDIO 上的数据送进移位寄存器,CS 上升沿把整个帧的内容锁存到目标寄存器。手册特别提到所有输入信号压摆率至少 30 V/μs,这等于提醒你 SPI 走线不要拉太长,也不要在上面串太大电阻,否则边沿变缓后时序裕量会出问题。
帧格式按 R/W 位、W1/W0 位、寄存器地址、数据位组织,R/W = 0 是写、R/W = 1 是读。三线模式下 SDIO 是双向口,读操作时芯片在数据阶段驱动 SDIO 引脚;四线模式下可以用独立的 MISO 引脚,让 SDIO 保持单向写数据,与 FPGA 或 MCU 的标准 SPI 控制器对接更方便。默认情况下 SDIO 的输出驱动器可以配成推挽或开漏,开漏模式需要外部上拉电阻。
# 用 GPIOD 模拟 SPI 写寄存器示例 import time def spi_write_reg(sdi, sck, cs, addr, data): # 帧格式:1 位 R/W + 2 位 W 位 + 15 位地址 + 8 位数据,共 26 bit # 具体位宽以手册寄存器映射表为准,这里按常见格式示例 frame = (0 << 25) | (0 << 23) | ((addr & 0x7FFF) << 8) | (data & 0xFF) cs.off() # CS 拉低,开始传输 for i in range(25, -1, -1): # MSB 先出 sdi.val = (frame >> i) & 1 # 当前 bit 送到 SDIO sck.on() # SCK 上升沿采样 sck.off() cs.on() # CS 拉高,锁存寄存器 time.sleep(0.0001) # 留出片间间隔 # 示例:把地址 0x140 的寄存器写入 0x80 spi_write_reg(sdi_pin, sck_pin, cs_pin, 0x140, 0x80)代码里的核心逻辑是按位拼装帧数据,从最高位开始逐位输出。注意 addr 和 data 的位宽必须与手册给出的帧格式一致,上面代码按 26 位帧做的示例,不同器件可能有差异。CS 拉高后芯片才会把移位寄存器内容真正写入目标地址,所以 CS 的建立保持时间和最小高电平时间要满足时序要求。我习惯在每次写操作后面加一个极短延时,避免连续快速操作时 CS 释放不彻底。
4.2 寄存器配置顺序和回读验证
配置 LMK0482x 有一个推荐的顺序:先配 PLL1 相关寄存器,再配 PLL2,最后配输出格式和 SYSREF。如果顺序反过来,芯片可能在输出端短暂输出错误频率,导致后级器件误动作。特别是 SYNC 相关的配置,必须在所有分频器和输出格式都设置完毕后再触发,否则一次 SYNC 不能把所有输出对齐到正确的相位关系。
回读验证是排查必做的环节。写一个寄存器后立刻读同一个地址,比对写入值和读出值是否一致。这个操作能同时验证三件事:SPI 时序是否可靠、寄存器地址是否正确、芯片是否进入正常工作状态。如果读回全 0 或者全 1,多半是 CS 极性、SDIO 方向或者引脚复用配置的问题。Status_LD1 和 Status_LD2 两个引脚默认输出 PLL1/PLL2 的锁定状态,电平拉高说明对应 PLL 锁定,硬件调试时用示波器同时抓这两个引脚,能快速排除 PLL 配置错误。
def spi_read_reg(sdi, sck, cs, addr, readback_miso=None): # 三线模式:发完地址后切换 SDIO 方向为输入 frame = (1 << 25) | (0 << 23) | ((addr & 0x7FFF) << 8) # R/W = 1 cs.off() for i in range(25, -1, -1): sdi.val = (frame >> i) & 1 sck.on(); sck.off() # 数据阶段:读取 8 bit data = 0 for i in range(7, -1, -1): data |= (sdi.val << i) if readback_miso is None else (readback_miso.val << i) sck.on(); sck.off() cs.on() return data # 回读地址 0x140,应返回之前写入的 0x80 val = spi_read_reg(sdi_pin, sck_pin, cs_pin, 0x140) print(f"回读结果: 0x{val:02X}")4.3 锁定期间在线改写要谨慎
数据手册在 SPI 时序章节里有一句让很多人忽略的警告:如果在 VCO 锁定期间切换 SCK 或 SDIO 线路,相位噪声性能可能会劣化。这是因为这些引脚可能与板上其他器件共享总线,翻转时的边沿能量耦合到 PLL2 的敏感节点。如果系统必须在工作中动态调整输出频率,尽量用 SYNC 之外的专用方式去做,或者接受相噪短暂恶化、下一次锁定恢复的结果。我遇到过一版板卡把 LMK0482x 的 SPI 和一片小逻辑器件共用总线,逻辑器件周期性写状态寄存器,结果时钟输出的相噪曲线在 100 kHz 到 1 MHz 区间出现周期性凸起,后来把两片器件的片选彻底分开才解决。
5. 电源、引脚和时序的避坑清单:五个高频翻车点
5.1 LDO 旁路电容接错位置
现象:PLL2 锁定正常,但测出来的 RMS 抖动比手册值高一倍以上,且电源引脚的纹波明显偏大。
原因:LDObyp1 和 LDObyp2 两个引脚分别要求不同容值的旁路电容,LDObyp1 旁需要 10 μF,LDObyp2 旁需要 0.1 μF。很多硬件工程师习惯把所有电容都用 0.1 μF,或者把两个电容位置对调甚至放远,导致内部 LDO 环路不稳定,电源纹波直接调制到 VCO 相位上。
解决:按手册要求把 10 μF 电容放在 LDObyp1 附近、0.1 μF 放在 LDObyp2 附近,且尽量靠近引脚放置,回流路径直接到 DAP 地。至少留出这两个电容的专属位置,不要为了布线方便把它们挪到板边。
5.2 未使用的输出缓冲器没断电
现象:多路输出同时工作时,本来没用的某路输出的时钟谐波出现在在用输出的频谱里,频率关系跟该路输出频率一致。
原因:输出格式缓冲器仍处于上电状态,即使外部没有负载,输出级电路也会翻转,能量通过共用电源和衬底耦合到其他输出通道。
解决:寄存器配置时把所有不用的输出通道的格式缓冲器都设成掉电状态,引脚保持浮空,不要接任何外部电阻或电容。这个操作要在输出频率配置完成前就做好,否则芯片上电默认状态可能已经让部分输出使能了。
5.3 同一时钟组内频率关系没规划好
现象:组内两路输出频率差值和某个工作频率重合,导致后级 ADC 采到固定的杂散分量。
原因:同一时钟组的输出共享同一条 VCO 分频链,不同分频比之间如果不存在整数倍关系,会在输出频谱上产生混频分量。手册明确建议同一组内的输出保持相同频率或无杂散干扰的频率。
解决:频率规划阶段就把需要同频工作的输出放在一组,或者在同一组内使用整数倍分频。如果一组内必须输出两个不相关的频率,优先把其中一路改到另一个时钟组。这是设计阶段最省事的规避方式,比事后加滤波有效得多。
5.4 SPI 共享总线在锁定期间被反复访问
现象:板子正常工作一段时间后,偶尔出现输出频率跳变或失锁,但重新上电后一切又恢复正常。
原因:SPI 的 SCK 或 SDIO 与板上其他器件共享总线,其他器件周期性读写时产生边沿干扰,正好落进 PLL 的数字电路敏感区间。手册里已经写明锁定期间切换这些线路会导致相位噪声性能降低,实际表现可能不只是相噪变差,严重时直接干扰控制字。
解决:最稳妥的做法是给 LMK0482x 单独分配片选,总线不要和其他芯片共享。如果必须共享,至少在软件上保证其他器件不在这段时间操作,或者通过硬件开关隔离。从那以后我每块板子的 SPI 总线分配都会先检查是否和其他需要频繁刷写的器件共用。
5.5 CLKin 和 OSCin 未使用引脚处理不当
现象:单端参考输入时测到的抖动比差分输入时大,或者更换参考源时偶尔失锁。
原因:引脚表中明确写了单端配置下未使用的引脚要用 0.1 μF 电容接到 GND,两个引脚都未使用时保持浮空。很多人把未使用的负端直接悬空或者接地,破坏了输入端的直流工作点,导致输入摆幅不对称,PLL1 的 LOS 检测误判。
解决:按引脚表分类处理:单端输入时未用反向端接 0.1 μF 到 GND;差分都没用时保持浮空;作为 CLKin2 使用前必须先把寄存器设置为输入模式。OSCin 端口建议交流耦合输入,因为它的内部电路以 PLL1 反馈和 PLL2 参考两种角色工作。
6. 上板验证顺序:从锁定状态到 SYSREF 对齐
拿到样片或者新板卡,我一般按四个步骤验证,顺序不要乱。第一步先静态检查电源和 LDO:3.3 V 供电是否在手册要求范围内,DAP 焊盘是否可靠接地,LDObyp1 和 LDObyp2 的电压是否正常。芯片底部的大焊盘是散热和接地的公共路径,焊接不良会导致供电回路电阻增大,现象就是抖动变大且温漂明显。第二步做 SPI 回读测试,写完再读,确认通信链路可靠,同时手动拉高 CS 检查是否产生误写入。然后看 Status_LD1 和 Status_LD2 两个引脚的电平状态,正常情况下配置完成后两个都应该拉高。若 PLL1 锁定但 PLL2 不锁定,优先查 VCO 选择、环路滤波器参数和 OSCin 输入幅度是否达标。
第三步用示波器验证输出波形。此时至少要用 500 MHz 以上带宽的示波器探头测 DCLK 输出,检查频率是否准确、占空比是否接近 50%、边沿是否干净。如果示波器有抖动分析功能,可以顺手测一下相邻周期的抖动,但没有频谱仪时这个值参考意义有限。第四步是 SYSREF 对齐验证:把示波器两个通道分别接到设备钟和 SYSREF,触发 SYNC 引脚后观察两者的相位关系是否一致、设备钟上升沿是否落在 SYSREF 的有效窗口中部。这个测试要在不同的设备钟频率下各做一次,确保 SYSREF 分频器设置没有遗漏。
最后有条件的话用频谱仪直接测输出端的相位噪声。看两个指标:远端本底是否接近 -162.5 dBc/Hz 这个量级,近端 1 kHz 到 100 kHz 是否有异常的凸起。如果本底高出手册值不少,检查 LDO 电容、输出组电源去耦和 SPI 总线干扰;如果曲线有周期性凸起且频率间隔对应某个板上时钟,逐个断开可疑时钟源排查。每次改完寄存器配置,我都会重新走一遍回读、锁检测、波形、对齐这四步。这套流程虽然多花几分钟,但能在一开始就定位问题,而不是等到整机联调时面对一片翻车现场无从下手。希望帮到你。
本文还有配套的精品资源,点击获取