主题 : 请教关于lowlevel_init.s修改的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 24286
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2010-07-05
最后登录: 2017-01-15
楼主  发表于: 2010-09-09 00:55

 请教关于lowlevel_init.s修改的问题

管理提醒: 本帖被 kasim 执行加亮操作(2010-11-28)
我最近开始学习嵌入式,现在想自己动手移植一下UBOOT,虽然看了一些很详细的技术资料,但对其中一些步骤还是糊里糊涂的,这里有2个问题向大家请教。
我用的是MINI2440开发板,我看一份资料讲lowlevel_init.s修改时如下描述的(用的是U-Boot-2008_10)
1.2.3 修改board/mini2440/lowlevel_init.S文件


--------------------------------------------------------------------------------

(1)修改BWSCON,mini2440 BANK0接NOR Flash,BANK4接DM9000,BANK6接RAM,对于mini2440,只要修改B4_BWSCON即可:



#define B3_BWSCON (DW16 + WAIT + UBLB)

//#define B4_BWSCON (DW16)

#define B4_BWSCON (DW16 + WAIT + UBLB)


#define B5_BWSCON (DW16)

……



#define B4_Tacs 0x0 /* 0clk */

#define B4_Tcos 0x3 /* 4clk */

#define B4_Tacc 0x7 /* 14clk */

#define B4_Tcoh 0x1 /* 1clk */

#define B4_Tah 0x3 /* 4clk */

#define B4_Tacp 0x6 /* 6clk */

#define B4_PMC 0x0 /* normal */

#define B5_Tacs 0x0 /* 0clk */



(2)然后修改 REFRESH 的刷新周期:

#define B7_SCAN 0x1 /* 9bit */

/* REFRESH parameter */

#define REFEN 0x1 /* Refresh enable */

#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */

#define Trc 0x3 /* 7clk */

#define Tchr 0x2 /* 3clk */

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



# if defined(CONFIG_S3C2440)

#define Trp 0x2 /* 4clk */

#define REFCNT 1012

#else

#define Trp 0x0 /* 2clk */

#define REFCNT 0x4f4 /* period=7.8125us, HCLK=100Mhz, (2048+1-7.8125*100) */

#endif

_TEXT_BASE:

.word TEXT_BASE

;----------------------------------------------------------------------------------------------------------------------
我的疑问是:
1,从MINI2440的电路图中可以看到,BANK0接NOR Flash,BANK4接DM9000,BANK6接RAM,但在修改lowlevel_init.s时为什么只修改了BANK4,和DM9000相关的部分呢?
另外对于BANK4中这些参数的设定又是以什么为依据呢,为什么是这些值呢?比方说#define B4_Tacc 0x7 /* 14clk */,为什么要把访问周期设置
为14个时钟周期呢,我看了DM9000的规格书,似乎并没有谈到Tacc,Tcos,等这些参数啊,也没看到详细的时序图中有这些参数啊?只是在S3C2440的规格书第5部分关于
BANKCONn的描述中有这些参数的描述,但取什么值由哪份资料的哪部分描述来决定呢?
2,同样的修改 REFRESH 的刷新周期中,这里的参数设定是以什么为依据的?
看了很多资料都讲这里要修改,但还是没弄明白为什么要这样改?郁闷中。。







;-------------------------------------------------------------------------------------------------------------------------
今天白天时为了搞明白第2个问题中REFRESH是如何设置的,我又把S3C2440和HY57V561620的规格书相关部分看了一遍。发现了
# if defined(CONFIG_S3C2440)

#define Trp 0x2 /* 4clk */

#define REFCNT 1012

#else

这段设置中Trp的设置缘由。
S3C2440中REFRESH寄存器的描述部分有对Trp的说明如下:
Trp    SDRAM   RAS   pre-charge Time    00=2 clocks  01=3 clocks  10=4 clocks  11=Not
HY57V561620中恰好提到了这个
RAS/ precharge time       Min  20  ns
这样子的话,看起来应该这样设置Trp的值:
1,因为在START.S中已经把mini2440的系统频率设定为405M,所以一个机器周期就是1/405M=2.4ns
2,SDRAM HY57V561620的规格书又告诉了这个RAS/ precharge time最小值为20ns
3,由1,2推出Trp=20/2.4=8 clocks(没有这个设置项!!)
搞了半天还是没看出这里设置为#define Trp 0x2 /* 4clk */的原因,难道我看错了,他是把频率设置为200M的?

;--------------------------------------------------------------------------------------------------------------------------------------------------
9/13今天又有了点新发现,原来上次忽略了一个问题,SDRAM使用的是HCLK,并不是FCLK。
因为在START.S中已经把mini2440的系统频率设定为405M,并且设置了FCLK:HCLK:PCLK=1:4:8,所以这里的时间是以HCLK的单位度量的。
HCLK一个时钟周期是1/100M=10ns,SDRAM HY57V561620的规格书又告诉了RAS/ precharge time最小值为20ns,所以这里取4个时钟就可以理解了,它只需比最小值大就可以了。
其他地方的设置还是有疑问,看来不是近期能解决了,决定先往后走了,或许以后有机会明白吧。
[ 此帖被terryat在2010-09-13 21:23重新编辑 ]
级别: 新手上路
UID: 8922
精华: 0
发帖: 17
金钱: 105 两
威望: 33 点
贡献值: 0 点
综合积分: 34 分
注册时间: 2009-09-11
最后登录: 2011-03-30
1楼  发表于: 2010-11-28 15:31
很佩服楼主的学习精神,赞一个

最近我也碰到这个疑问,看了这个帖子,终于清楚了。谢谢楼主!
级别: 新手上路
UID: 8922
精华: 0
发帖: 17
金钱: 105 两
威望: 33 点
贡献值: 0 点
综合积分: 34 分
注册时间: 2009-09-11
最后登录: 2011-03-30
2楼  发表于: 2010-11-28 15:51

 回 楼主(terryat) 的帖子

还有个问题想问下楼主:

为什么REFCNT在 CONFIG_S3C2440定义的情况下取1012呢?这个值怎么算出来的?

根据REFCNT的公式,以及HY57V561620的刷新周期7.8125us,算出来应该就是0x4f4 (1268)啊

为什么要用1012而不是1268呢?
级别: 新手上路
UID: 24286
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2010-07-05
最后登录: 2017-01-15
3楼  发表于: 2011-01-03 23:28

 回 2楼(bianyun1981) 的帖子

抱歉哦,因为很久都没人回帖,我也把这贴给忘记了,呵呵。
REFCNT他这里设定的是1012而不是我们计算的1268,我后来推测是因为作者是按照133M频率计算的数值(你把133带入公式就是他算出的值),而不是按照100M计算的。
级别: 新手上路
UID: 49727
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2011-06-14
最后登录: 2011-06-22
4楼  发表于: 2011-06-19 10:35
很佩服楼主的钻研精神
级别: 新手上路
UID: 53777
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2011-08-16
最后登录: 2012-01-14
5楼  发表于: 2011-11-20 12:26
其实很多东西需要仔细研究的,大多人移植只是看别人怎么改就怎么改,如果不知道为什么这样设置就永远只是一个coder
级别: 新手上路
UID: 76369
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2012-08-23
最后登录: 2012-11-20
6楼  发表于: 2012-08-23 11:12
楼主你好,你所提的两个问题我之前也遇到过,第二个问题不难回答,就像你说的那样,主要是HLCK而不是FCLK。第一个问题我想了很久都不明白为什么设置,按照我的理解就是bank4外接dm9000,那么就应该设置dm9000,或者暂时使用s3c2440手册里面的初始值。楼主你把这个问题解决了吗?