什么是时钟?SoC为什么需要时钟?
- 时钟是同步工作系统的同步节拍
- SoC内部有很多器件,如CPU、串口、DRAM控制器、GPIO等内部外设,这些东邪要彼此协同工作,需要一个同步的时钟系统来指挥。这个就是我们SoC的时钟系统。
时钟如何获得
- 外部直接输入时钟信号,SoC有一个引脚用来输入外部时钟信号。
- 外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。
- 外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器得到各种频率的时钟,210属于这种
S5PV210为什么这么设计?
- 主要是因为芯片外部电路不适宜使用高频率,因为传导辐射比较难控制
- 高频率的晶振太贵了
为什么要内部先高频在分频?
主要是因为SoC内部有很多部件都需要时钟,而且各自需要的时钟频率不同,没法统一供应。因此设计思路是PLL后先得到一个最高的频率,然后各个部件都有自己的分频器再来得到自己想要的频率。
时钟和系统性能的关系、超频、稳定性
- 一般SOC时钟频率都是可以人为编程控制的,频率的高低对系统性能有很大影响。
- S5PV210建议工作频率800MHz~1.2GHz,一般我们都设置到1GHz主频。如果你设置到1.2GHz就叫超频。超频的时候系统性能会提升,但是发热也会增大,因此会影响稳定性。
时钟与外设的关系
- 每个外设工作都需要一定频率的时钟,这些时钟都是由时钟系统提供的,时钟系统可以编程控制工作模式,因此我们程序员可以为每个外设指定时钟来源、时钟分频系统、从而制定这个外设的工作时钟。
S5PB210时钟简介
- MSYS:CPU、DRAM控制器、IRAM&IROM
- DSYS:都是和视频现实编解码等相关的模块
- PSYS:和内部各种外设时钟有关,比如串口、I2C、AC97、USB等
- 为什么内部要分为3个域?因为210内部的这些模块彼此工作时钟速率差异太大了,所以有必要把高速的放在一起,相对低速的放一起。
S5PB210时钟来源:晶振+时钟发生器+PLL
- 210外部有4个晶振接口,设计电路板硬件时可以根据需求来决定在哪里接晶振。接了晶振之后上电相应的模块就能产生震荡,产生原始时钟。原始时钟再经过一系列筛选开关进入相应的PLL电路生成倍频后的高频时钟。高频时钟再经过分频达到芯片内部各个模块。
PLL:APLL、MPLL、EPLL、VPLL
- APLL:Cortex-A8内核、MSYS域
- MPLL & EPLL:DSYS、PSYS
- VPLL:Vedio视频相关模块
S5PV210时钟域详解
MSYS域
- ARMCLK:给CPU内核工作的时钟,也就是所谓的主频
- HCLK_MSYS:MSYS域的高频时钟,给DMC0和DMC1使用
- PCLK_MSYS:MSYS域的低频时钟
- HCLK_IMEM:给IROM & IRAM
DYSY域
- HCLK_DSYS:DSYS域的高频时钟
- PCLK_DSYS:DSYS域的低频时钟
PSYS域
- HCLK_PSYS: PSYS域的高频时钟
- PCLK_PSYS: PSYS域的低频时钟
- SCLK_ONENAND:
总结:210内部的各个外设都是接在(内部AMBA总线)总线上面的,AMBA总线有一条高频分支叫AHB,有一条低频分支APB。上面的各个域都有各自对应的HCLK和PCLK,其中HCLK就是该域中AHB总线的工作频率;PCLK就是该域中APB总线的工作频率。
SOC内部的各个外设其实是挂在总线上工作的,也就是说这个外设的时钟来自于它挂在的总线,如串口就挂在PSYS下的APB总线上,因此串口的时钟来源是PCLK_PSYS。
各个时钟的默认值
- 当210刚上电时,默认是外部晶振+内部发生器产生的24MHz频率的时钟直接给ARMCLK的,这时系统的主频就是24MHz,运行非常慢。
- IROM代码执行时第6步中初始化了时钟系统,此时给了系统一个默认推荐运行频率。这个时钟频率时三星推荐的210工作性能和稳定性最佳的频率。
• freq(ARMCLK) = 1000 MHz
• freq(HCLK_MSYS) = 200 MHz
• freq(HCLK_IMEM) = 100 MHz
• freq(PCLK_MSYS) = 100 MHz
• freq(HCLK_DSYS) = 166 MHz
• freq(PCLK_DSYS) = 83 MHz
• freq(HCLK_PSYS) = 133 MHz
• freq(PCLK_PSYS) = 66 MHz
• freq(SCLK_ONENAND) = 133 MHz, 166 MHz