痞子衡嵌入式:淺談i.MXRT1xxx系列MCU時鐘相關功能引腳的作用

痞子衡發表於2022-05-08

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx系列MCU時鐘相關功能引腳作用

  如果我們從一顆 MCU 晶片的引腳分類來看晶片功能,大概可以分為三大類:電源、時鐘、外設功能。作為嵌入式開發者,大部分時候關注得都是外設功能引腳,而對於時鐘相關引腳往往不太在意,其實有些時候利用時鐘功能引腳也能助你定位問題。今天痞子衡就帶你梳理一下 i.MXRT1xxx 系列的時鐘系統以及相關功能引腳:

一、時鐘系統簡介

  目前 i.MXRT1xxx 系列主要分為 i.MXRT10xx 和 i.MXRT11xx 兩大分支。這兩個分支的時鐘系統設計是有一些差異的,不過總體來說,架構差別不大,我們以如下 i.MXRT1170 的時鐘架構為例來具體介紹。

  在時鐘系統架構圖裡我們能看到有五大元件:OSC_PLL、CCM、LPCG、GPC、SRC,其中最核心的功能在前兩個,OSC_PLL 主要負責產生時鐘,CCM 主要用於分配時鐘。

二、關於時鐘源頭

  上一節裡我們知道 OSC_PLL 模組負責所有時鐘的生成,但那些時鐘並不是憑空產生的,也是需要源頭的。這個源頭既可以來自晶片內部,也可以來自外部引腳輸入。

  先說晶片內部的 RC OSC,在晶片設計時,為了保證在沒有外部時鐘/晶振輸入的情況下,晶片也能工作,所以內部整合了一些振盪器/振盪電路(RC Oscillator),32KHz 和 24MHz(48MHz) 是標配,部分型號上還有 16MHz、400MHz,不過這些內部振盪器精度有限(有可能誤差20%),適用晶片低速執行場合。

  如果是晶片高速執行的場合(或者對精度要求高的場合),那一定需要外接高精度振盪器,包含從 XTALI/XTALO 引腳進來的 24MHz OSC,以及從 RTC_XTALI/RTC_XTALO 引腳進來的 32.768KHz OSC,這兩個外部時鐘源是由 OSC_PLL 大模組內部的 XTALOSC 小模組負責管理的,XTALOSC 模組優先檢測外部是否有 32.768KHz / 24MHz OSC 存在,如果存在則用外部源,如果不存在則啟用內部 32KHz / 24MHz RC OSC 源。

  24MHz OSC(內部或者外部源)是 OSC_PLL 內部 PLL 的主要時鐘源,有了基準的 24MHz 時鐘,PLL 就能將其倍頻得到想要的高頻時鐘,晶片內部 PLL 有很多個,大部分 PLL 都只是輸出固定原始頻率時鐘,少部分含 PFD 功能的 PLL(一般是 System PLL)可以調節原始頻率輸出。除了 24MHz OSC 外,PLL 也可以接受來自 CLK1_P/CLK1_N 引腳輸入的源。

1. 對於 i.MXRT10xx 系列,PLL 時鐘源選擇在 CCM_ANALOG->PLL_xxx[BYPASS_CLK_SRC] 位
2. 對於 i.MXRT11xx 系列,PLL 時鐘源由 Set Point 設定
時鐘源輸入 i.MXRT1011 i.MXRT1015/102x i.MXRT105x/106x i.MXRT11xx
(116x/117x/118x)
i.MXRT118x
XTALI
XTALO
LQFP80 - 37,38 LQFP100 - 46,47
LQFP144 - 67,68
BGA196 - N11,P11 BGA289 - U16,T16 BGA144 - M9,L9
RTC_XTALI
RTC_XTALO
LQFP80 - 27,28 LQFP100 - 36,37
LQFP144 - 57,58
BGA196 - N9,P9 BGA289 - T13,U13 BGA144 - M7,L7
CLK1_P
CLK1_N
N/A N/A BGA196 - N13,P13 BGA289 - U15,T15 BGA144 - M11,L11

三、關於時鐘輸出

  前面講了 32KHz / 24MHz OSC 是比較重要的時鐘源頭,它的精度對系統效能有很大影響,因此我們需要有一種方法實測這兩個時鐘的精度,晶片設計時特意在一些 I/O 引腳複用功能裡做了 REF_CLK_24M / REF_CLK_32K 選項,當 I/O 配置為該功能時,便可用示波器量得具體時脈頻率。

  我們知道 CCM 模組負責 OSC_PLL 輸出的時鐘資源的分配,晶片裡所有外設的具體時鐘源指定以及分頻係數、開關控制均由 CCM 來完成。如果你想觀測某 PLL 最終輸出或者常用外設時鐘源最終配置,也可以通過指定 I/O 輸出觀測,即下面的 CCM_CLKO1 / CCM_CLKO2 複用功能選項。當然 CCM_CLKOx 不僅僅用於觀測頻率,也可以用於給外部晶片提供時鐘源。

1. 對於 i.MXRT10xx 系列,CCM_CLKOx 時鐘輸出控制在 CCM->CCOSR 暫存器
2. 對於 i.MXRT11xx 系列,CCM_CLKOx 時鐘輸出控制在最後兩個 CCM->CLOCK_ROOT_CONTROL 暫存器
時鐘訊號輸出 i.MXRT1011 i.MXRT1015/102x i.MXRT105x/106x i.MXRT116x/117x i.MXRT118x
REF_CLK_24M GPIO_AD_14 GPIO_AD_B0_01
GPIO_AD_B0_03
GPIO_AD_B0_13
GPIO_AD_14 N/A
REF_CLK_32K GPIO_AD_07 GPIO_AD_B0_00 GPIO_AD_13 N/A
CCM_CLKO1 GPIO_SD_02 GPIO_SD_B1_02 GPIO_SD_B0_04 GPIO_EMC_B1_40 GPIO_EMC_B2_02
GPIO_SD_B1_00
CCM_CLKO2 GPIO_SD_01 GPIO_SD_B1_03 GPIO_SD_B0_05 GPIO_EMC_B1_41 GPIO_EMC_B2_08
GPIO_SD_B1_01

  總結一下,時鐘功能引腳尤其是輸出引腳對於確認時脈頻率具有重要意義,如果你的應用嚴重依賴時鐘精度,遇到問題時不妨先檢查一下時脈頻率的準確性以及精度。

  至此,i.MXRT1xxx系列MCU時鐘相關功能引腳作用痞子衡便介紹完畢了,掌聲在哪裡~~~

歡迎訂閱

文章會同時釋出到我的 部落格園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

相關文章