Tiny210 U-BOOT(二)--配置時鐘頻率基本原理

CPU時鐘、NAND FLASH、DDR、串口、網卡至少這些硬件,是我們需要在u-boo的啓動過程中完成初始化的,其餘的細節問題先不說了。必竟前面的這些硬件,是u-boot在啓動過程,做自搬移和最終引導內核前必須要用到的。爲了理解u-boot源碼中那些硬件操作彙編代碼,我們先看看這些硬件的工作原理是如何的。

CPU的系統時鐘

U-BOOT在啓動的過程中,需要配置系統時鐘,沒有這東西,CPU就跑不起來。
配置系統時鐘,大致是以下幾個步驟:

(1)設置系統PLL鎖定時間
(2)配置PLL
(3)配置各模塊分頻係數
(4)切換到PLL時鐘

以後大家經常要翻的就是S5PV210的芯片手冊了,以後說Pxxx頁,指的就是S5PV210的芯片手冊,這裏我使用的是S5PV210_UM_REV1.1的版本,以後的頁數都以這個爲準。

1.基本原理
首先輸出一個高電平,然後通過三個晶振輸出一個頻率,再然後通過倍頻器(鎖相環)將頻率升高,接着再通過分頻,把分出來的不同的頻率,提供給不同的器件,比如ARM Cotrex內核、各種設備控制器等等。

Tiny210(S5PV210)上藍色的框標註的就是晶振的位置,最上面的是27MHz,中間和下面兩顆是24MHz,順便講一下另外幾片東西,最左邊的四片是內存DDR2-800,這表示數據傳輸頻率爲800MHz,外部時鐘頻率200MHz,內部時鐘頻率爲100MHz;下面的黃色框是NAND FLASH,外部時鐘頻率133MHz。我怎麼知道的?大家看了這一章以後,自然就知道怎麼查了,別急,耐心往下看

倍頻的原理:


上圖就是上電後的XXTI輸出的頻率變化圖(XXTI引腳見P361的系統時鐘流程圖最左邊的XXTI引腳,XXTI的詳細介紹見P354的Figure 3-2 S5PV210 Top-Level Clocks),頻率從小變到指定頻率需要一段時間(圖中標紅框的部分),當CPU頻率在變化的時候(比如由復位後的初始的400HZ,我要升到1000HZ),先要把CPU的頻率鎖定,因爲這時CPU的頻率是變化的,頻率變化會導致CPU的狀態就無法確定,所以,需要用PLL--phase-locked loop鎖相環,將CPU頻率鎖定一段時間,直到我的頻率輸出穩定爲止。芯片手冊上顯示APLL默認的設置時間爲30us(30毫秒鎖定時間)。


鎖定頻率後,應該設置一個倍頻因子,在ARM手冊中去查表10.2,P,M,S設置對應的位的值,然後將頻率提升,比如從晶振輸出的24HZ,擡升到1000Hz。


分頻的原理:
設置不同的位,比如,設置某一位爲0當分頻時,原來頻率爲1000HZ,那麼頻率就被分爲1000/1=1000Hz, 這樣就可以分給ARMCLK使用。


2.開始分析

上圖取自芯片手冊section 02_system的第3章 CLOCK CONTROLLER,在開篇的P353頁的第一張圖就是這個。


S5PV210的Clock分爲三個domain,意思是三個區域--MSYS,DSYS,PSYS,這三個區域分別都是AMBA總線,AMBA總線分爲AHB和APB兩種總線(這是不嚴格的分法,僅僅是便於理解),每種總線都有不同的時鐘頻率,AHB--HCLK/APB--PCLK。那麼MSYS,DSYS,PSYS最少有6個時鐘(實際上不止6個),分別爲HCLK_MSYS/PCLK_MSYS、HCLK_DSYS/PCLK_DSYS、HCLK_PSYS/PCLK_PSYS,再外加一個CPU要用的時鐘ARMCLK,總共7個時鐘頻率。MSYS,DSYS,PSYS分別管理不同的設備,爲不同的設備提供不同的頻率。

再往下翻,這些不同設備的頻率是如何產生的呢?由圖可知最後,總共有13個CLK提供出來。


