OK6410A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system clock

system clock 的设置 主要参与的寄存器
	 归属 3 SYSTEM CONTROLLER
	 范围 0x7E00_F000 0x7E00_FFFF
S3C6410的时钟

																|---APLL---------ARMCLK   --- 用于 CPU
																|
外部晶振(XTIPLL)+内部的OSC(振荡器) 	|      0				    |		  	|----HCLK 	  --- 用于 AXI/AHB 总线外设
									|---OM[0]--- 主时钟	----    |---MPLL----|
外部时钟(EXTCLK)						|	   1				    |			|----PCLK 	  --- 用于 APB 总线外设
																|
																|---EPLL---------AUDIOCLK --- 用于 UART/IIC/IIS/AUDIO 外设


在 s3c6410 中 uart/iic/iis挂载了 apb 下

// ok6410a  OM[0] 为 0
// ok6410a 晶振 是下面的 X1
// 参考 s3c6410 datasheet P110
X1 : 12Mhz XTO XTI
X2 : 27Mhz 27MXTO 27MXTI
X3 : 48Mhz OTGTI OTGTO
X5 : 32.768Khz RTCXTO RTCXTI
PLL可产生高达1.6GHz的高频时钟信号。

S3C6410X的ARM1176处理器最高可运行667MHz。
	工作频率可由the internal clock divider, DIV ARM,无需改变PLL频率。divider ratio 可 在116之间变化。

内部IP连接到适当的总线系统,以满足其I/O带宽和操作性能。
当它们连接到AXI总线或AHB总线时,工作速度最高可达133MHz。
当它们连接到APB总线时,最大工作速度可达66MHz。
此外,AHB和APB之间的总线速度对同步数据传输有很高的依赖性。

HCLKX2时钟提供给S3C6410X的两个DDR控制器DDR0和DDR1。
通过DDR控制器发送和接收数据的工作速度最高可达266MHz。


Chapter 3 System Controller // 两部分 System Clock Control & System Power-management Control
	3.1 OVERVIEW P120
	3.2 FEATURES P121
	3.3 FUNCTIONAL DESCRIPTION P121
		3.3.1 HARDWARE ARCHITECTURE P121
		3.3.2 CLOCK ARCHITECTURE P122
		3.3.3 CLOCK SOURCE SELECTION P123
		3.3.4 PHASE LOCKED LOOP (PLL)
		3.3.5 SYNCHRONOUS 667MHZ OPERATING MODE P129
		3.3.6 LOW POWER MODE OPERATION P131
		3.3.7 MISCELENEOUS. P138
	3.4 REGISTER DESCRIPTION P138
		3.4.1 MEMORY MAP
		3.4.2 INDIVIDUAL REGISTER DESCRIPTIONS P141

CLK 相关U-boot 代码
  • spl
./board/samsung/ok6410a/lowlevel_init.S
	// 提供 clock(uart) 的set 操作
./drivers/serial/s3c64xx_serial.c
	// 串口在 PCLK上
	// 串口的时钟
./lib/time.c
	// 提供ARM core 的 tick rate
	// 和 ARM core 的 时钟 相关
./arch/arm/mach-s3c64xx/timer.c
	// 定时器在 PCLK上
	// 根据 PLCK 初始化定时器
	// 提供delay函数
./arch/arm/mach-s3c64xx/clock.c
	// 提供 U_BOOT_DRIVER(ok6410_clock)
	// 提供 clock(ARMCLK HCLK PLCK) 和 clock(uart) 的 get 操作
./board/samsung/ok6410a/ok6410a.c
	// 提供 spl 中 clock(uart) 的相关寄存器的 计算工作
	
  • u-boot
./board/samsung/ok6410a/lowlevel_init.S
	// 调用 system_clock_init 提供 clock(APLL_LOCK/MPLL_LOCK/EPLL_LOCK)的 set 操作
./drivers/serial/s3c64xx_serial.c
	// 串口在 PCLK上
	// 串口的时钟
./lib/time.c
	// 提供ARM core 的 tick rate
	// 和 ARM core 的 时钟 相关
./arch/arm/mach-s3c64xx/timer.c
	// 定时器在 PCLK上
	// 根据 PLCK 初始化定时器
	// 提供delay函数
./arch/arm/mach-s3c64xx/clock.c
	// 提供 U_BOOT_DRIVER(ok6410_clock)
	// 提供 clock(ARMCLK HCLK PLCK) 和 clock(uart) 的 get 操作


./drivers/clk/clk_fixed_rate.c
	// 提供 U_BOOT_DRIVER(fixed_clock)
./drivers/clk/clk_fixed_factor.c
	// 提供 U_BOOT_DRIVER(clk_fixed_factor)
./drivers/clk/clk-uclass.c
	// 提供 UCLASS_DRIVER(clk)
./drivers/core/device.c
	// 提供的 device_probe 调用了 clk_set_defaults 为设备提供 正确的时钟
./common/board_f.c
	// init_sequence_f 提供了 get_clocks 和 board_postclk_init
./common/board_r.c
	// init_sequence_f 提供了 set_cpu_clk_info
./drivers/mmc/s3c64xx_sdhci.c
	// 提供了 U_BOOT_DRIVER(s3c64xx_sdhci_drv)
	// mmc 挂载 apb上,用PCLK
	// 提供了 clk 的 set 和 enable 和 get
