第四章 时钟系统原理图分析:主时钟晶振电路、PLL时钟分配、RTC时钟电路

时钟系统,说白了就是开发板的「心跳」。没有它,整个系统就是一具空壳。我做了这么多年硬件,见过太多因为时钟设计翻车的案例——有的板子跑不起来,有的跑起来但噪声大得吓人,还有的RTC时间越走越偏。嗯,今天咱们就把联发科开发板的时钟系统掰开揉碎了讲清楚。

4.1 主时钟晶振电路

主时钟晶振,通常是一个26MHz的晶体振荡器。为什么是26MHz?因为联发科的基带和射频部分需要这个频率来做频率合成。我个人习惯,拿到原理图第一件事就是看晶振的负载电容选对了没有。

关键点:晶振电路的核心是晶体 + 两个负载电容 + 一个反馈电阻。联发科平台通常要求负载电容在8pF到12pF之间,具体看芯片手册。

来看一个典型的电路结构:

// 主时钟晶振电路示意(26MHz)
// XTAL_IN 和 XTAL_OUT 连接到 SoC

        +----[C1]----GND
        |
XTAL_IN--+----[26MHz]----+--XTAL_OUT
        |    Crystal      |
        +----[C2]----GND

// 反馈电阻 Rf 通常为 1MΩ,并联在晶体两端
// C1 = C2 = 10pF(典型值,需根据PCB寄生电容调整)

这里有个坑,我踩过。有一次项目赶进度,我直接抄了参考设计的电容值,结果板子回来发现频率偏了200ppm。后来查了半天,发现是PCB走线的寄生电容没算进去。你想想看,本来设计10pF,结果走线自己就带了2pF,实际等效电容变成了12pF,频率当然会偏。

我的经验:计算负载电容时,一定要把PCB走线电容算进去。一般微带线每厘米约1pF,过孔约0.5pF。公式很简单:C_load = (C1*C2)/(C1+C2) + C_stray。如果C1=C2=10pF,C_stray=2pF,那实际负载电容就是7pF,而不是10pF。

4.2 PLL时钟分配

主时钟进来之后,会送到SoC内部的PLL(锁相环)模块。联发科的PLL架构很有意思,它通常包含多个PLL,分别给CPU、GPU、DDR、总线等不同模块提供时钟。

我一般把PLL时钟分配分成三层来看:

  • 第一层:源时钟——就是那个26MHz晶振,所有PLL的参考源
  • 第二层:PLL输出——每个PLL产生一个高频时钟,比如CPU PLL输出2.0GHz
  • 第三层:分频器——每个模块内部还有分频器,把PLL输出降到实际需要的频率

举个例子,联发科MTK6765平台的时钟分配表大致如下:

时钟域 源PLL 典型频率 用途
ARMCPU PLL1 2.0GHz Cortex-A53 核心
GPU PLL2 650MHz Mali-G52
DDR PLL3 1600MHz LPDDR4
总线 PLL4 400MHz AXI/AHB 总线
外设 PLL5 48MHz USB、SDIO

为什么要分这么多PLL?说白了,不同模块对时钟的要求不一样。CPU需要高频低抖动,DDR需要精确的频率匹配,外设则更关注功耗。如果所有模块共用一个PLL,那设计就太僵化了。

注意:PLL的供电必须干净!我见过有人把PLL的AVDD和数字VDD混在一起,结果时钟抖动大得离谱,DDR跑不到标称频率。建议PLL供电单独走一个LDO,或者至少加一个π型滤波器。

4.3 RTC时钟电路

RTC时钟,也就是实时时钟。它负责在系统休眠或断电时保持时间。联发科平台通常使用32.768kHz的晶振,为什么是这个频率?因为2^15 = 32768,用15位计数器就能精确产生1秒的脉冲。

RTC电路看起来简单,其实最容易出问题。我曾经在一个项目中,RTC时间每天慢5分钟。查到最后,发现是晶振的负载电容选错了,导致频率偏差太大。

// RTC晶振电路示意(32.768kHz)
// RTC_XI 和 RTC_XO 连接到 SoC 的 RTC 模块

        +----[C1]----GND
        |
RTC_XI--+----[32.768kHz]----+--RTC_XO
        |     Crystal        |
        +----[C2]----GND

// C1 = C2 = 12.5pF(典型值)
// 注意:RTC晶振对电容非常敏感,偏差1pF可能就导致每天几秒的误差

RTC电路有几个设计要点,我总结一下:

  • 晶振选型:一定要选32.768kHz的贴片晶振,精度至少±20ppm。我建议用±10ppm的,贵不了几毛钱,但可靠性好很多。
  • 负载电容:这个最容易被忽略。晶振的规格书会给出推荐负载电容,比如12.5pF。但PCB走线、芯片引脚都会贡献电容,所以实际焊接的电容值要适当减小。
  • 走线隔离:RTC走线要远离高频信号,尤其是DDR和射频部分。我见过有人把RTC走线贴着DDR走,结果时钟被干扰得乱七八糟。
  • 备用电池:联发科平台通常支持RTC备用电池,一般是纽扣电池CR2032。注意电池的放电电流,RTC模块在休眠时电流只有几微安,一颗电池能用好几年。

避坑指南:我曾经遇到一个案例,RTC在低温下(-20°C)完全失效。后来发现是晶振的温漂太大,低温下频率偏移超过了RTC模块的容忍范围。解决方案很简单——换用温补晶振(TCXO),虽然贵一点,但全温范围内精度能保持在±5ppm以内。

4.4 时钟系统的整体验证思路

拿到原理图后,我一般按这个顺序检查时钟系统:

  1. 看晶振电路:检查负载电容值、反馈电阻、晶振型号是否与芯片手册一致
  2. 看PLL供电:确认每个PLL的AVDD都有独立的滤波电容,通常是一个10uF+0.1uF的组合
  3. 看时钟输出:联发科SoC通常会有CLK_OUT测试点,方便用示波器测量实际频率
  4. 看RTC电路:检查备用电池的充电电路、防倒灌二极管、负载电容
  5. 看时钟树:确认每个模块的时钟源选择是否正确,有没有时钟门控

嗯,时钟系统就讲到这里。说白了,时钟设计就是「源头要稳、分配要清、供电要净」。你只要记住这三点,大部分时钟问题都能提前规避。下一章咱们开始分析电源系统,那可是另一个容易翻车的地方。