免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2223 | 回复: 2

[BootLoader] s3c2440的sdram连线方法(欢迎高手来指点) [复制链接]

论坛徽章:
0
发表于 2013-01-19 11:33 |显示全部楼层
本帖最后由 绝无仅有的我 于 2013-01-19 11:41 编辑

这几天在看s3c2440的sdram这一块,有图如下
关于连线产生疑问
为什么与A0连接的是LADDR2而不是LADDR0?
发现有如下回答:
1:2440或2410中地址线都是从ADDR2中开始连接的,即A0-ADDR2、An- ADDR(n+2)、这是因为ARM是32位处理器所以它一次处理数据都是以32位为单位的,也就是说它读或者写数据时,地址只能为0x0、0x04、0x08、。。。即4字节对齐,因为一般DDR的数据线都为16位,所以为了得到32位的数据,一般都是将2个DDR连在一起,它们的地址相同,所以对已DDR而言是一个地址对应4个字节(因为一个DDR对应2个字节,两个DDR就对因4个字节),但是对于CPU而言一个地址只对应1个字节,所以这里就存在一个地址转换问题,即使CPU的0~3地址里的数据对应DDR的0地址数据,CPU的4~7地址的数据对应DDR的1地址的数据,所以CPU的0地址对应DDR的0地址,0X04地址对应DDR中1地址,0x08地址对应DDR中2地址,可以看出,DDR的地址刚好是CPU寻址向右移动两位,所以2440或2410中地址线都是从ADDR2开始连接的.

2:在ARM 模式是字对齐寻址,所以下一条寻址地址转换为二进制其最后两位必为00。我们假设
S3C2440 的地址线LADDR0 接A0 以此类推,我们假设PC 从0x00000000 开始顺序寻
址,代码中不包含跳转指令。以下为S3C2440 的32 位地址到基于HY57V561620 寻址模式的转换的对应
关系
S3C2440 地址(二进制)                                               Bank      列地址     行地址
0b000000000 000000000 000000000 000000000      0x00     0x0000     0x000
0b000000000 000000000 000000000 000000100      0x00     0x0004     0x000
0b000000000 000000000 000000000 000001000      0x00     0x0008     0x000
0b000000000 000000000 000000000 000001100      0x00     0x000C     0x000
0b000000000 000000000 000000000 000010000      0x00     0x0010     0x000
0b000000000 000000000 000000000 000011000      0x00     0x0014     0x000
0b000000000 000000000 000000000 000011100      0x00     0x0018     0x000
0b000000000 000000000 000000000 000100100      0x00     0x001C     0x000
0b000000000 000000000 000000000 000101000      0x00     0x0020     0x000
0b000000000 000000000 000000000 000101100      0x00     0x0024     0x000
我们看到虽然两块HY57V561620 组成了一个32 位的SDRAM,但是连块HY57V561620 里的数据存
储却不是连续的,这样就浪费了内存空间,如果我们忽略掉32 位地址后两位,还剩30 为,再看这些地址
是不是连续的,显然他们是连续的,如果以忽略掉最后两位的地址转换成基于HY57V561620 的寻址模式
会发现数据的存储顺序就是连续的,而忽略掉最后两位就相当于将LADDR2 接到A0 上,以此类推。
还可以这么认为,CPU 的寻址单位是byte,就是一条地址的对应于一个byte 的数据或指令,而现在两
块HY57V561620 组合成了一个32 位的SDRAM 也就是4byte,我们现在要让CPU 的寻址单位为4byte,
一条地址的对应于4byte,只要去掉32 为最后的两位就可以了.
关于答案1和答案2对问题的解释到底那个更好呢?
76882-1687731394-8.gif

论坛徽章:
0
发表于 2013-01-19 21:42 |显示全部楼层
怎么没人评论呢 ……  这不科学啊

论坛徽章:
0
发表于 2013-01-21 21:07 |显示全部楼层
先说下自己的看法。 明天再研究你的两个答案。
arm核是32位的,这个三星公司只能被动的接受。因为这是arm设计的,三星的设计只能以人家的设计为前提。
arm核的地址线连接到sdram,这个具体连法是三星设计的。
arm地址是4字节的增长。(x86没这个限制),也即是0xcb000080,0xcb000084,0xcb000088....
假设不悬空A0A1,arm的地址会是0xcb000080,0xcb000084,...4字节的增长。这样的话SDRAM有好多地址就访问不到了。故要屏蔽掉最后两位。
此图要完成arm的32位,需要进行两次的读写。这是用两块sdram的原因。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP