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

S5pv210 时钟APLL,VPLL,EPLL分析 

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
S5pv210 时钟APLL,VPLL,EPLL分析
0 {% h  w9 X( j3 s, g2 ?' z

0 E1 I7 b! ^7 {( Z5 l. ^6 _3 o
U-BOOT在启动的过程中,需要配置系统时钟。配置系统时钟,大概是以下几个步骤:( _) Y4 p+ B; F7 Q( i
(1)设置系统PLL锁定时间1 b$ _  l0 j+ X/ u! g, ^  z
(2)配置PLL, h! v$ y' i' t1 z0 A
(3)配置各模块分频系数
9 z1 y; [1 m9 b6 R$ A- D$ H(4)切换到PLL时钟# |/ y! H3 X' y3 t$ A

* p$ N, h. D% h  E, d1.基本原理& ~6 @" u5 ?1 J8 o) a+ p. A  @  h
首先输出一个高电平,然后,通过三个晶振,输出一个频率,然后,通过倍频器(锁相环),将频率升高,然后,再通过分频,把分出来的不同的频率,提供给不同的器件,比如ARM Cotrex内核、各种设备控制器等等。  O/ O. Z$ K" ]) f( Q" j+ F
Tiny210(S5PV210)上蓝色的框标注的就是晶振的位置,最上面的是27MHz,中间和下面两颗是24MHz,顺便讲一下另外几片东西,最左边的四片是内存DDR2-800,这表示数据传输频率为800MHz,外部时钟频率200MHz,内部时钟频率为100MHz;下面的黄色框是NAND FLASH,外部时钟频率133MHz。" s  @! Z- t* G5 I

& M; d  e. A1 M. e1 s2 j8 u! g- C # V  b: K0 }% r# w' g
: L9 }0 T9 H; O9 Q% H+ X9 R
倍频的原理:
9 u$ Z: I3 G3 T下图就是上电后的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毫秒)。
; Y9 w0 A) {( j4 L, f& A5 L4 z' q0 D; ~6 R# G' h0 \6 W4 O$ e

1 H& ~* _* @; M; s锁定频率后,此时,应该设置一个倍频因子,在ARM手册中去查表10.2,P,M,S, 设置对应的位的值,然将频率提升,比如从晶振输出的24MHz,抬升到1000MHz(S5PV210的CPU旁边有三个晶振,两个24MHz, 一个27MHz)。
( _/ W2 B, ]  c0 Q. R, ^( _
/ C, a* b& u: s& w$ _4 H5 p: e3 F) J分频的原理:
& m4 i9 ?- |, s8 B. b6 W设置不同的位,比如,设置某一位为0,那么,分频时,原来频率比如为1000HZ,那么频率就被分为1000/1=1000Hz, 这样就可以分给ARMCLK使用。
  j" k2 m9 O1 K" h: j3 H
$ R  _* g; Q8 e- T5 J, ?2.开始分析% P( Z+ _2 O% z4 f# j3 Y
. l5 g, j; O2 ^' M! O
/ a+ \6 ^* ^3 }0 h
8 f6 Y' Y! G8 m2 N9 W
S5PV210的Clock分为三个domain,意思是三个区域--MSYS,DSYS,PSYS,这三个区域分别都是AMBA总线,AMBA总线分为AHB和APB两种总线(这是不严格的分法,仅仅是便于理解),每种总线都有不同的时钟频率,AHB--HCLK/APB--PCLK
. ]8 [4 ]" J3 `; @/ I% `* k( o: R& A. H2 J那么MSYS,DSYS,PSYS最少有6个时钟(实际上不止6个),分别为HCLK_MSYS/PCLK_MSYS、HCLK_DSYS/PCLK_DSYS、HCLK_PSYS/PCLK_PSYS,再外加一个CPU要用的时钟ARMCLK,总共7个时钟频率。MSYS,DSYS,PSYS分别管理不同的设备,为不同的设备提供不同的频率。
4 L9 h; R; ^. n- E0 ^- _7 X, T$ Y+ j3 \# q+ \
6 Z6 g$ ?+ N: ^- O: L8 e* o" D
8 {% ^) D7 J: F$ l' a
再往下翻,这些不同设备的频率是如何产生的呢?由图可知最后,总共有13个CLK提供出来。
9 p8 k- O, ~2 w6 S7 m8 q. U, Q' L5 V& S8 `
+ I' B8 v: O9 q3 k1 N

: ?  ^) ?5 T1 y5 b/ d7 N& ^由上图可知,通过XOM[0]产生频率,然后在APLL升频,然后在分频1时,有一个两级分频,然后,在分频2又有一个8级分频,最后,就可以输出一个频率,提供给S5PV210的ARM芯片使用,P356页查到常用的CLK值,这里我们的S5PV210的ARMCLK为1000MHz。
$ l- I0 s! J; Q那么,在硬件上是如何实现的呢?) O$ G) r; v9 o% y8 x7 j
观察:
0 o$ t4 z; l# ]# g开发板上晶振有三颗,两个24Hz,一个27Hz。(晶振,全名晶体振荡器,成份石英(二氧化硅),晶振用于通过压电效应给CPU提出振荡频率,再通过别的电路,将例如正弦曲线波转换成方波,相当于CPU的起搏器,有了晶振,CPU才有频率输出)。
/ v2 ^& {- V+ E5 ?CPU输出比如24Hz频率后,此时,就需要把频率放大了(否则CPU才24Hz的频率能干吗呢?),在频率放大的过程中,首先需要考虑的一个问题就是----phase-locked loop锁相环。简单的说,比如复位后,CPU默认工作频率在400Hz,现在需要升到1000Hz工作,那么从400-->1000Hz需要一个过程,假设为时间t1,在t1这段时间内,CPU的频率是变化的,那么CPU的状态就是不稳定的,此时,就需要把频率锁定,设置锁定时间,直到CPU稳定的输出频率。
( @% H+ k; _# m  Z+ `/ NCPU第一次启动时,PLL有一个默认的初始值,芯片手册找到P522页,找到默认的初始频率:
0 Q! [; y+ }6 l• APLL: M=200, P=6, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2(SDIV-1))) = 800MHz
) ]  e) B$ W, r4 p) r• MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2SDIV) = 667MHz ( ^8 \% K- j* T& F: Y1 L2 u% z! E
• EPLL: M=80, P=3, S=3, K=0 FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV) = 80MHz 3 q$ z/ p# @; j8 ]
3 D" X+ C8 s5 ]3 o, y- E

