首页 > 其他分享 >痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用

痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用

时间:2022-10-02 23:12:34浏览次数:69  
标签:24MHz 浅谈 晶振 RC24M MXRT10xx OSC PLL 时钟


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT10xx系列MCU外接24MHz晶振的作用

  痞子衡之前写过一篇关于时钟引脚的文章 《i.MXRT1xxx系列MCU时钟相关功能引脚的作用》,里面简单提及了外部晶振相关引脚的作用,但是并没有详细展开。最近在客户支持中,有客户咨询项目板级设计上能否将外部 24MHz 晶振完全去掉,就使用芯片内部集成的 RC24M 做初始时钟源。今天痞子衡就详细展开这个话题:

  • Note: 本文中图片代码均以 i.MXRT1050 为例,但内容基本也适用其他 i.MXRT10xx 系列。

一、外部24MHz晶振作用

  i.MXRT 系列共有两组外接晶振专用引脚,XTALI/O 用于连接 24MHz 晶振,RTC_XTALI/O 用于连接 32.768KHz 晶振。其中低频 32.768KHz 晶振主要用于低功耗场景(SNVS 域),而高频 24MHz 晶振(即本文主角)主要是给内部 PLL 提供时钟源,它是高性能应用的保证。

  • Note: i.MXRT1011/102x 的 PLL 时钟源仅能是 OSC 24MHz,而 i.MXRT105x/106x 的 PLL 时钟源除了 OSC 24MHz 外,还可以是专门时钟输入引脚(CLK1_P/N)。

  外部 24MHz 晶振(XTAL24M)并不是直接连到 PLL 模块的,中间会经过芯片内部 OSC 24MHz 模块,而 OSC 24MHz 模块本身还包含了一个 RC24M 震荡电路,这是为了确保在没有外部 XTAL24M 的情况下,PLL 也能正常工作。

  • Note1: OSC 24MHz 模块的源可来自外部 XTAL24M 也可以是内部 RC24M,但这种切换不是自动的,需要在代码里主动切换。
  • Note2: RC24M 主要用于低速应用场合,并且以 RC24M 为源的功耗比以 XTAL24M 为源的功耗小很多。

二、内部RC24M振荡器能否替代外部24MHz晶振?

  我们知道内部 RC24M 精度较差,最差的情况甚至有 20% 的精度误差,这种情况下一些对精度要求高的外设(比如 USB、ENET)是无法使用 RC24M 为源的 PLL 输出作为时钟源的。

  如果你的应用里不涉及 USB、ENET 等外设,就使用了一些简单的 LPUART/LPSPI 等外设,那么是完全可以禁掉外部 XTAL24M 的使用的,切换代码如下。其中需要注意的是如果当前内核时钟源来自 PLL,那么必须先将内核时钟切到 OSC24M,否则 OSC24M 时钟源切换操作会直接导致代码跑飞(一旦 PLL 时钟源发生变化,输出会不稳,此时内核运行会出现异常):

void ClockSelectRcOsc(void)
{
    // 将内核时钟源从 PLL 切换到 OSC 24M
    CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 1);
    CLOCK_SetMux(kCLOCK_PeriphMux, 1);

    // 将 OSC 24M 时钟源从外部 XTAL24 切换到内部 RC24M
    CLOCK_InitRcOsc24M();
    CLOCK_SwitchOsc(kCLOCK_RcOsc);
    CLOCK_DeinitExternalClk();

    // 恢复内核时钟源(这里的 m、n 为切换之前的配置)
    CLOCK_SetMux(kCLOCK_PeriphClk2Mux, m);
    CLOCK_SetMux(kCLOCK_PeriphMux, n);
}

  更多 RC24M 的应用详见 \SDK_2_12_0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\power_mode_switch\bm 例程。

