【嵌入式Linux】i.MX6ULL 时钟树——理论分析

文章目录

  • 0. 时钟树结构
    • 0.1 参考手册 Chapter 18​: Clock Controller Module (CCM)
    • 0.2 时钟信号路径
  • 1. 时钟源——晶振
    • 1.1 外部低频时钟 - CKIL
      • 1.1.1 CKIL 同步到 IPG_CLK 解释
    • 1.2 外部高频时钟 - CKIH 和 内部振荡器
    • 1.3 总结
    • 1.4 缩写补充
  • 2. PLL时钟
    • 2.1 i.MX6U 芯片 PLL 时钟表格
    • 2.2 i.MX6U 芯片 PLL 时钟详解
  • 3. PFD是什么
    • 3.1 PFD概述
    • 3.2 PFD寄存器配置
  • 4. AHB是什么
  • 5. IPG是什么

本文章结合了正点原子的 i.mx6u嵌入式Linux开发指南和笔者的理解。
本文章应配合《 【嵌入式Linux】i.MX6ULL 时钟树——代码梳理(基础时钟初始化)》使用。

0. 时钟树结构

0.1 参考手册 Chapter 18​: Clock Controller Module (CCM)

CCM(Clock Controller Module),意为时钟控制器模块。

0.2 时钟信号路径

手册中的CMM框图:
在这里插入图片描述

  1. 晶振:32.768KHz外部的低速晶振、24MHz的外部高速晶振
  2. CCM_ANALOG:晶振信号为 analog(模拟) 信号,输入到芯片内部的 PLL(锁相环) 进行倍频,i.MX6ULL 内部有 7 个 PLL,在手册的 CCM_ANALOG 说明了配置方式和寄存器
  3. CCM_CLK_SWITCHER:接受 PLL 输出的时钟输出,以及PLLs的旁路时钟,并为CCM_CLK_ROOT_GEN子模块生成交换器时钟输出(pll1_sw_clk, pll3_sw_clk)
  4. CCM_CLK_ROOT_GEN:接收主时钟(PLLs / PFDs)并生成输出根时钟
    在这里插入图片描述



______下面开始对各个部分进行详细的解释______

1. 时钟源——晶振

1.1 外部低频时钟 - CKIL

  • 芯片可以使用 32kHz 或 32.768kHz 晶振作为外部低频源 (XTALOSC)。
  • 本章将低频晶振统一称为 32kHz 晶振。
  • 该时钟源在芯片上电后应始终处于活动状态。
  • 进入 CCM 的 32kHz 信号被称为 CKIL。
  • CKIL 同步到 IPG_CLK,并提供给需要它的模块。

1.1.1 CKIL 同步到 IPG_CLK 解释

  • 当系统处于功能模式时,CKIL 同步到 IPG_CLK。
  • 当系统处于停止模式(没有 IPG_CLK)时,CKIL 同步器被绕过,原始的 CKIL 被提供给系统。
  • 也就是说系统正常工作,没有进入停止模式的时候,外部低频时钟 CKIL 会同步到 IPG_CLK;但是当进入停止模式的时候,同步器就不会生效,系统将外部低频晶振的信号。

1.2 外部高频时钟 - CKIH 和 内部振荡器

  • 芯片使用内部振荡器产生参考时钟 (OSC)。
  • 内部振荡器连接到外部晶体 (XTALOSC),产生 24MHz 参考时钟。

1.3 总结

  • i.MX6ULL 芯片使用外部低频晶体 (32kHz) 作为 CKIL,并同步到 IPG_CLK。
  • 芯片使用内部振荡器连接到外部高频晶体 (24MHz) 产生参考时钟。

1.4 缩写补充

  • CCM 是 Clock Control Module (时钟控制模块),负责管理芯片内部的时钟信号。
  • CKIL 代表 Clock Input Low,即低频时钟输入。
  • IPG_CLK 是 Integrated Peripheral Clock (集成外设时钟),是芯片内部外设使用的时钟信号。

2. PLL时钟

