一、引子
在上一篇文章 U-Boot详细分析(2)——Exynos4412启动过程中可以看到,BL2程序流程图中有SET CLOCK’s这一步骤, 并且在U-Boot源码的 board/samsung/smdkc210/lowlevel_init_SCP.S的文件中也有着对时钟初始化的相关代码(因为BL2中已经初始化,所以不一定会执行)
这篇文章通过U-Boot中对时钟进行初始化的源码和三星提供的4412的datasheet来学习Exynos 4412的时钟体系结构和时钟的相关操作
二、Exynos 4412的时钟体系结构
在Exynos 4412的datasheet里第七章“时钟管理单元(Clock Management Unit)”详细介绍了4412的时钟体系结构
2.1 时钟域
首先可以看一下Exynos 4412 SCP的总框图:
- 从总框图可以看到4412内不仅有着多核处理器,而且有着音频视频接口、GPS、内存管理模块等等片上资源
- 而这些不同的模块工作频率也大多不同,所以一个时钟显然不方便去满足所有的工作频率,所以在4412中采用了多个时钟域
下图是Exynos 4412 SCP的时钟域图:
- CPU_BLK:包含Cortex-A9 MPCore处理器,L2 cache控制器和CoreSight;CMU_CPU(即CPU模块内的时钟管理单元)用来给CPU block中部件产生时钟
- DMC_BLK:包含内存控制器(DMC)、安全子系统(SSS),中断控制器(GIC);CMU_DMC为这些部件产生时钟
- LEFTBUS_BLK and RIGHTBUS_BLK:全局数据总线,用来在DRAM和子功能模块之间传播数据
- function blocks:包括G3D, MFC, LCD0, ISP, CAM,
TV, FSYS, MFC, GPS, MAUDIO, PERIL, 和PERIR;这些功能模块的时钟由CMU_TOP产生
2.2 时钟源
在4412的datasheet中可找到
The top-level clocks in Exynos 4412 SCP are:
- Clocks from clock pads, namely, XRTCXTI, XXTI, and XUSBXTI.
- Clocks from CMUs
- Clocks from USB PHY
- Clocks from HDMI_PHY
- Clocks from GPIO pads
从第一个"clocks from clock pads…"可以看到顶层的时钟包括着三个时钟引脚,分别是:
- XRCXTI:接32.768KHz的晶振,用于RTC
- XXTI:接12MHz ~ 50MHz的晶振,用于测试,可以不接但要接GND
- XUSBXTI:需要接24MHz的晶振,向系统提供时钟输入源
打开讯为提供的Exynos 4412的原理图,可以看到XUSBXTI接了24MHz的晶振,XXTI接地:
2.3 PLL(锁相环)
刚才可以看到XUSBXTI接了24