三、能否完全去掉外部24MHz晶振?

  既然在低速或者低功耗应用场合,RC24M 可以替代 XTAL24M,那么我们能不能直接把 XTAL24M 完全去掉呢?答案很遗憾,不能!因为芯片系统(内核、PLL)默认就是以 XTAL24M 为初始时钟源:

XTALOSC24M->LOWPWR_CTRL[OSC_SEL]    = 1'b0   // 24MHz clock from XTAL OSC
CCM_ANALOG->PLL_ARM[BYPASS_CLK_SRC] = 2'b00  // clock from REF_CLK_24M
CCM->CBCMR[PRE_PERIPH_CLK_SEL]      = 2'b11  // clock from divided PLL1 (PLL_ARM)
CCM->CBCDR[PERIPH_CLK_SEL]          = 1'b0   // clock from pre_periph_clk_sel

  如果没有外部 XTAL24M,芯片系统上电后,内核没有正确的时钟源,BootROM 代码无法正常执行,这时候甚至仿真器也没法找到内核,那后续设计也就没有任何意义。看到这里,你可能会明白,i.MXRT毕竟是跨界处理器,它是为高性能场景而生的,运行起来后切换到内部 RC24M 来降功耗只是它的附带功能而已。

  至此,i.MXRT10xx系列MCU外接24MHz晶振的作用便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

标签:24MHz,浅谈,晶振,RC24M,MXRT10xx,OSC,PLL,时钟
From: https://www.cnblogs.com/henjay724/p/16749726.html

相关文章

  • webpack 浅谈
    webpack是什么是一个模块化打包工具,分析我们的项目结构,将不同的资源和文件,进行打包,合并在一个文件里。webpack的作用读取文件,解析文件,处理文件,编译文件,打包文件并合并......
  • 浅谈 MySQL 连表查询
    浅谈MySQL连表查询连表查询是一把双刃剑,优点是适应范式,减少数据冗余;缺点是连表查询特别是多张表的连表会增加数据库的负担,降低查询效率.简介连表查询就是2......
  • 浅谈Git架构和如何避免代码覆盖的事故
    浅谈Git架构和如何避免代码覆盖的事故Git不同于SVN的地方在于,Git是分布式的版本管理系统,所有的客户端和服务器都保存了一份代码,涉及到仓库仓之间的同步,所以处......
  • 浅谈学习方法
    一、软件/环境配置1.1工具/软件的使用像IDE集成开发环境、Navicate数据库连接工具、VSCode代码编辑器、VMWareWorkStation虚拟机、PostmanAPI调试工具等一众工具,要想熟......
  • 浅谈标准I/O缓冲区
    标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/O库......
  • iOS 审核浅谈:1.4.1、2.1、2.5.2、2.5.4、4.2.3、5.2.5
    整理下近期被Apple残忍虐待的成果。 ps:可以提供一个视频链接,建议用微软的OneDrive。审核员方便点。国内那些个地址都需要登录,需要登录才能看视频的场景,同样会被......
  • 从几个开源项目浅谈IOS视频流输出方案
    IOS远程控制技术当中,最重要的环节是视频的输出,本文就目前出现的几种IOS视频流技术做一个实践和对比,重点会放在比较这几个方案在性能上的优缺点。方案分析IOS视频流方案,目前......
  • 浅谈软件工程
    首先,软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,研究和应用如何以系统规范、可定量的过程化方法去开发和维护软件的学科,具有适用性、有效性、可修改性、可靠......
  • 浅谈DDD中的聚合
    简介: 在我看来并不是MVC的基础上增加领域层,使用充血模型,解耦基础服务,我的代码就符合DDD了。作者|李宇飞(菜尊)来源|阿里开发者公众号在我看来并不是MVC的基础上......
  • 浅谈对软件工程的理解
    软件工程是指导软件开发和维护的一门学科,由于软件具有复杂性、一致性、不可见性、可变性等诸多特点,在实际开发中有可能出现各种问题,造成软件危机。因此,对软件的正确认识、......