大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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主页知乎主页微信公众号 平台上。

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

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

  1. 痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用. 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能,大概可以分为三大类:电源.时钟 ...

  2. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...

  3. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(2)- KBOOT形态(ROM/Bootloader/Flashloader)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT形态. 痞子衡在前一篇文章里简介了 KBOOT架构,我们知道KBOOT是一个完善的Bootl ...

  4. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(3)- KBOOT配置(FOPT/BOOT Pin/BCA)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT配置. KBOOT是支持配置功能的,配置功能可分为两方面:一.芯片系统的启动配置:二.KBO ...

  5. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性. Application完整性检测是非常 ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(11)- KBOOT特性(ROM API)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之ROM API特性. KBOOT的ROM API特性主要存在于ROM Bootloader ...

  7. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(10)- KBOOT特性(可靠升级)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之可靠升级(Reliable Update)特性. 所谓可靠升级机制,即在更新Applica ...

  8. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是飞思卡尔Kinetis系列微控制器相关知识. 飞思卡尔半导体(现恩智浦半导体)于2010年开始推出的Kinetis系列昭示着ARM C ...

  9. 痞子衡嵌入式:利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache. 关于i.MXRT1xxx系列内部通用数据协处 ...

随机推荐

  1. kube-scheduler的调度上下文

    前一章节了解到了kube-scheduler中的概念,该章节则对调度上下文的源码进行分析 Scheduler Scheduler 是整个 kube-scheduler 的一个 structure,提供 ...

  2. StringBuilder的原理

    StringBuilder类 字符串拼接问题 由于String类的对象内容不可改变,所以每当进行字符串拼接的时候,总是会在内存中创建一个新的对象.例如: class Test{ public stat ...

  3. 如何让照片中的人物笑起来?HMS Core视频编辑服务一键微笑功能,让人物笑容更自然

    最近一键"露齿笑"席卷全网,无论是短视频用户还是社交App用户都在使用这项黑科技.当三两好友聚会拍集体照留念时,为了处理个别人的表情"瑕疵",让大家都尽量保持微 ...

  4. 论文解读(JKnet)《Representation Learning on Graphs with Jumping Knowledge Networks》

    论文信息 论文标题:Representation Learning on Graphs with Jumping Knowledge Networks论文作者:Keyulu Xu, Chengtao ...

  5. 个人学习-STL深入学习01-vectory源码研习 // 需要补充

    参考资料: [1]博主:一枚程序员 STL源码剖析--vector https://www.cnblogs.com/sooner/p/3273395.html [2]博主:劲蜡鸡腿堡 vector源码 ...

  6. luogu1486 [NOI2004]郁闷的出纳员 (平衡树)

    加的注释,都流着泪... 胡了一种做法,样例都没过,翻题解发现一神仙Remove操作,妙啊! #include <iostream> #include <cstdio> #in ...

  7. SpringBoot项目搭建 + Jwt登录

    临时接了一个小项目,有需要搭一个小项目,简单记录一下项目搭建过程以及整合登录功能. 1.首先拿到的是一个码云地址,里面是一个空的文件夹,只有一个 2. 拿到HTTPS码云项目地址链接,在IDEA中cl ...

  8. 在 C# 中使用 Span<T> 和 Memory<T> 编写高性能代码

    目录 在 C# 中使用 Span 和 Memory 编写高性能代码 .NET 中支持的内存类型 .NET Core 2.1 中新增的类型 访问连续内存: Span 和 Memory Span 介绍 C ...

  9. vscode 插件 Cnblogs Client For VSCode

    目录 简介 主要功能 登录 / 授权 将本地 markdown 文件发布到博客园 博客园博文列表 将本地文件关联到博客园博文 拉取远程博文内容更新本地文件 图片上传 博文分类管理 导出 pdf 博文设 ...

  10. JS/java实现QQ空间自动点赞

    使用方法: 1:进入QQ空间 2:复制下面代码 3:按F12或右键审查元素 进入控制台 也就是console 4:粘贴  回车键  喝口水 5:如果嫌慢的话可以 修改这段代码. window.setI ...