移植u-boot-修改时钟,SDRAM,串口

目录

一、准备工作

二、调试代码

三、修改代码


一、准备工作

由于u-boot2012并没有显性的支持2440。需要手动增加2440目录。还需要增加配置文件2440.h

二、分析调试代码

1、在start.S中,只是设置了时钟比例,有SDRAM的初始化

/* FCLK:HCLK:PCLK = 1:2:4 */
	/* default FCLK is 120 MHz ! */
	ldr	r0, =CLKDIVN
	mov	r1, #3
	str	r1, [r0]

这里存在严重的不足。没有初始化时钟,却用到的60MHZ的时钟

#define REFCNT			1113	/* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */

2、第一个问题解决了,下面运行之后发现有乱码。那应该是串口设置有问题

移植u-boot-修改时钟,SDRAM,串口_第1张图片

一路追踪:board_init_f -> init_sequence -> serial_init -> serial_init_dev -> _serial_setbrg -> get_PCLK -> get_HCLK

发现没有打开CONFIG_S3C2440选项

移植u-boot-修改时钟,SDRAM,串口_第2张图片

 3、第二个问题也解决了,但是程序跑不下去了,flash fail

移植u-boot-修改时钟,SDRAM,串口_第3张图片

三、修改代码

1、将时钟的初始化工作提前做了

在原本设置时钟分频系数的位置,换成我们自己的代码,并且启动ICache,跑的更快

/* 设置时钟分频系数 */
	/* FCLK:HCLK:PCLK = 1:2:4 */
	/* default FCLK is 120 MHz ! */
	//ldr	r0, =CLKDIVN
	//mov	r1, #3
	//str	r1, [r0]
	/* 2. 设置时钟 */
	/* 设置MPLL,FCLK:HCLK:PCLK = 	400m : 100m : 50m*/
	/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */
	ldr r0,=0x4C000000
	ldr r1,=0xFFFFFFFF
	str r1,[r0]

	/* CLKDIVN(0x4C000014) = 0x5 tFCLK:tHCLK:tPCLK = 1:4:8	*/
	ldr r0, =0x4c000014
	ldr r1, =0x5            // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
	str r1, [r0]

	/* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
	mrc  p15,0,r0,c1,c0,0 
   	orr  r0,r0,#0xc0000000	//R1_nF:OR:R1_iA 
   	mcr  p15,0,r0,c1,c0,0

	/* MPLLCON = S3C2440_MPLL_400MHZ */
	ldr r0, =0x4c000004
	ldr r1,=(92<<12) | (1<<4) | (1<<0)
	str r1, [r0]

	/* 启动ICACHE */
	mrc p15, 0, r0, c1, c0, 0 		@ read control reg
	orr r0, r0, #(1<<12)	
	mcr p15, 0, r0, c1, c0, 0 		@ write it back

用jtag调试工具,看一下内存是否初始化完成,往0x30000000写入0x12345678,再读出来,一样证明初始化成功

移植u-boot-修改时钟,SDRAM,串口_第4张图片

 2、解决串口

一般乱码是因为波特率的问题,波特率又跟时钟有关系

在smdk2440.h中修改

#define CONFIG_ARM920T		/* This is an ARM920T Core */
#define CONFIG_S3C24X0		/* in a SAMSUNG S3C24x0-type SoC */
//#define CONFIG_S3C2410		/* specifically a SAMSUNG S3C2410 SoC */
#define CONFIG_S3C2440			/* specifically a SAMSUNG S3C2440 SoC */
#define CONFIG_SMDK2410		/* on a SAMSUNG SMDK2410 Board */

3、详解请看下一节

好了, 这一节解决了SDRAM,时钟,串口的问题,使得u-boot能启动了,但是还有点小问题。这个需要根据错误信息搜索,然后再解决。所有改动最终会以补丁形式上传给大家。

 

你可能感兴趣的:(移植u-boot-修改时钟,SDRAM,串口)