P644

2.1 i.MX6U 芯片 PLL 时钟表格

PLL 名称序号倍频输出频率用途特点
ARM_PLLPLL1可编程 (最高 1.3GHz)可编程ARM 内核ARM 内核运行速度取决于此 PLL 输出频率
528_PLLPLL2固定 22 倍频528MHz系统总线、内部逻辑单元、DDR 接口、NAND/NOR 接口核心时钟源
USB1_PLLPLL3固定 20 倍频480MHzUSB1PHY可用于多种外设
USB2_PLLPLL7固定 20 倍频480MHzUSB2PHY序号标为 4,实际是 PLL7
ENET_PLLPLL6固定 20+5/6 倍频500MHz网络可生成 25/50/100/125MHz 网络时钟
VIDEO_PLLPLL5可调整 (650MHz~1300MHz)可调整显示相关外设 (LCD)可调整输出频率和分频比
AUDIO_PLLPLL4可调整 (650MHz~1300MHz)可调整音频相关外设可调整输出频率和分频比

2.2 i.MX6U 芯片 PLL 时钟详解

i.MX6U 芯片拥有多个 PLL(Phase-Locked Loop,锁相环)模块,用于生成各种频率的时钟信号,为芯片内部的不同模块和外设提供时钟源。下面整理了 i.MX6U 芯片的 7 个主要 PLL:

1. ARM_PLL (PLL1)

  • 用途: 为 ARM 内核提供时钟信号。
  • 倍频: 可编程,最高可倍频至 1.3GHz。
  • 特点: ARM 内核的运行速度直接取决于此 PLL 的输出频率。

2. 528_PLL (PLL2)

  • 用途: 为系统总线、内部逻辑单元、DDR 接口、NAND/NOR 接口等提供时钟源。
  • 倍频: 固定 22 倍频,不可编程。
  • 输出频率: 24MHz * 22 = 528MHz。
  • 特点: 该 PLL 以及其生成的 4 路 PFD (PLL2_PFD0~PLL2_PFD3) 是 i.MX6U 内部系统总线的核心时钟源。

3. USB1_PLL (PLL3)

  • 用途: 主要用于 USB1PHY,但也可作为其他外设的时钟源。
  • 倍频: 固定 20 倍频。
  • 输出频率: 24MHz * 20 = 480MHz。
  • 特点: 该 PLL 以及其生成的 4 路 PFD (PLL3_PFD0~PLL3_PFD3) 可用于多种外设。

4. USB2_PLL (PLL7)

  • 用途: 为 USB2PHY 提供时钟信号。
  • 倍频: 固定 20 倍频。
  • 输出频率: 24MHz * 20 = 480MHz。
  • 特点: 虽然序号标为 4,但实际是 PLL7。

5. ENET_PLL (PLL6)

  • 用途: 用于生成网络所需的时钟信号。
  • 倍频: 固定 20+5/6 倍频。
  • 输出频率: 24MHz * (20+5/6) = 500MHz。
  • 特点: 可在此 PLL 的基础上生成 25/50/100/125MHz 的网络时钟。

6. VIDEO_PLL (PLL5)

  • 用途: 用于显示相关外设,例如 LCD。
  • 倍频: 可调整,输出范围在 650MHz~1300MHz。
  • 分频: 可选 1/2/4/8/16 分频。
  • 特点: 可根据显示设备的需求调整输出频率和分频比。

7. AUDIO_PLL (PLL4)

  • 用途: 用于音频相关外设。
  • 倍频: 可调整,输出范围在 650MHz~1300MHz。
  • 分频: 可选 1/2/4 分频。
  • 特点: 可根据音频设备的需求调整输出频率和分频比。

总结:

i.MX6U 芯片通过多个 PLL 模块,生成各种频率的时钟信号,为芯片内部的不同模块和外设提供时钟源。每个 PLL 的倍频和分频都可以根据需要进行配置,以满足不同外设的需求。

3. PFD是什么

3.1 PFD概述

P646
在这里插入图片描述

