当前位置: 首页 > news >正文

I.MX6UL:主频和时钟配置实验

        默认配置下 I.MX6U 工作频率为 396MHz。但是 I.MX6U 系列标准的工作频率为 528MHz,有些型号甚至可以工作到 696MHz。本章我们就学习 I.MX6U 的时钟系统,学习如何配置 I.MX6U 的
系统时钟和其他的外设时钟,使其工作频率为 528MHz,其他的外设时钟源都工作在 NXP 推荐的频率。

一、I.MX6UL时钟系统分析

        很多外设器件,每个器件的时钟信号不一样,所以要将一个固定的信号频率进行倍频/分频处理,达到每个外设需要的频率。时钟信号的分频就像树的分支一样,这就是时钟树。

        时钟树,可以理解为🌳的主干为24Mhz晶振,24M晶振驱动所有外设是无法满足的,所有树木的主干延伸出了一些枝干,这些枝干为PLL1、PLL2....PLL3,PLL又延伸出了PFD,分支的枝干结出的小果实对应外设,这些小果实需要养分(时钟)。

1.1 系统时钟来源

        下图为I.MX6U-ALPHA 开发板原理图,开发板时钟原理图。从图可以看出 I.MX6U-ALPHA 开发板的系统时钟来源于两部分:32.768KHz 和24MHz 的晶振,其中 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源,24MHz 晶振是 I.MX6U 内核和其它外设的时钟源。

        32.768KHz晶振是外部低速晶振,这个晶振的主要作用于实时时钟功能(real-time-clock)。RTC需要一个稳定的,低功耗的时钟源来持续跟踪时间,即使在系统电源关闭的或低功耗模式下也能保证时间准确。
24MHz 的晶振是外部高速时钟,对于开发板来说,这个晶振是IMX6U内核和其他外设的的主要时钟源。

1.2  7 路PLL时钟源

        I.MX6U 的外设有很多,不同的外设时钟源不同,NXP 将这些外设的时钟源进行了分组,一共有 7 组,这 7 组时钟源都是从 24MHz 晶振 PLL 而来的,因此也叫做 7 组 PLL,这 7 组 PLL结构如图所示。

        

        (1)ARM_PLL(PLL1),此路 PLL 是供 ARM 内核使用的,ARM 内核时钟就是由此 PLL
生成的,此 PLL 通过编程的方式最高可倍频到 1.3GHz。

        (2)528_PLL(PLL2),此路 PLL 也叫做 System_PLL,此路 PLL 是固定的 22 倍频,不可编
程修改。因此,此路 PLL 时钟=24MHz * 22 = 528MHz,这也是为什么此 PLL 叫做 528_PLL 的原因。此 PLL 分出了 4 路 PFD,分别为:PLL2_PFD0~PLL2_PFD3,这 4 路 PFD 和 528_PLL共同作为其它很多外设的根时钟源。通常 528_PLL 和这 4 路 PFD 是 I.MX6U 内部系统总线的时钟源,比如内处理逻辑单元、DDR 接口、NAND/NOR 接口等等。

        (3)USB1_PLL(PLL3),此路 PLL 主要用于 USBPHY,此 PLL 也有四路 PFD,为:
PLL3_PFD0~PLL3_PFD3,USB1_PLL 是固定的 20 倍频,因此 USB1_PLL=24MHz *20=480MHz。
USB1_PLL 虽然主要用于 USB1PHY,但是其和四路 PFD 同样也可以作为其他外设的根时钟源。
(4)USB2_PLL(PLL7),看名字就知道此路 PLL 是给 USB2PHY 使用的。同样的,此路 PLL 固定为 20 倍频,因此也是 480MHz。
(5)ENET_PLL(PLL6),此路 PLL 固定为 20+5/6 倍频,因此 ENET_PLL=24MHz * (20+5/6)
= 500MHz。此路 PLL 用于生成网络所需的时钟,可以在此 PLL 的基础上生成 25/50/100/125MHz
的网络时钟。
(6)VIDEO_PLL(PLL5),此路 PLL 用于显示相关的外设,比如 LCD,此路 PLL 的倍频可以调整,PLL 的输出范围在 650MHz--1300MHz。此路 PLL 在最终输出的时候还可以进行分频,可选 1/2/4/8/16 分频。
(7)AUDIO_PLL(PLL4),此路 PLL 用于音频相关的外设,此路 PLL 的倍频可以调整,PLL的输出范围同样也是 650MHz--1300MHz,此路 PLL 在最终输出的时候也可以进行分频,可选1/2/4 分频。

1.3  时钟树

        在图主要为三部分:CLOCK_SWITCHER、CLOCK ROOT GENERATOR 和SYSTEM CLOCKS。其中左边的 CLOCK_SWITCHER 就是我们上一小节讲解的那 7 路 PLL 和8 路 PFD,右边的 SYSTEM CLOCKS 就是芯片外设,中间的 CLOCK ROOT GENERATOR 是最复杂的!这一部分就像“月老”一样,给左边的 CLOCK_SWITCHER 和右边的 SYSTEM CLOCKS进行牵线搭桥。外设时钟源是有多路可以选择的,CLOCK ROOT GENERATOR 就负责从 7 路 PLL 和 8 路 PFD 中选择合适的时钟源给外设使用。

        图中长得像梯形的是数据选择器,数据选择器标黑点的一路表示要在黄色标识的寄存器的位写入1,表示选择黑点的路。

、I.MX6UL时钟系统配置

2.1 内核时钟配置

        我们将 I.MX6U 的主频设置为 528MHz,根据时钟树可以看到ARM 内核时钟如图所示。

