IMX.6U 處理器時鐘源與時鐘樹

I.MX6U 的系統主頻為 528MHz,有些型號可以跑到 696MHz,但是默認情況下內部 bootrom 會將I.MX6U 的主頻設置為 396MHz。我們在使用 I.MX6U的時候肯定是要發揮它的最大性能,那麼主頻肯定要設置到 528MHz(其它型號可以設置更高,比如 696MHz),其它的外設時鐘也要設置到 NXP 推薦的值。

I.MX6U開發板的系統時鐘來源於兩部分: 32.768KHz 和24MHz 的晶振,其中 32.768KHz 晶振是 I.MX6U 的 RTC 時鐘源, 24MHz 晶振是 I.MX6U 內核和其它外設的時鐘源,也是我們重點要分析的。
I.MX6U 的外設有很多,不同的外設時鐘源不同, NXP 將這些外設的時鐘源進行了分組,一個有 7 組,這 7 組時鐘源都是從 24MHz 晶振 PLL 而來的,因此也叫做 7 組 PLL,這 7 組 PLL結構如圖所示:

IMX.6U 處理器時鐘源與時鐘樹

初級 PLLs 時鐘源生成圖

上圖展示了 7 個 PLL 的關係,我們依次來看一下這 7 個 PLL 都是什麼做什麼的:
①、 ARM_PLL(PLL1),此路 PLL 是供 ARM 內核使用的, ARM 內核時鐘就是由此 PLL生成的,此 PLL 通過編程的方式最高可倍頻到 1.3GHz。
②、 528_PLL(PLL2),此路 PLL 也叫做 System_PLL,此路 PLL 是固定的 22 倍頻,不可編程修改。因此,此路 PLL 時鐘=24MHz * 22 = 528MHz,這也是為什麼此 PLL 叫做 528_PLL 的原因。此 PLL 分出了 4 路 PFD,分別為: PLL2_PFD0~PLL2_PFD,這 4 路 PFD 和 528_PLL 共同作為其它很多外設的根時鐘源。通常 528_PLL 和這 4 路 PFD 是 I.MX6U 內部系統總線的時鐘源,比如內處理邏輯單元、 DDR 接口、 NAND/NOR 接口等等。
③、 USB1_PLL(PLL3),此路 PLL 主要用於 USBPHY,此 PLL 也有四路 PFD,為:
PLL3_PFD0~PLL3_PFD3,USB1_PLL 是固定的 20 倍頻,因此 USB1_PLL=24MHz *20=480MHz。
USB1_PLL雖然主要用於 USB1PHY,但是其和四路 PFD同樣也可以作為其他外設的根時鐘源。
④、 USB2_PLL(PLL7,沒有寫錯!就是 PLL7,雖然序號標為 4,但是實際是 PLL7),看名字就知道此路 PLL是給 USB2PHY使用的。同樣的,此路 PLL固定為 20倍頻,因此也是 480MHz。
⑤、 ENET_PLL(PLL6),此路 PLL 固定為 20+5/6 倍頻,因此 ENET_PLL=24MHz * (20+5/6)
= 500MHz。此路 PLL 用於生成網絡所需的時鐘,可以在此 PLL 的基礎上生成 25/50/100/125MHz
的網絡時鐘。
⑥、 VIDEO_PLL(PLL5),此路 PLL 用於顯示相關的外設,比如 LCD,此路 PLL 的倍頻可以調整, PLL 的輸出範圍在 650MHz~1300MHz。此路 PLL 在最終輸出的時候還可以進行分頻,可選 1/2/4/8 分頻。


⑦、 AUDIO_PLL(PLL4),此路 PLL 用於音頻相關的外設,此路 PLL 的倍頻可以調整, PLL的輸出範圍同樣也是 650MHz~1300MHz,此路 PLL 在最終輸出的時候也可以進行分頻,可選1/2/4 分頻。
看完了上面7 路 PLL, I.MX6U 的所有外設時鐘源都是從這 7 路 PLL 和有些 PLL 的PFD 而來的:

IMX.6U 處理器時鐘源與時鐘樹

I.MX6U 時鐘樹

在圖中一共有三部分: CLOCK_SWITCHER、 CLOCK ROOT GENERATOR 和SYSTEM CLOCKS。其中左邊的 CLOCK_SWITCHER 就是我們上一小節講解的那 7 路 PLL 和8 路 PFD,右邊的 SYSTEM CLOCKS 就是芯片外設,中間的 CLOCK ROOT GENERATOR 是最複雜的!這一部分就像“月老”一樣, 給左邊的 CLOCK_SWITCHER和右邊的 SYSTEM CLOCKS進行牽線搭橋。外設時鐘源是有多路可以選擇的, CLOCK ROOT GENERATOR 就負責從 7 路PLL 和 8 路 PFD 中選擇合適的時鐘源給外設使用。具體操作肯定是設置相應的寄存器,我們以ESAI 這個外設為例, ESAI 的時鐘圖如圖所示:

IMX.6U 處理器時鐘源與時鐘樹

ESAI 時鐘

在圖中我們分為了 3 部分,這三部分如下:
①、此部分是時鐘源選擇器, ESAI 有 4 個可選的時鐘源: PLL4、 PLL5、 PLL3_PFD2 和pll3_sw_clk 。 具 體 選 擇 哪 一 路 作 為 ESAI 的 時 鍾 源 是 由 寄 存 器 CCM->CSCMR2 的ESAI_CLK_SEL 位來決定的,用戶可以自由配置,配置如下圖所示:

IMX.6U 處理器時鐘源與時鐘樹

寄存器 CSCMR2 的 ESAI_CLK_SEL 位

②、此部分是 ESAI 時鐘的前級分頻,分頻值由寄存器 CCM_CS1CDR 的 ESAI_CLK_PRED來確定的,可設置 1~8 分頻,假如現在 PLL4=650MHz,我們選擇 PLL4 作為 ESAI 時鐘,前級分頻選擇 2 分頻,那麼此時的時鐘就是 650/2=325MHz。


③、此部分又是一個分頻器,對②中輸出的時鐘進一步分頻,分頻值由寄存器CCM_CS1CDR 的 ESAI_CLK_PODF 來決定,可設置 1~8 分頻。假如我們設置為 8 分頻的話,經過此分頻器以後的時鐘就是 325/8=40.625MHz。因此最終進入到 ESAI 外設的時鐘就是40.625MHz。
上面我們以外設 ESAI 為例講解了如何根據時鐘樹來設置外設的時鐘頻率,其他的外設基本類似的,大家可以自行分析一下其他的外設。


分享到:


相關文章: