主题 : 新人求教,关于64M内存的硬件连接问题(手滑...发错区,求版主移动) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 16042
精华: 0
发帖: 47
金钱: 245 两
威望: 49 点
综合积分: 94 分
注册时间: 2010-03-13
最后登录: 2012-03-23
楼主  发表于: 2010-03-24 21:38

 新人求教,关于64M内存的硬件连接问题(手滑...发错区,求版主移动)

管理提醒: 本帖被 kasim 从 micro2440技术交流专区 移动到本区(2010-03-24)
大家好。一直想学习一下嵌入式系统,于是前段时间买了个64M的Mini2440从头开始学习。
但是在硬件原理图上看到SDRAM芯片的连接方式再结合芯片手册的内容感到有些疑惑,想来请教一下。
1、手册的Table 5-1下边有一个注释说:Bank6/7必须一样大。
这是指硬件上必须分别接2片一模一样的SROM在Bank6和Bank7?
还是应当理解为:
两个Bank在硬件上可以接不同容量的SROM,只不过当Bank6>Bank7时,试图访问Bank7相对于Bank6的缺失地址时会造成无法访问的错误;反过来当Bank6<Bank7时,只能访问Bank7中和Bank6地址重叠的部分,而Bank7剩下的部分就浪费了。如果是这样,那么空着Bank6,只接Bank7的话,是否可以认为Bank7完全无效(因为Bank6没有有效地址)?
2、由于最低位接在CPU的A2上,这就相当于CPU放在地址线上的信号并没有和实际地址一一对应。[4k+0:4k+3]的地址对应的似乎是同一个物理地址单元([4k])。那么在代码中诸如 mov sp,=#0x21   ldr r0,[sp]  和 mov sp,=#0x20   ldr r0,[sp]  的作用是否一样呢,都相当于后者?
3、接上问。在AXD中模拟的结果似乎是把[0x20:0x23]处的值循环位移后取了出来,这应该怎么理解才对?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-03-24 23:19
硬件上并没有规定必须接2块一样的SDRAM在bank 6和bank 7,事实上mini2440接了两块16位32MB的SDRAM在bank 6(nGCS6)上从而“拼成”了一块32位的64MB的SDRAM。
从memory controller的BANKSIZE的BK76MAP[2:0]设置看,如果在bank6和7上都接了SDRAM了的话,那它们必须是一样大小的。因为它们的大小只有这一个值来配置。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
2楼  发表于: 2010-03-24 23:40
1、个人认为是第二种。系统按你对bank6和bank7的配置来决定对地址、数据总线的操作,具体情况怎么我没研究过。具体应该看你硬件怎样配置吧?!你可以给bank6配置一个大小,但不一定真的要给bank6接硬件,应该是不影响bank7的使用的,这是我的个人理解。

2、访问非对齐地址可能导致异常(具体也没试过)

3、大小端的问题吗?
级别: 新手上路
UID: 16042
精华: 0
发帖: 47
金钱: 245 两
威望: 49 点
综合积分: 94 分
注册时间: 2010-03-13
最后登录: 2012-03-23
3楼  发表于: 2010-03-25 01:16
首先感谢回帖。

对于问题1:结合版主的回答,似乎可以认为是硬件设计上决定了两个bank的可访问容量是一致的,然后在寄存器配置上也通过编码的方式给以固定,防止单独配置某个bank时可能出现的不一致现象。在按照规定进行匹配之后,再去访问超界的地址应该会陷入不确定状态或者是异常,可能后边学习中会遇到。

对于问题2和3:2楼朋友提出的可能性也是我当初的疑问。这个问题是在看BX指令时产生的。三星手册的例子使用的是
     ADR R0,Into_Thumb+1
          BX R0
这时R0中的地址已经不是对齐的地址了,但是cpu内部逻辑针对这种情况有特定的处理方式,就是跳到对齐的地址,并且切换状态。于是就考虑出现非对齐地址访问时会发生什么。目前来看,至少LDR这种访问方式不会造成异常,只不过取回的数据有些奇妙。应该不是大小端的问题,检查过汇编器的选项了。会和那个桶形移位器(barrel shifter)有关么?