博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OK6410A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system clock
阅读量:4285 次
发布时间:2019-05-27

本文共 5999 字,大约阅读时间需要 19 分钟。

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 P110X1 : 12Mhz XTO XTIX2 : 27Mhz 27MXTO 27MXTIX3 : 48Mhz OTGTI OTGTOX5 : 32.768Khz RTCXTO RTCXTI
PLL可产生高达1.6GHz的高频时钟信号。S3C6410X的ARM1176处理器最高可运行667MHz。	工作频率可由the internal clock divider, DIV ARM,无需改变PLL频率。divider ratio 可 在1到16之间变化。内部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偏移		: 例如 0x900system_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	20		清0 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-gUutU-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 S3C6410Board:   OK6410ADRAM:  256 MiBMMC:   S3C64XX_SDHCI: 0Loading Environment from MMC... OKIn:    serial0@7F005000Out:   serial0@7F005000Err:   serial0@7F005000Net:   dm9000Warning: dm9000 (eth0) using random MAC address - 2e:38:9e:24:b0:7cHit any key to stop autoboot:  0

转载地址:http://qbigi.baihongyu.com/

你可能感兴趣的文章
QT工程实例
查看>>
pkg-config
查看>>
Linux内核分析-1/反汇编(堆栈)
查看>>
Linux内核分析-2/时间片轮转多道程序
查看>>
Linux内核分析-4/5/系统调用
查看>>
c/c++常见关键字
查看>>
C++内存地址分配和内存区划分简介
查看>>
C++数值交换
查看>>
指针数组、数组指针、函数指针、指针函数
查看>>
float,double在内存中的存储方式
查看>>
int main(int argc,char* argv[])详解
查看>>
C++打印地址
查看>>
ARM处理器比较:A8/A9
查看>>
ARM处理器工作模式
查看>>
ARM处理器寄存器
查看>>
汇编语言学习
查看>>
ARM寻址方式
查看>>
uboot工作流程分析
查看>>
不錯的技術論壇
查看>>
GDB 常用參數
查看>>