由上圖可知,通過XOM[0]產生頻率,然後在APLL升頻,然後在分頻1時,有一個兩級分頻,然後,在分頻2又有一個8級分頻,最後,就可以輸出一個頻率,提供給S5PV210的ARM芯片使用,P356頁查到常用的CLK值,這裏我們的S5PV210的ARMCLK爲1000MHz。

-----------------------------------------------------------------

那麼,在硬件上是如何實現的呢?
觀察:
開發板上晶振有三顆,兩個24Hz,一個27Hz。(晶振,全名晶體振盪器,成份石英(二氧化硅),晶振用於通過壓電效應給CPU提出振盪頻率,再通過別的電路,將正弦曲線波轉換成方波,相當於CPU的起搏器,有了晶振,CPU纔有頻率輸出)。

CPU輸出24Hz頻率後,就需要把頻率放大。在頻率放大的過程中,首先需要考慮的一個問題就是----PPLphase-locked loop)鎖相環。

鎖相環(PLL: Phase-locked loops)是一種利用反饋(Feedback)控制原理實現的頻率相位的同步技術,其作用是將電路輸出的時鐘與其外部的參考時鐘保持同步。當參考時鐘的頻率相位發生改變時,鎖相環會檢測到這種變化,並且通過其內部的反饋系統來調節輸出頻率,直到兩者重新同步,這種同步又稱爲“鎖相”(Phase-locked)。

簡單的說,比如在CPU復位後默認工作頻率在400Hz,現在CPU輸出頻率變成了1000Hz了,使用鎖相環電路保證與CPU輸出頻率一致。

CPU第一次啓動時,PLL(鎖相環)有一個默認的初始值,芯片手冊找到P522頁,找到默認的初始頻率:
• APLL: M=200, P=6, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2(SDIV-1))) = 800MHz 
• MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2SDIV) = 667MHz 
• EPLL: M=80, P=3, S=3, K=0 FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV) = 80MHz


由上圖查出可知,ARMCLK的默認頻率爲400MHz


-----------------------------------------------------------------

查看芯片手冊的P356頁,查出總共有以下幾種由CMU輸出的時鐘
有四種PLLs(APLL,MPLL,EPLL,EPLL),還包括USB_OTG PHY clock。
To generate internal clocks, the following components are used.
• APLL uses FINPLL (refer to Figure 3-1) as input to generate 30MHz ~ 1GHz.
• MPLL uses FINPLL as input to generate 50MHz ~ 2GHz.
• EPLL uses FINPLL as input to generate 10MHz ~ 600MHz.
• VPLL uses FINPLL or SCLK_HDMI27M as input to generate 10MHz ~ 600MHz. This PLL generates 54MHz video clock.
• USB OTG PHY uses XUSBXTI to generate 30MHz and 48MHz
• HDMI PHY uses XUSBXTI or XHDMIXTI to generate 54MHz


常用的APLL/MPLL/EPLL/VPLL是幹什麼的呢?P448頁
• APLL: used to generate ARM clock
• MPLL: used to generate system bus clock and several special clocks
• EPLL: used to generate several special clocks
• VPLL: used to generate Video clocks. Usually, generates 54 MHz.


先查看APLL PMS的倍頻表
P357 S5PV210_UM_REV1.1.pdf -- Table 3-1. APLL PMS Value 



查看芯片手冊,設置P/M/S的bit,可以將頻率拉昇到我們想要的頻率。
那麼我們要設置升高頻,翻看手冊,P371頁,找到PLL CONTROL REGISTERS。
• (APLL_LOCK, R/W, Address = 0xE010_0000)
• (MPLL_LOCK, R/W, Address = 0xE010_0008)
• (EPLL_LOCK, R/W, Address = 0xE010_0010)
• (VPLL_LOCK, R/W, Address = 0xE010_0020) 


鎖相環中的鎖定時間就是指當頻率變化後,鎖相環重新同步該頻率的時間。

由芯片手冊上顯示APLL的lock time是30us,如果是晶振輸出的頻率是24MHZ,lock time是30毫秒,那麼PLL_LOCKTIME是720,也就是0x2D0


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章