相位分数分频器 (Phase Fractional Divider, PFD) 在 NXP 处理器中的应用,与 锁相环 (PLL) 的关系:

PFD 是 PLL 中的一个重要组成部分,它可以将 PLL 的输出频率进行分数分频,从而产生更精确的时钟频率。

  1. PFD 的输出频率: PFD 的输出频率是 PLL 的 VCO 频率的倍数,但可以是分数倍数。例如,输出频率可以是 Fvco * 18/N,其中 N 的取值范围为 12-35。
  2. PFD 的作用: PFD 可以动态调整时钟频率,而无需重新锁定 PLL。这对于支持动态电压和频率缩放 (DVFS) 非常有用,因为 DVFS 可以根据负载情况动态调整 CPU 的频率和电压,从而降低功耗。
  3. PFD 的控制: PFD 的时钟门控可以通过 CCM_ANALOG_PFD_480n 或 CCM_ANALOG_PFD_528n 寄存器中的 PFDx_CLKGATE 位进行控制。在 PLL 上电或重新锁定后,需要将 PFDx_CLKGATE 位循环开、关 (1 到 0) 以确保 PFD 正确工作。
  4. PFD 的配置: 更多关于 PFD 配置的细节可以在 NXP 网站的工程公告 EB790 中找到。

总之,PFD 是 PLL 中的重要组成部分,它可以实现分数分频,从而产生更精确的时钟频率,并支持 DVFS 功能。PFD 的控制和配置需要按照 NXP 的规范进行操作。

3.2 PFD寄存器配置

P738

  • 以PLL2(systemPLL)的4个PFD为例
  • 4个PFD由一个32位寄存器配置:528MHz Clock (PLL2) Phase Fractional Divider Control Register (CCM_ANALOG_PFD_528n)
    在这里插入图片描述

寄存器结构:

  • 每个字段对应寄存器中的特定位。
  • 字段名称以 PFD 开头,代表 Phase Frequency Divider,即 相位频率分频器
  • 数字 03 代表不同的分频器。
  • 后缀 _FRAC 代表 Fractional Divide Value,即 分数分频值
  • 后缀 _CLKGATE 代表 Clock Gate,即 时钟门控
  • 后缀 _STABLE 代表 Stable,即 稳定

字段描述:

