找回密码
 注册
关于网站域名变更的通知
查看: 567|回复: 1
打印 上一主题 下一主题

S5pv210 时钟APLL,VPLL,EPLL分析 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-24 09:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
S5pv210 时钟APLL,VPLL,EPLL分析

' @+ Y: e0 w4 r) I; G- ^, A
! r! r+ \3 b2 }# c
U-BOOT在启动的过程中,需要配置系统时钟。配置系统时钟,大概是以下几个步骤:
. C7 G. T( x  r9 d(1)设置系统PLL锁定时间
( A  U" F  M4 Q% Q9 |$ K: A(2)配置PLL6 E0 H4 q0 |0 q, V) u3 a8 z; ~4 z
(3)配置各模块分频系数
* b3 r2 g, H; c0 @(4)切换到PLL时钟4 p( _+ V; S2 U
* ~% D) j0 @/ b0 I8 q
1.基本原理
! c! W" V3 Y: z7 g1 z首先输出一个高电平,然后,通过三个晶振,输出一个频率,然后,通过倍频器(锁相环),将频率升高,然后,再通过分频,把分出来的不同的频率,提供给不同的器件,比如ARM Cotrex内核、各种设备控制器等等。7 g8 f# t! z; q* d& m
Tiny210(S5PV210)上蓝色的框标注的就是晶振的位置,最上面的是27MHz,中间和下面两颗是24MHz,顺便讲一下另外几片东西,最左边的四片是内存DDR2-800,这表示数据传输频率为800MHz,外部时钟频率200MHz,内部时钟频率为100MHz;下面的黄色框是NAND FLASH,外部时钟频率133MHz。
% Z- ~1 `" V; {% P# X
$ K. o0 ~. K6 I 6 t) P6 F/ T+ N& z5 B. Y

# ]4 Q5 m+ D) h3 o0 |倍频的原理:4 b" N, ~  t$ j
下图就是上电后的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毫秒)。
' j+ s4 z. t1 b( s( O) O1 Q2 Q4 `  {, N  x( O" ?

' D3 {/ q- i6 S2 w锁定频率后,此时,应该设置一个倍频因子,在ARM手册中去查表10.2,P,M,S, 设置对应的位的值,然将频率提升,比如从晶振输出的24MHz,抬升到1000MHz(S5PV210的CPU旁边有三个晶振,两个24MHz, 一个27MHz)。
, l  ?, a+ }! [6 W+ H# k
! _& m4 ~7 C7 ^4 B! x分频的原理:9 f8 k  l: X8 l7 P
设置不同的位,比如,设置某一位为0,那么,分频时,原来频率比如为1000HZ,那么频率就被分为1000/1=1000Hz, 这样就可以分给ARMCLK使用。* O+ J% b9 w* h- }- l2 _* G

* ?; j7 i" b* V* }+ g1 m) _, Z2.开始分析7 x6 ?7 ?# A5 L3 P4 h2 c4 H$ u
7 V( e0 O: U( t1 ]; V7 X  X
" \4 w+ T2 g) b
) l( a/ P$ a; C: ?9 B( l
S5PV210的Clock分为三个domain,意思是三个区域--MSYS,DSYS,PSYS,这三个区域分别都是AMBA总线,AMBA总线分为AHB和APB两种总线(这是不严格的分法,仅仅是便于理解),每种总线都有不同的时钟频率,AHB--HCLK/APB--PCLK% [! ~2 |. S* Q7 C1 j8 r! [
那么MSYS,DSYS,PSYS最少有6个时钟(实际上不止6个),分别为HCLK_MSYS/PCLK_MSYS、HCLK_DSYS/PCLK_DSYS、HCLK_PSYS/PCLK_PSYS,再外加一个CPU要用的时钟ARMCLK,总共7个时钟频率。MSYS,DSYS,PSYS分别管理不同的设备,为不同的设备提供不同的频率。
% v# w7 X/ a3 P6 Y+ [" L1 K0 D; k7 s$ ~+ S0 }8 I/ X/ o& |  |# y& d

2 i3 I9 p& W2 Z' e  \- g: L) J, D* O& W8 Z
再往下翻,这些不同设备的频率是如何产生的呢?由图可知最后,总共有13个CLK提供出来。1 W0 f  l! i4 U0 C( a  L8 i
7 ~. A' ^4 o$ d: f0 x% `

3 z/ N1 E6 J- z: y  T* e3 U" A( S. U' L( F5 }
由上图可知,通过XOM[0]产生频率,然后在APLL升频,然后在分频1时,有一个两级分频,然后,在分频2又有一个8级分频,最后,就可以输出一个频率,提供给S5PV210的ARM芯片使用,P356页查到常用的CLK值,这里我们的S5PV210的ARMCLK为1000MHz。
/ @' X+ w2 `5 [8 }那么,在硬件上是如何实现的呢?. v- h2 N; |1 [
观察:4 m. B0 Q, [' Z  p7 v0 I, b( e
开发板上晶振有三颗,两个24Hz,一个27Hz。(晶振,全名晶体振荡器,成份石英(二氧化硅),晶振用于通过压电效应给CPU提出振荡频率,再通过别的电路,将例如正弦曲线波转换成方波,相当于CPU的起搏器,有了晶振,CPU才有频率输出)。. s0 q4 ?0 D2 u9 H2 l0 r8 I
CPU输出比如24Hz频率后,此时,就需要把频率放大了(否则CPU才24Hz的频率能干吗呢?),在频率放大的过程中,首先需要考虑的一个问题就是----phase-locked loop锁相环。简单的说,比如复位后,CPU默认工作频率在400Hz,现在需要升到1000Hz工作,那么从400-->1000Hz需要一个过程,假设为时间t1,在t1这段时间内,CPU的频率是变化的,那么CPU的状态就是不稳定的,此时,就需要把频率锁定,设置锁定时间,直到CPU稳定的输出频率。
2 K: ^$ |" G9 J% g& u! ^: I6 wCPU第一次启动时,PLL有一个默认的初始值,芯片手册找到P522页,找到默认的初始频率:
/ A- L2 ]9 }. \3 |• APLL: M=200, P=6, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2(SDIV-1))) = 800MHz . g; n# n* I) d# C3 `
• MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2SDIV) = 667MHz
5 v9 `: ?/ r: j7 ^, m• EPLL: M=80, P=3, S=3, K=0 FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV) = 80MHz
+ K6 V- _' a; W" i
' U+ ~1 L) \# U/ M4 F , o0 n* |' c! A4 N$ y1 E( j+ o+ \
' L$ G& L$ k  U; x" x
由上图查出可知,ARMCLK的默认频率为400MHz( y# J, p2 v2 d& D& X9 w

/ G2 h$ q( |3 z+ o; _9 D6 d0 c4 |& u
1)查看芯片手册的P356页,查出总共有以下几种由CMU输出的时钟9 E5 N' x7 @5 K8 {, ~+ m
有四种PLLs(APLL,MPLL,EPLL,HPLL),还包括USB_OTG PHY clock。
" ]* {8 i( y# BTo generate internal clocks, the following components are used.3 g& j% {7 c, ?1 V
• APLL uses FINPLL (refer to Figure 3-1) as input to generate 30MHz ~ 1GHz.
1 U2 m. @/ z$ [& Q• MPLL uses FINPLL as input to generate 50MHz ~ 2GHz.4 d6 E! L# c7 K0 G: P/ R0 R  }
• EPLL uses FINPLL as input to generate 10MHz ~ 600MHz.  O" M; _; L7 y! g5 V5 [$ H
• VPLL uses FINPLL or SCLK_HDMI27M as input to generate 10MHz ~ 600MHz. This PLL generates 54MHz video clock.- P5 b+ c3 E$ R$ w/ k( }
• USB OTG PHY uses XUSBXTI to generate 30MHz and 48MHz
3 G4 }# ~1 S  b  h. Z: i8 r* c• HDMI PHY uses XUSBXTI or XHDMIXTI to generate 54MHz$ z: ~2 o4 P' r- w7 U) O9 D4 @
常用的APLL/MPLL/EPLL/VPLL是干什么的呢?P448页
' g, B$ e9 p  w( P- D• APLL: used to generate ARM clock9 V# t/ z3 C8 E  @- e
• MPLL: used to generate system bus clock and several special clocks' C. R' \/ B& e* @: k
• EPLL: used to generate several special clocks
; K& C6 O5 ]) T, m) i- E$ i3 h• VPLL: used to generate Video clocks. Usually, generates 54 MHz.+ H8 [# q' S; G
, h8 I$ a8 @/ ~# d0 x; |' Z) w# q

# I4 Y; a/ {5 k7 i. d2)先查看APLL PMS的倍频表6 p* {: C$ T7 Y/ j
P357 S5PV210_UM_REV1.1.pdf -- Table 3-1. APLL PMS Value
! _8 `- u1 U6 n! Q3 J3 ~4 F4 g
& B# J1 w4 K6 e; J ! v' B! z: H2 u; T! \; U1 d! Z, k

( l. u- f( T$ k查看芯片手册,设置P/M/S的bit,可以将频率拉升到我们想要的频率。
* r* B6 _' H4 b7 R) m, L8 c那么我们要设置升高频,翻看手册,P371页,找到PLL CONTROL REGISTERS。! G' I0 z" C7 \' R8 ^) c" L
• (APLL_LOCK, R/W, Address = 0xE010_0000)! y* g  r! J1 N
• (MPLL_LOCK, R/W, Address = 0xE010_0008)" K+ f* b: o3 i2 o" k
• (EPLL_LOCK, R/W, Address = 0xE010_0010)
1 P/ u* x( ^, T, r+ J0 M, X  ~% f• (VPLL_LOCK, R/W, Address = 0xE010_0020)
- t# q0 b8 ]$ A! q7 a3 N1 v% |0 q0 Q6 W* k3 R, z7 o
, g+ v6 s8 [# k" c. s
9 Q. v4 d, A, L  `; ~* o
由芯片手册上显示APLL的lock time是30us,如果是晶振输出的频率是24MHZ,lock time是30毫秒,那么PLL_LOCKTIME是720,也就是0x2D0。OK,下一篇开始结合u-boot的源码来分析如何配置系统时钟。

8 \9 i4 y1 p, m

该用户从未签到

2#
发表于 2018-12-24 10:52 | 只看该作者
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-13 02:16 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表