./drivers/mmc/mmc.c
./drivers/mmc/sdhci.c
核心(PLL及ARMCLK/PCLK/HCLK)CLK的设置者
u-boot 阶段 board/samsung/ok6410a/lowlevel_init.S 中 的 system_clock_init


基址		: 0x7E00_F000
偏移		: 例如 0x900

system_clock_init
	900
		bit[6] set 1 : SYNCMUXSEL
			SYS CLOCK SELECT IN CMU :DOUT APLL
		bit[7] set 1 : SYNCMODE
			SYNCMODEREQ to ARM
		bit[11:8] : SYNCACK
			wait SYNC mode acknowledge (Read Only) change to 0b1111 
	00 : APLL_LOCK
		set 0xFFFF
		Required period to generate a stable clock output : 0xFFFF
	04 : MPLL_LOCK
		set 0xFFFF
		Required period to generate a stable clock output : 0xFFFF
	08 : EPLL_LOCK
		set 0xFFFF
		Required period to generate a stable clock output : 0xFFFF
	200 bit[15:0]
		
		ARMCLK:
		(1<<4)MPLL_RATIO:1
			DOUT_mpll = MOUT_mpll(或者DOUT_apll) / (MPLL_RATIO + 1)
		(0)ARM_RATIO:0
			ARMCLK = DOUT_apll / (ARM_RATIO + 1)

		PCLK:
		(1<<9)HCLKX2_RATIO:1
			// HCLKX2_in 是什么 ,不知道 
			HCLKX2 = HCLKX2_in / (HCLKX2_RATIO + 1)
		(1<<8)HCLK_RATIO:1
		   	// HCLKX2 应该就是 DOUT_mpll
			HCLK = HCLKX2 / (HCLK_RATIO + 1)
		(3<<12)PCLK_RATIO:3
			PCLK = HCLKX2 / (PCLK_RATIO + 1)
	0c : APLL_CON
		(1<<31)
			APLL enable 
		(266<<16)
			PLL M divide value:266
		(3<<8)
			PLL P divide value :3
		(1)
			PLL S divide value : 1
	10 : MPLL_CON
		(1<<31)
			MPLL enable 
		(266<<16)
			PLL M divide value:266
		(3<<8)
			PLL P divide value :3
		(1)
			PLL S divide value : 1
	14 : EPLL_CON0
		(1<<31)
			EPLL enable 
		(24<<16)
			PLL M divide value:24
		(3<<8)
			PLL P divide value :3
		(0)
			PLL S divide value : 1
	18 : 
		(0)
			PLL K divide value : 0
	1c : CLK_SRC
		bit[2:0] set 0b111
			Control MUX EPLL : FOUT EPLL
			Control MUX MPLL : FOUT MPLL
			Control MUX APLL : FOUT APLL
	delay

	return
  • ok6410a u-boot 中时钟现状
    在这里插入图片描述
消费者
总线(AXI/AHB/APB)上的设备 clk 的设置和开关
定时器提供的delay
软件中的节拍(tick rate)
打印信息
OK++Z-gUut

U-Boot 2021.01-15955-g9f70b17-dirty (Mar 30 2021 - 16:23:44 +0800)

--------------------------------------------------- arch/arm/mach-s3c64xx/clock.c print_cpuinfo 打印的开始

****************************************
**    Updated for OK6410A Board        **
**    Version 1.0 (2018/10/13)        **
**    OEM: Golden Creation            **
****************************************

CPU:  S3C6410 @532MHz
        Mclk = 532MHz,  Eclk = 96MHz
        Hclk = 133MHz,  Pclk = 66MHz
        Serial-source = PCLK (SYNC Mode)
--------------------------------------------------- arch/arm/mach-s3c64xx/clock.c print_cpuinfo 打印的结束
	cpu core 	: Mclk = 532MHz
	AHB 		: Hclk = 133MHz
	APB 		: Pclk = 66MHz
	特殊模块		: Eclk = 96MHz
	
	反推 : 
		DOUT_apll = 532M
		也就是外部晶振 12M  内部的OSC(振荡器) 倍频到了 532M
	正推:
		参照 数据手册 P142
		FIN(MHz)  TargetFOUT(MHz) 	MDIV 	PDIV 	SDIV
		12  	  533   			266 	3 		1
		1. FIN : ok6410a X1 : 12MHz
		2. 查看 u-boot 中设置的 APLL_CON 的值, 就是如上的设置
		
		所以 DOUT_apll 输出为 532MHz/533Hz
		按照公式算 也为 532Mhz
		参照 P142
		266 * 12Mhz / (3*2^1) = 532Mh

		
	其他:
		ECLK : 计算方法和 MCLK不同
		参照 P143
		应该是 (24+0/(2^16)) * 12Mhz / 3 = 96Mhz
--------------------------------------------------- 
Model: Samsung SMDK6410 based on S3C6410
Board:   OK6410A
DRAM:  256 MiB
MMC:   S3C64XX_SDHCI: 0
Loading Environment from MMC... OK
In:    serial0@7F005000
Out:   serial0@7F005000
Err:   serial0@7F005000
Net:   dm9000
Warning: dm9000 (eth0) using random MAC address - 2e:38:9e:24:b0:7c

Hit any key to stop autoboot:  0 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值