字段描述备注
PFD3_CLKGATE31IO 时钟门控。如果设置为 1,则第三个分数分频器时钟 (参考 ref_pfd3) 关闭 (省电)。0: ref_pfd3 分数分频器时钟开启。需要在 PLL 关闭之前断言此位。
PFD3_STABLE30只读位,用于诊断目的。分数分频器应该足够快地稳定,因此此字段永远不需要由设备驱动程序或应用程序代码使用。当新的分数分频值生效时,该值会反转。读取此位,编程新值,当此位反转时,相位分频器时钟输出稳定。注意,当分数分频器处于或进入时钟门控状态时,该值不会反转。
PFD3_FRAC29-24控制分数分频值。结果频率应为 528*18/PFD3_FRAC,其中 PFD3_FRAC 的范围为 12-35。
PFD2_CLKGATE23IO 时钟门控。如果设置为 1,则 IO 分数分频器时钟 (参考 ref_pfd2) 关闭 (省电)。0: ref_pfd2 分数分频器时钟开启。需要在 PLL 关闭之前断言此位。
PFD2_STABLE22只读位,用于诊断目的。分数分频器应该足够快地稳定,因此此字段永远不需要由设备驱动程序或应用程序代码使用。当新的分数分频值生效时,该值会反转。读取此位,编程新值,当此位反转时,相位分频器时钟输出稳定。注意,当分数分频器处于或进入时钟门控状态时,该值不会反转。
PFD2_FRAC21-16控制分数分频值。结果频率应为 528*18/PFD2_FRAC,其中 PFD2_FRAC 的范围为 12-35。最大允许频率为 400MHz。
PFD1_CLKGATE15IO 时钟门控。如果设置为 1,则 IO 分数分频器时钟 (参考 ref_pfd1) 关闭 (省电)。0: ref_pfd1 分数分频器时钟开启。需要在 PLL 关闭之前断言此位。
PFD1_STABLE14只读位,用于诊断目的。分数分频器应该足够快地稳定,因此此字段永远不需要由设备驱动程序或应用程序代码使用。当新的分数分频值生效时,该值会反转。读取此位,编程新值,当此位反转时,相位分频器时钟输出稳定。注意,当分数分频器处于或进入时钟门控状态时,该值不会反转。
PFD1_FRAC13-8控制分数分频值。结果频率应为 528*18/PFD1_FRAC,其中 PFD1_FRAC 的范围为 12-35。
PFD0_CLKGATE7如果设置为 1,则 IO 分数分频器时钟 (参考 ref_pfd0) 关闭 (省电)。0: ref_pfd0 分数分频器时钟开启。需要在 PLL 关闭之前断言此位。
PFD0_STABLE6只读位,用于诊断目的。分数分频器应该足够快地稳定,因此此字段永远不需要由设备驱动程序或应用程序代码使用。当新的分数分频值生效时,该值会反转。读取此位,编程新值,当此位反转时,相位分频器时钟输出稳定。注意,当分数分频器处于或进入时钟门控状态时,该值不会反转。
PFD0_FRAC5-0控制分数分频值。结果频率应为 528*18/PFD0_FRAC,其中 PFD0_FRAC 的范围为 12-35。对于 76 MHz 的 QSPI 引导,此 PFD 会重新锁定到 307 MHz,因此此字段的默认值 (由 ROM 修改) 将为 0x1f。同样,对于低频引导,ROM 会将此 PFD 重新锁定到 307 MHz,因此默认值为 0x1f。

总结:

CCM_ANALOG_PFD_528n 寄存器控制着 i.MX 6ULL 处理器中四个分数分频器的配置,包括时钟门控、稳定性状态和分数分频值。这些分频器用于生成不同频率的时钟信号,以满足各种外设的需求。

1. CLKGATE 位 (Clock Gate): 时钟门控

  • 作用: CLKGATE 位控制着对应 PFD 的时钟信号是否被开启或关闭。
  • 值:
    • 0: 时钟信号开启,PFD 正常工作,可以输出分频后的时钟信号。
    • 1: 时钟信号关闭,PFD 处于关闭状态,不输出时钟信号。
  • 目的:
    • 省电: 当某个外设不需要时钟信号时,可以通过设置 CLKGATE 位为 1 来关闭该 PFD 的时钟,从而减少功耗。
    • 控制时钟信号: 在某些情况下,可能需要动态地控制某个外设的时钟信号,例如在系统启动或进入低功耗模式时。

2. STABLE 位 (Stable): 稳定性状态

  • 作用: STABLE 位指示对应 PFD 的输出时钟信号是否已经稳定。
  • 值:
    当新的分数分频值生效时,位域的值会反转(从 0 变为 1 或从 1 变为 0)。这个反转就像一个信号,表明分频器已经完成调整。
  • 目的:
    • 诊断: STABLE 位是一个只读位,用于诊断 PFD 的稳定性。
    • 确保时钟信号质量: 在修改 PFD 的分数分频值后,需要等待 STABLE 位反转,才能确保输出的时钟信号稳定可靠。

4. AHB是什么

AHB 是 Advanced High-performance Bus 的缩写,中文意思是 高级高性能总线。它是一种同步总线协议,广泛应用于嵌入式系统和微处理器中,用于连接 CPU、内存控制器、外设等重要模块。

AHB 总线的主要特点:

  • 高性能: AHB 总线采用同步传输方式,并支持突发传输,可以实现高速的数据传输。
  • 灵活的地址空间: AHB 总线支持 32 位地址空间,可以连接大量的模块。
  • 多主控支持: AHB 总线可以支持多个主控设备,例如 CPU、DMA 控制器等。
  • 错误检测机制: AHB 总线包含错误检测机制,可以检测数据传输过程中的错误。
  • 支持多种传输模式: AHB 总线支持多种传输模式,例如单字节传输、字传输、突发传输等。
  • 支持多种数据宽度: AHB 总线支持 8 位、16 位、32 位等多种数据宽度。

