大家好,我是痞子衡,是正经搞技术的痞子 。今天痞子衡给大家介绍的是i.MXRT10xx系列MCU外接24MHz晶振的作用 。
痞子衡之前写过一篇关于时钟引脚的文章 《i.MXRT1xxx系列MCU时钟相关功能引脚的作用》,里面简单提及了外部晶振相关引脚的作用,但是并没有详细展开 。最近在客户支持中,有客户咨询项目板级设计上能否将外部 24MHz 晶振完全去掉,就使用芯片内部集成的 RC24M 做初始时钟源 。今天痞子衡就详细展开这个话题:
一、外部24MHz晶振作用i.MXRT 系列共有两组外接晶振专用引脚,XTALI/O 用于连接 24MHz 晶振,RTC_XTALI/O 用于连接 32.768KHz 晶振 。其中低频 32.768KHz 晶振主要用于低功耗场景(SNVS 域),而高频 24MHz 晶振(即本文主角)主要是给内部 PLL 提供时钟源,它是高性能应用的保证 。
- Note: 本文中图片代码均以 i.MXRT1050 为例,但内容基本也适用其他 i.MXRT10xx 系列 。
- 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 24MCLOCK_SetMux(kCLOCK_PeriphClk2Mux, 1);CLOCK_SetMux(kCLOCK_PeriphMux, 1);// 将 OSC 24M 时钟源从外部 XTAL24 切换到内部 RC24MCLOCK_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 OSCCCM_ANALOG->PLL_ARM[BYPASS_CLK_SRC] = 2'b00// clock from REF_CLK_24MCCM->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
文章插图
经验总结扩展阅读
- 离心式压缩机的平衡管有什么作用
- SR寄存器BP[x:0]位 痞子衡嵌入式:一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事
- 虞衡制度是什么意思
- 有趣实验 .NET下数据库的负载均衡
- 十段均衡器怎么调 10段均衡器最清晰完美
- 某云负载均衡获取客户端真实IP的问题
- 利润总额如何衡量企业经营业绩?
- 试算平衡指的是什么?
- 股债平衡型基金是什么?
- 资产负债表内的平衡关系如何?