s3c2440笔记——内存控制器

声明:本博文仅供作者日常记录所用,若有错误,欢迎指明错误之处来进行斧正,若是杠精无理取闹,请自己滚去找厕所吃屎。
—————————————————————————————————————
对内存控制器的学习,主要理解一张图和几个寄存器即可。

在这里插入图片描述
这是s3c2440的内存编址映射,地址从0x00000000到0x40000000。一共1G空间,分成了8份,每份128MB,虽然每份分了128MB,但并不完全使用到。
我的开发板上,这8份地址映射对应了Nor Flash IDE接口 网卡 扩展串口芯片 SDRAM。也就是说,Nor Flash、网卡等这些部件直接与CPU地址线连接,CPU可以直接寻址到它们,但CPU在寻址它们时要经过内存控制器来进行“片选”,就是nGCSx这个东东,比如说CPU现在给了内存控制器0x30000001这个地址,内存控制器一看这个地址应该对应片选6啊(也就是nGCS6),然后内存控制器再一看片选6连了个SDRAM,然后就是根据具体要求对SDRAM的一顿操作。
小结一下就是,CPU送给内存控制器一个地址,然后内存控制器自己根据这个地址去选中相应的片选,在根据片选连接的相应芯片进行相应的操作(不同的部件其操作是不同的)。
这里提一下,上面讲到的这1G的地址空间说白了是CPU留给外设用的,我们平时操作的寄存器的地址范围并不在这些地址范围,在s3c2440中寄存器的地址是0x48000000开始的,也就是说在s3c2440中,除了上述1G空间和内部所有的寄存器,其他的空间并没有使用(按理说,32位地址线可以寻址4GB)。
再来看看地址线和存储芯片的链接。
看几张图
在这里插入图片描述
在这里插入图片描述
第一个是连接一个8bit的芯片,第二个是连接2个8bit扩展出的一个16位芯片,第三个是连接4个8bit扩展出的一个32位芯片。仔细看看地址线的连接,8位的是CPUA0对应芯片A0,16位的是CPUA1对应芯片A0,32位的是CPUA2对应芯片A2。这样做是因为不同芯片一次访问的最小数据单位不同,8位的就是8位(1字节),16位的就是16位(2字节),32位的就是32位(四字节),而CPU进行编址的时候默认一个地址对应8bit(也就是1字节)。举个例子,CPU现在要访问0b11这个地址,如果是8位芯片,那么芯片收到的地址就是0b11;如果是16位的芯片,芯片收到0b1(因为是从A1开始接收);32位芯片,则为0b0(因为是从A2开始接收)。8位的芯片可以直接取到目标,但16位的芯片取到的是两个字节,内存控制器要根据 A0这根线是0还是1来判断到底取哪个字节,32位的芯片取到的是4个字节,内存控制器要根据A0、A1的组合判断到底取这4个中的哪一个。
————————————————————————————————————
有关寄存器的设置,不同的芯片要根据芯片时序图和s3c2440的时序图来进行具体的设置,这里不细究(我也不熟),SDRAM的设置牵涉到的寄存器更多,因此设置也更繁琐一些,略过略过,等哪天用到了再来继续深入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值