s5pv210 512M内存配置问题(Android--uboot)(100分求教)

xuweiyue 2012-02-04 10:00:24
情况是这样。
深圳友坚的开发板。自己在这个基础上改成了 64Mbx16bit的内存。
双通道。
DMC0,DMC1分别并联2片。
根据内存的datasheet,此内存行线是A0~A12,列线是A0~A9,
目前做了如下修改,但是uboot都跑不起来。打印第一个OK之后就停止了。

====smdkv210singke.h=======
#define CONFIG_NR_DRAM_BANKS 2 //
#define PHYS_SDRAM_1 0x20000000
#define PHYS_SDRAM_1_SIZE 0x10000000

#define PHYS_SDRAM_2 0x40000000
#define PHYS_SDRAM_2_SIZE 0x10000000

......

#define DMC0_MEMCONFIG_0 0x20F01213 //F0目前尚不清楚意义是什么按原来的值配置的,datasheet中说是AXI base address的偏移量,也被用来间接表示此块内存的大小,但没给出计算方法。不知有没有人知道这个值是如何确定的
#define DMC0_MEMCONFIG_1 0x28F01213 //同上

#define DMC1_MEMCONFIG_0 0x40F01213
#define DMC1_MEMCONFIG_1 0x48F01213

============lowlevelInit.S===================

修改mmu_table为

.section .mmudata, "a"
.align 14
// the following alignment creates the mmu table at address 0x4000.
.globl mmu_table
mmu_table:
.set __base,0
// Access for iRAM
.rept 0x100
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr

// Not Allowed
.rept 0x200 - 0x100
.word 0x00000000
.endr

.set __base,0x200
// should be accessed
.rept 0x300 - 0x200
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr

.rept 0x400 - 0x300
.word 0x00000000
.endr

.set __base,0x400
// should be accessed
.rept 0x500 - 0x400
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr

.rept 0x800 - 0x500
.word 0x00000000
.endr

.set __base,0x800
// should be accessed
.rept 0xb00 - 0x800
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr

/* .rept 0xc00 - 0xb00
.word 0x00000000
.endr */

.set __base,0xB00
.rept 0xc00 - 0xb00
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr

//.set __base,0x200
// 256MB for SDRAM with cacheable
//.rept 0xD00 - 0xC00
//FL_SECTION_ENTRY __base,3,0,1,1
//.set __base,__base+1
//.endr

// access is not allowed.
@.rept 0xD00 - 0xC80
@.word 0x00000000
@.endr

.set __base,0xD00
// 1:1 mapping for debugging with non-cacheable
.rept 0x1000 - 0xD00
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr


以上是全部修改,编译出来的uboot在目标板上仅输出一个OK后就重置了
如果您知道,请您花几分钟的时间告诉一下小弟吧。实在感激不尽
...全文
1333 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cchd23 2013-01-07
  • 打赏
  • 举报
回复
怎么解决的说说嘛
xuweiyue 2012-09-14
  • 打赏
  • 举报
回复
问题已经解决,谢谢大家的参与
Yurrie 2012-09-04
  • 打赏
  • 举报
回复
楼主怎么搞定的···教下呗···
ttapi 2012-02-08
  • 打赏
  • 举报
回复
上面 20F0 是
基地址高位: 00100000,基地址高位掩码: 11110000 这里掩码了4bit所以要判断的位是最高的4位,也就是 0011。
目标访存地址是 0x20000001,最高4bit为 0x2。
0x2与刚才得出的 0b0010 做 XOR 结果为0。

所以访问这个地址 0x20000001的时候,会使用 20F0 掩码的片选。
xuweiyue 2012-02-07
  • 打赏
  • 举报
回复
另外再问一句:
"访存的目标地址,与基地址中 mask 为 1 的位做 XOR,如果 XOR 的结果为 0,则使用该片选信号。"
在上面的例子中。假设访存目标地址是:0x20000001。
这个地址的哪些位与mask做XOR运算呢?
xuweiyue 2012-02-07
  • 打赏
  • 举报
回复
3楼的兄弟还在吗。
基址高位 00110000 是怎么算出来的呢?我还是没弄明白

arm网站上dmc相关文档解释得更含糊。

5楼大哥。你列的那些,都是别人提问,没有得到解决的。
ttapi 2012-02-07
  • 打赏
  • 举报
回复
三星有个参考设计已经配好了512M内存,找他们代理商要个代码就可以了。
u-boot只需修改一下 DMC 控制器,MMU 映射表不需要做任何改动。不知道你用的是哪个版本的kernel,通常来说kernel部分不需要做任何改动,只需在uboot里面正确的把mtag参数传过去。较旧的kernel需要修改fixup。
ttapi 2012-02-06
  • 打赏
  • 举报
回复
sorry。
修正刚才的一句。
访存的目标地址,与基地址中 mask 为 1 的位做 XOR,如果 XOR 的结果为 0,则使用该片选信号。
ttapi 2012-02-06
  • 打赏
  • 举报
回复
简单。
F0 是地址位掩码。 访存的时候目标地址与地址掩码做 and,如果结果都为1,则使用该片选信号。
上面 20F0 是
基地址高位: 00110000
基地址高位掩码: 11110000

则有效高位地址为: 00110000 ~ 00111111

DMC0 和 DMC1 各有两个 CS,所以 MEMCFG 在每个 DMC 通道上有两个。
woshi_ziyu 2012-02-06
  • 打赏
  • 举报
回复
woshi_ziyu 2012-02-06
  • 打赏
  • 举报
回复
楼主解决问题没
xuweiyue 2012-02-04
  • 打赏
  • 举报
回复
顶上去,顶到有高手前来。
xqhrs232 2012-02-04
  • 打赏
  • 举报
回复
最好别去搞这种大动作

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