% a9 w( f4 i. f; {7 J$ T  A$ `- E0 I* ]; |( r5 G
由上图查出可知,ARMCLK的默认频率为400MHz) a- I  Y* @  n

! _8 e# C* w, c+ `# z  x8 K
" |2 v. ]+ }, f* F- K1)查看芯片手册的P356页,查出总共有以下几种由CMU输出的时钟
: L! s3 A1 W2 f" m$ I有四种PLLs(APLL,MPLL,EPLL,HPLL),还包括USB_OTG PHY clock。
2 ~/ G, A* ~; g* V- P5 YTo generate internal clocks, the following components are used.. l+ @: e3 `+ q& Z1 r+ f# e8 ^
• APLL uses FINPLL (refer to Figure 3-1) as input to generate 30MHz ~ 1GHz.
; P& J) ?! w  ]% J3 Q/ x, S• MPLL uses FINPLL as input to generate 50MHz ~ 2GHz.& S& ^# i! \% ^  n3 Q
• EPLL uses FINPLL as input to generate 10MHz ~ 600MHz.4 S* n* f( G4 A3 }+ _2 L+ Z  o
• VPLL uses FINPLL or SCLK_HDMI27M as input to generate 10MHz ~ 600MHz. This PLL generates 54MHz video clock.
) U% f5 c5 g8 ]* l! d• USB OTG PHY uses XUSBXTI to generate 30MHz and 48MHz
+ a" x! U5 v% y. I7 N  ^! f* m• HDMI PHY uses XUSBXTI or XHDMIXTI to generate 54MHz1 S- l6 I9 q" p
常用的APLL/MPLL/EPLL/VPLL是干什么的呢?P448页
: m. l* }* A5 t' [8 R$ \1 b5 o7 f• APLL: used to generate ARM clock
: x$ u' {. y- s2 d7 e• MPLL: used to generate system bus clock and several special clocks& o! s  P. @4 H: Q  y( d
• EPLL: used to generate several special clocks, Z# R7 A) ~8 @, K8 O2 G( |
• VPLL: used to generate Video clocks. Usually, generates 54 MHz.
! B2 w! p2 m/ d- ^  O2 R
+ C* V# L9 @& c7 B; u5 s4 O# C" Q0 z  a! x: x
2)先查看APLL PMS的倍频表
6 e# I1 j% h" F  N$ n$ hP357 S5PV210_UM_REV1.1.pdf -- Table 3-1. APLL PMS Value 4 H- U/ d( u& b' I7 \, u5 c7 i* |4 I& ^
( u: H# w3 z$ l6 c9 V$ g5 G! O7 s$ w

( Z. q% @' E1 E3 V6 G% H" r5 v: m( Z. M+ H
查看芯片手册,设置P/M/S的bit,可以将频率拉升到我们想要的频率。0 P% N* i  T3 j# y% h# c, W
那么我们要设置升高频,翻看手册,P371页,找到PLL CONTROL REGISTERS。
& A2 ^+ V/ Q" Z& B) U• (APLL_LOCK, R/W, Address = 0xE010_0000)2 ]7 B& m+ ^5 G
• (MPLL_LOCK, R/W, Address = 0xE010_0008)
0 ^& `7 D: \- t7 Q# ~! F% g: X• (EPLL_LOCK, R/W, Address = 0xE010_0010)8 c& B4 o5 \! X- j
• (VPLL_LOCK, R/W, Address = 0xE010_0020) , Q* O0 S, ~8 ]6 U! O2 {+ u6 I
1 d5 p  ?8 Z: O% K
# M$ b4 Z9 Y8 C' v1 n, l
+ z7 U( I( ^" @9 s! B- M- a
由芯片手册上显示APLL的lock time是30us,如果是晶振输出的频率是24MHZ,lock time是30毫秒,那么PLL_LOCKTIME是720,也就是0x2D0。OK,下一篇开始结合u-boot的源码来分析如何配置系统时钟。
* m3 I# }# `3 V# r, O( A: W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 16:39 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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