【嵌入式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.rhkb.cn/news/365211.html

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

相关文章

【ESP32】打造全网最强esp-idf基础教程——14.VFS与SPIFFS文件系统

VFS与SPIFFS文件系统 这几天忙着搬砖,差点没时间更新博客了,所谓一日未脱贫,打工不能停,搬砖不狠,明天地位不稳呀。 不多说了,且看以下内容吧~ 一、VFS虚拟文件系统 先来看下文件系统的定义&#x…

力扣SQL50 连续出现的数字 distinct

Problem: 180. 连续出现的数字 👨‍🏫 力扣官解 Code SELECT DISTINCTl1.Num AS ConsecutiveNums FROMLogs l1,Logs l2,Logs l3 WHEREl1.Id l2.Id - 1AND l2.Id l3.Id - 1AND l1.Num l2.NumAND l2.Num l3.Num ;

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中,MVC(Model-View-Controller)框架是一种架构模式,用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构,提高代码的可维护性…

简单体验一下AI训练的过程

推荐一个站点 http://playground.tensorflow.org 有什么优点呢 这个是tensorflow官方的体验站点,以图形化的方式给出了训练过程中所需的各种因素。

帝国CMS(EmpireCMS)漏洞复现

简介 《帝国网站管理系统》英文译为Empire CMS,简称Ecms,它是基于B/S结构,且功能强大而帝国CMS-logo易用的网站管理系统。 帝国CMS官网:http://www.phome.net/ 参考相关漏洞分析文章,加上更详细的渗透测试过程。 参考…

计算机网络之体系结构

上节内容:数据通信原理 1.计算机网络体系结构 体系结构: 研究系统中各组成成分及其关系的一门学科。 计算机网络体系结构: 定义和描述一组用于计算机及其通信设施之间互连的标准和规范的集合,遵循这组规范可以很方便地实现计算机设备之间的通信。 相互…

车联网全方位安全适配与领先架构

设想一下如下场景: 您钟爱的座驾,在毫无外力破坏迹象的情况下,突然被侵入,远程启动,然后绝尘而去… 别以为这只是大银幕上的虚构桥段,事实上,这一幕在现实中已经上演。 某款备受欢迎的车型&a…

通讯:单片机串口和电脑通讯

目录 1.串口输出数据到电脑 硬件部分 串口输出数据到电脑的软件软件部分: 相关问题: 2.单片机串口--485--485转USB--电脑 串口,芯片,转换器,设备之间的通讯的接线,都是要TX--RX, RX--TX 交叉连接。 单…

论文阅读_优化RAG系统的检索

英文名称: The Power of Noise: Redefining Retrieval for RAG Systems 中文名称: 噪声的力量:重新定义RAG系统的检索 链接: https://arxiv.org/pdf/2401.14887.pdf 作者: Florin Cuconasu, Giovanni Trappolini, Federico Siciliano, Simone Filice, Cesare Campag…

MySQL周内训参照3、简单查询与多表联合复杂查询

基础查询 1、查询用户信息,仅显示用户的姓名与手机号,用中文显示列名。中文显示姓名列与手机号列 SELECT user_id AS 编号, phone AS 电话 FROM user; 2. 根据订购表进行模糊查询,模糊查询需要可以走索引,需要给出explain语句。…

基于bootstrap的12种登录注册页面模板

基于bootstrap的12种登录注册页面模板,分三种类型,默认简单的登录和注册,带背景图片的登录和注册,支持弹窗的登录和注册页面html下载。 微信扫码下载

【操作系统期末速成】 EP01 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️1.1 考点一:操作系统的概率及特征 三、总结:🍓🍓🍓 一、前言🚀🚀🚀 ☀️ 回报不在行动…

HDFS详细介绍以及HDFS集群环境部署【hadoop组件HDFS笔记】(图片均为学习时截取的)

HDFS详细介绍 HDFS是什么 HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一 全称是:Hadoop Distributed File System(Hadoop分布式文件系统);是Hadoop技术栈内提供的分布式数据存储解决方案 可以在多台服务器上构建存储集群&…

Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 引言: crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件…

Ubuntu20.04离线安装dpkg

方法一:百度云盘下载离线安装包 链接:https://pan.baidu.com/s/1L7TaFwE35bMfOJbXmJcWwQ 提取码:mjsm --来自百度网盘超级会员V4的分享 方法二:找一台联网计算机,自行下载离线安装包。 1. 创建存放离线包文件夹 …

SAP的RFID

射频识别 (RFID) 避免了条码扫描的局限性,条码扫描需要对每个条码进行视线访问,并且一次只能用于扫描一个项目。 一次扫描一个标签可能会令人厌烦和压力大,这会增加人为错误的机会。相反,RFID 标签不需要直…

linux中awk,sed, grep使用(待补充)

《linux私房菜》这本书中将sed和awk一同归为行的修改这一点,虽然对,但不利于实际处理问题时的思考。因为这样的话,当我们实际处理问题时,遇到比如说统计文本打印内容时,我们选择sed还是awk进行处理呢? 也因…

安装ubuntu过程中,出现“执行‘grub-install/dev/sda’失败,这是一个致命错误”问题,解决办法!软碟通制作U盘启动盘!

背景 U盘安装ubuntu系统过程中,出现类似如下问题,/dev/sda7内容可能不一样,但问题类似。 可能原因 1.U盘启动盘制作失败 2.U盘启动盘UEFI格式与Ubuntu引导分区有冲突 解决办法 1.用UltraISO(软碟通)重新制作U盘启…

基于源码详解ThreadPoolExecutor实现原理

个人博客地址 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog 内容拆分 这里算是一个总集,内容太多,拆分成几个比较重要的小的模块: ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog ThreadPoolExecutor 工作线程…

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以…