AHB 总线的工作原理:

AHB 总线采用同步传输方式,即所有模块都使用同一个时钟信号。主控设备通过总线发送地址和控制信号,从设备根据地址和控制信号进行数据传输。

AHB 总线的应用:

AHB 总线广泛应用于各种嵌入式系统和微处理器中,例如:

  • ARM 处理器: ARM 处理器通常使用 AHB 总线连接 CPU、内存控制器、外设等模块。
  • FPGA: FPGA 中也经常使用 AHB 总线连接不同的模块。
  • SoC: SoC 中也经常使用 AHB 总线连接不同的模块。

5. IPG是什么

IPG是 Intergrated Peripheral Clock 的缩写。

IPG 是一个 集成外设时钟,它提供给 i.MX6ULL 芯片上的各种外设,例如:

  • UART
  • SPI
  • I2C
  • CAN
  • GPIO
  • ADC
  • DAC
  • 等等

G 在 IPG 中代表 Generator,即 时钟发生器。IPG 时钟发生器是一个独立的模块,它可以产生各种频率的时钟信号,以满足不同外设的需求。

Peripheral Clock 是指 外设时钟,它是由 IPG 时钟发生器产生的,并分配给特定外设使用的时钟信号。每个外设都有自己的时钟频率,可以通过配置 IPG 时钟发生器来设置。

总结:

  • IPG 是 Integrated Peripheral Clock 的缩写,代表集成外设时钟。
  • G 代表 Generator,即时钟发生器。
  • Peripheral Clock 是由 IPG 时钟发生器产生的,并分配给特定外设使用的时钟信号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八爪鱼现金流-025-工作的终极目标,不是为了成为更好的员工

工作的终极目标,不是为了成为更好的员工。 而是解放时间和收入自动化 打造自己的被动收入!!! 八爪鱼现金流 八爪鱼

Docker 如何支持 NVIDIA GPU

Docker 如何支持 GPU Docker 是一个强大的工具,可以帮助开发者构建、部署和运行应用程序。对于需要高性能计算的应用程序,例如机器学习、深度学习和科学计算,利用 GPU 可以大大提升计算效率。本文将详细介绍 Docker 如何支持 GPU 以及如何配…

CMMM Plus+ Calculus Update 超级游戏大作 游戏说明

资源链接 关卡编辑器 ◽️使用 WASD 移动视图。 ◽️LMB 放置单元格。 ◽️Space LMB 删除单元格。Ctrl Space LMB 删除所有相同类型的单元格。 ◽️Q / E 旋转单元格。 ◽️Z / X 在单元格类别之间切换。 ◽️键 1-9 快速选择单元格。 ◽️按 F 显示可拖动的图块。 ⌨️控…

微信小程序canvas2d频繁刷新图片时图片闪烁问题

问题:使用了拖动事件,需要频繁重绘canvas,导致图片闪烁。 原因:官方示例中,canvas2d需要手动加载图片,再在图片的onLoad函数绘制图片,延迟太高,导致刷新时图片闪烁。 解决&#xff1…

会声会影2024永久破解和谐版下载 包含激活码序列号

亲爱的创作伙伴们,今天我要分享一个让我的影视编辑生活大放异彩的神器——会声会影2024破解版本!🎉🌟 🌈**功能全面升级**:作为一款专业的视频编辑软件,会声会影2024破解版本不仅继承了之前版本…

Springboot应用的信创适配

CentOS7在2024.6.30停止维护后,可替代的Linux操作系统-CSDN博客 全面国产化之路-信创-CSDN博客 信创适配评测-CSDN博客 Springboot应用的信创适配 Springboot应用的信创适配,如上图所示需要适配的很多,从硬件、操作系统、中间件&#xff08…

