从零开始基于S5PV210的嵌入式时钟系统的分析

时间:2024-04-14 14:12:46

从零开始基于S5PV210的嵌入式时钟系统的分析

                                                                                                                          --参考朱有鹏ARM裸机教程


1、什么是时钟?SOC为什么需要时钟?

(1)时钟是同步工作系统的同步节拍。

(2)SOC内部有很多器件,比如CPU、串口、DRAM控制器,GPIO等内部外设

这些东西要彼此协同工作,需要一个共同的时钟系统来指挥。

这些就是我们SOC的时钟系统。


2、时钟一般是如何获得的?

SOC时钟获得一般是由下面的几种方式获得:

1、外部直接输入时钟信号,SOC有一个引脚用来输入外部时钟信号,一般我们的51单片机

就是用这种方式进行的,也就是多个单片机都可以用这个晶振共同工作。

2、外部晶振+内部时钟发生器产生时钟,大部分单片机都是这么工作的。

3、外部晶振+内部时钟发生器+内部PLL产生的高频时钟+内部分频器分频得到的各种

频率的时钟。

(2)我们S5PV210属于第三种,为什么要这么设计?

第一问?为什么不使用外部高频的晶振产生高频信号直接给CPU?

主要是因为我们芯片外部电路不适于使用高频率,因为传导辐射比较难控制。

而且高频率的晶振非常贵。


第二问?为什么要内部先进行倍频,然后再分频,而不是先分频,然后再倍频?

因为我们SOC内部有很多部件都需要时钟,而且各自需要的时钟频率是不同的。

没有办法统一供应,因此设计思路:

先得到一个最高的频率,然后各个外设再根据自己需要的频率,通过分频器来进行分频。

因为倍频器比较难设计,分频器比较容易设计,所以使用这种方式。


3、时钟和系统性能的关系?

(1)一般SOC时钟频率都是可以人为控制编程,频率的高低对系统的性能有很大的影响。

(2)S5PV210建议工作频率在800MHZ~1000MHZ,一般我们设计主频为1GHZ。

如果你设计为1.2GHZ就叫做超频。

系统的性能会提升,但是发热也会增大,因此会影响系统的稳定性。


4、时钟和外设编程的关系?

每一个外设工作都需要一定频率的时钟,这些时钟都是由时钟系统提供的。

时钟系统可以通过编程来控制,因此我们程序员可以为每一个外设指定时钟的来源。

时钟分频来源,从而指定这个外设的工作时钟。


5、时钟和功耗控制的关系?

(1)SOC中各种设备工作时,时钟频率越高其功耗越大,发热越大。

越容易不稳定,需要外部的散热条件更加的苛刻。

(2)SOC内部有很多外设,这些外设不用的使用最好关掉(为什么需要关掉,因为会一定的浪费电)

也就是说我们给某个外设断掉时钟,他就不工作了。



6、S5PV210的时钟域的概念:

CLOCK DOMAIN

210的时钟的体系是非常复杂的:


1、时钟域:MSYS、DSYS、PSYS

(1)因为S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟

划分为3大块:

MSYS:

CPU内核:DRAM_CONCTROL(DMC0、DMC1各自接了256MB),IRAM、IROM


DSYS:

FIMC:视频编解码:HDMI,都是跟音视频有关的模块。

都是提供了硬件的解码器。


PSYS:

内部外设的意思:和内部的各种外设时钟有关,

串口,SD接口,I2C,AC97是用来连接声卡的,这些外设一般都是比较低速的。


联系:

51单片机:因为CPU的主频和其余外设是差不多快的,12MHZ

STM32103:一般是72MHZ,但是有些外设是运行不到这么快的,所以需要对

主频进行分频才能使用。

S5PV210:更多的外设,所以需要进行三级分类,使得每一种外设的时钟都能正常的工作。


7、时钟来源:晶振+时钟发生器
(1)S5PV210有4个晶振接口,我们设计板子硬件时可以根据需要来确定
在哪里接晶振,接了晶振之后,上电相应的模块就会产生晶振和原始的时钟。


原始时钟再经过一系列的刷选开关进行PLL电路生成倍频后的高频时钟。
高频时钟再经过分频到达我们芯片内部各模块上。


模块内部还有进一步的分频器,进行再一次的分频器进行再一次的分频。


XRTCXTI可以直接进入RTC,SYSTEM Timer


USB工作的时钟只能从XUSBXTI这个端口进来。
如果是0还是1的话,我们就可以知道MUS开关。


提供了4个锁相环的工作模式:
APLL、MPLL、VPLL、EPLL


APLL = 30MHZ~1GHz
MPLL = 50MHZ~2GHz
EPLL = 10MHZ~60MHZ


在标准的S5PV210的标准中,
APLL:Cortex-A8内核  MSYS域的重要的时钟。


MPLL&EPLL:DSYS和PSYS
VPLL: Video视频相关的模块。


8、时钟域详解:

从零开始基于S5PV210的嵌入式时钟系统的分析

MSYS域:
ARMCLK:给CPU内核工作的时钟,也就是我们平常工作的主频:
MOUT_MSYS/n
HCLK_MSYS: MSYS域的高频时钟: DMC0、DMC1使用
PCLK_MSYS:  MSYS域的低频时钟: 
HCLK_MSYS:  给IROM和IRAM(合称IMEM)使用

PSYS域:
HCLK_PSYS:高频时钟
PCLK_PSYS:低频时钟


总结:
我们210内部各个外设都是接在(内部AMBA总线)总线上面的
AMBA总线有一条高频分支叫做AHB
有一条低频分支叫做APB:上面的各个域都有各自对应的HCLK_XXx
和PCLK_XXX,其中HCLK_XXX是XXX这个域中AHB总线的工作频率;
PCLK_XXX这个域中APB总线的工作频率。


SOC内部的各个外设其实是挂在总线上工作的,也就是说,这个外设的时钟来自于
它挂载的总线。譬如我们这个串口UART挂在我们PSYS域下的APB总线上。


因此串口的时钟来源是PCLK_PSYS。
我们可以分析记住和分析上面的时钟域和总线的数值,来确定我们各个外设的具体时钟的频率。


各种时钟的典型值(默认值,IROM中设置的值)
IROM内部设置的典型值:


当210刚上电时,默认是外部晶振+内部时钟发生器产生的24MHZ频率的时钟
直接给ARMCLK的,
这时候的主频就是24MHZ,运行非常慢。


IROM代码执行时,第6步中初始化了时钟系统,这时候给
系统一个默认推荐的运行频率,这个时钟频率是三星推荐的值。
210工作性能稳定性和稳定性最佳的频率。


UBOOT里面也是重新设置了一遍:
(3)各时钟的典型值:
我们自己设置时钟就是按照这个时钟来设置。


freq(ARMCLK)     = 1000MHz
freq(HCLK_MSYS)  =  200MHz
freq(HCLK_IMEM)  =  100MHz
freq(PCLK_MSYS)  =  100MHz
freq(HCLK_DSYS)  =  166MHz
freq(PCLK_DSYS)  =  83MHZ
freq(HCLK_PSYS)  =  133MHz
freq(PCLK_PSYS)  =  66MHz
freq(SCLK_ONENAND) = 133Mhz,166Mhz