①、内核时钟源来自于 PLL1,假如此时 PLL1 为 996MHz。
②、通过寄存器 CCM_CACRR 的 ARM_PODF 位对 PLL1 进行分频,可选择 1/2/4/8 分频,假如我们选择 2 分频,那么经过分频以后的时钟频率是 996/2=498MHz。
③、灰色方块处没有进行 2 分频!!!
④、经过第②步 2 分频以后的 498MHz 就是 ARM 的内核时钟,也就是 I.MX6U 的主频。

        在修改 PLL1 时钟频率的时候我们需要先将内核时钟源改为其他的时钟源,改变时钟需要提供一个备用时钟,时钟相当于心跳。

①、pll1_sw_clk 也就是 PLL1 的最终输出频率。
②、 此 处 是 一 个 选 择 器 , 选 择 pll1_sw_clk 的时 钟 源 , 由 寄 存 器 CCM_CCSR 的
PLL1_SW_CLK_SEL 位决定 pll1_sw_clk 是选择 pll1_main_clk 还是 step_clk。正常情况下应该选择 pll1_main_clk,但是如果要对 pll1_main_clk(PLL1)的频率进行调整的话,比如我们要设置PLL1=1056MHz,此时就要先将 pll1_sw_clk 切换到 step_clk 上。等 pll1_main_clk 调整完成以后再切换回来。
③、此处也是一个选择器,选择 step_clk 的时钟源,由寄存器 CCM_CCSR 的 STEP_SEL 位来决定 step_clk 是选择 osc_clk 还是 secondary_clk。一般选择 osc_clk,也就是 24MHz 的晶振。

2.2 PFD时钟的配置

        设置好主频以后我们还需要设置好其他的 PLL 和 PFD 时钟,PLL1 上一小节已经设置,PLL2、PLL3 和 PLL7 固定为528MHz、480MHz 和 480MHz,PLL4~PLL6 都是针对特殊外设的,用到的时候再设置。因此,接下来重点就是设置 PLL2 和 PLL3 的各自 4 路 PFD,NXP 推荐的这 8 路 PFD 频率如图所示。

2.3 AHB、IPG和PERCLK 根时钟设置

        7 路 PLL 和 8 路 PFD 设置完成以后最后还需要设置 AHB_CLK_ROOT 和 IPG_CLK_ROOT
的时钟,I.MX6U 外设根时钟可设置范围如图。

更新中.....


文章转载自:

http://cJCB1V3D.sqfnx.cn
http://uhEWPin7.sqfnx.cn
http://QY0lE92z.sqfnx.cn
http://jdSgG8i3.sqfnx.cn
http://Hp6IQl7u.sqfnx.cn
http://gDUCAFPS.sqfnx.cn
http://2ik87La7.sqfnx.cn
http://wrehoemB.sqfnx.cn
http://AH7zUTuU.sqfnx.cn
http://beN3Wq8X.sqfnx.cn
http://YD0HvqRc.sqfnx.cn
http://kN1CuPbU.sqfnx.cn
http://68CLh6Uu.sqfnx.cn
http://wgsoPYyI.sqfnx.cn
http://qZV9Hleo.sqfnx.cn
http://JI8NtyQh.sqfnx.cn
http://CbgVUanK.sqfnx.cn
http://8fCphew1.sqfnx.cn
http://JI61rMIs.sqfnx.cn
http://ELCdFSJi.sqfnx.cn
http://XB9b28pv.sqfnx.cn
http://0eJ0bMo0.sqfnx.cn
http://qmSBIgcF.sqfnx.cn
http://0KpGPRHK.sqfnx.cn
http://NECryw4U.sqfnx.cn
http://JmL06A0Z.sqfnx.cn
http://fVhEYhuE.sqfnx.cn
http://a4TKa4yM.sqfnx.cn
http://wbpuVoKl.sqfnx.cn
http://DKjJoHck.sqfnx.cn
http://www.dtcms.com/a/384006.html

相关文章:

  • 【前端知识】package-lock.json 全面解析:作用、原理与最佳实践
  • 计算机视觉(opencv)实战二十——SIFT提取图像特征
  • Android开发-SharedPreferences
  • SpringBoot的自动配置原理及常见注解
  • Java内部类内存泄漏解析:`this$0`引用的隐秘风险
  • 快速掌握Dify+Chrome MCP:打造网页操控AI助手
  • 【cpp Trip第1栈】vector
  • 详解 new 和 delete
  • 基于PassGAN的密码训练系统设计与实现
  • 避开Java日期格式化陷阱:`yyyy`与`YYYY`的正确使用
  • SpringCloud与Dubbo实战对决:从协议到治理的全维度选型指南(一)
  • SAP HANA Scale-out 04:CalculationView优化
  • 删除文件夹里的网盘图标
  • MPC模型预测控制:一种先进的控制策略
  • 【数据集】基于观测的全球月度网格化海表pCO₂与海气CO₂通量产品及其月气候平均值
  • RS485简介
  • Claude Code vs Codex
  • 多语言编码Agent解决方案(5)-IntelliJ插件实现
  • 光纤入户技术:原理、策略与市场博弈
  • DeerFlow实践: 日程管理智能体应用框架设计
  • spring、springboot、springCloud
  • Thymeleaf
  • 美团首款AI Agent产品“小美”公测,AI会带来什么?
  • 在 UE5 中配置 SVN 版本工具
  • Qwen3 模型结构解析
  • class_8:java继承
  • Django模型与数据库表映射的两种方式
  • 国产化监控方案:金仓数据库 + Nagios 从零搭建指南,核心指标实时掌握
  • 【Linux探索学习】第一篇Linux的基本指令(1)——开启Linux学习第一篇
  • 关于android.permission.CAPTURE_AUDIO_OUTPUT