人工智能在数字病理切片虚拟染色以及染色标准化领域的研究进展|顶刊速递·24-06-23

小罗碎碎念 本期推文主题:人工智能在数字病理切片虚拟染色以及染色标准化领域的研究进展 这一期的推文是我发自内心觉得为数不多,特别宝贵的一篇推文,原因很简单——可参考的文献相对较少&方向非常具有研究意义&现在不卷。 数字病理…

TCP如何做到可靠传输

TCP如何做到可靠传输 1. 连接建立(三次握手)2. 数据传输2.1 序列号和确认号2.2 窗口机制 3. 流量控制4. 拥塞控制5. 错误检测与恢复5.1 校验和5.2 重传机制 6. 连接终止(四次挥手)示例 TCP(传输控制协议)通…

【ajax核心04】利用async、await解决显式promise链问题

一:async函数与await关键字 async function 声明创建一个绑定到给定名称的新异步函数。函数体内允许使用 await 关键字,这使得我们可以更简洁地编写基于 promise 的异步代码,并且避免了显式地配置 promise 链的需要。 function resolveAfte…

Vue3+TypeScript项目实战——打造雨雪交加的智慧城市

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

三国之家网站的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,论坛管理,公告管理,三国视频管理,基础数据管理,三国图文管理 前台账户功能包括:系统首页,个人中心&#…

VS2010中负载测试注意问题

目前在项目开发中,通常会使用DBHelper类,对数据库操作进行封装,如果使用的静态数据库连接对象,在负载测试中将出现连接已打开或未关闭的问题,因为静态连接变量只赋值一次后就常驻内存。这样就导致了只有一个连接&#…

从工具产品体验对比spark、hadoop、flink

作为一名大数据开发,从工具产品的角度,对比一下大数据工具最常使用的框架spark、hadoop和flink。工具无关好坏,但人的喜欢有偏好。 目录 评价标准1 效率2 用户体验分析从用户的维度来看从市场的维度来看从产品的维度来看 3 用户体验的基本原则…

《人生苦短,我用python·四》pybind11多场景使用

引言 Pybind11作为一个强大的工具,不仅可以轻松地将简单的C函数和类暴露给Python,还可以处理更复杂的场景,比如支持C标准库容器、处理C异常、以及自定义数据结构的转换。本文将深入介绍Pybind11的一些高级用法,帮助你在实际项目中…

将WIN10的wifi上网分享给以太网接口

目录 打开网络设置设置属性点这里的设置将wlan主机的以太网接口IP设为自动获取 如果连接不成功,拔网线重连一次 打开网络设置 设置属性 点这里的设置 将wlan主机的以太网接口IP设为自动获取 如果连接不成功,拔网线重连一次

IOS开发学习日记(十六)

目录 App间的唤起和通信 App跳转 通过Scheme唤起其他App Universal Link 组件化 App间的唤起和通信 App跳转 使用URL Scheme支持App启动、跳转及参数传递 分享 / 登陆 / 拉起App Store等 设置URL Type 在UIApplication中处理参数和业务逻辑 -(BOOL)application:(UIApp…

Vue73-命名路由

一、路由的name属性 二、小结

【栈与队列】有效的括号

题目:给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…

Kafka 集群状态监测、故障切换机制原理

Kafka 集群状态监测、故障切换机制原理 Kafka 的状态监测、故障检测和数据变化的实现方式确实依赖于 ZooKeeper 进行协调和管理,但具体机 制包括 ZooKeeper 监听和 Kafka 内部逻辑的结合。以下是详细说明: 1. ZooKeeper 监听机制 Kafka 使用 ZooKeeper 的监听机制来监测状…

深入理解原型模式:Java实现与框架应用

原型模式是一种创建型设计模式,允许对象通过复制现有对象来创建新的实例,而不是通过类实例化来创建对象。原型模式特别适用于创建对象代价高昂或复杂的场景。在本篇博客中,我们将详细介绍原型模式,并演示如何在Java中实现它。最后…