s3c2440 存储系统和IO空间认识

2017-09-18 13:11

  空间的认识也渐渐淡忘了,原因是在做其他开发时,一直用着自带的启动代码,从不关心的储存空间配置.最近在做网卡驱动,突然间就不知道网卡的地址是什么了,于是花点时间总结一下.废话少说.开始吧.

  这块上(准确的说是S3C2440)的I/O空间是用存储映射的方法映射到存储空间上的,也就说I/O空间是要占用存储空间的.

  为什么这块上有那么多存储设备呢?原因很简单.每种存储设备的用途都不一样,而且为了兼顾广大用户的需要,也必须有不同的存储设备.首先说SDRAM.(写到这突然想起忘了说SRAM了.SRAM是静态随机存储器,它具有掉电不丢失数据且不必频繁刷新的特点,存储速度快,相当于PC的内存,看来这块相当于内存的东西很重要,可是刚刚怎么没说有这块东西呢?原因很简单.因为本来就没有.其实,如果需要随机存储器,SDRAM就是随机存储器啊,只是它需要不断的刷新以保持里面的数据(电平).说到这,SDRAM的作用同学们也应该了解了.也就说我们这块就是有64M的内存,足够用了.

  再说说NANDFLASH,NANDFLASH可以做的很大,但是速度却比不上NORFLASH,NORFLASH能做快却不能做的大,所以,速度和容量是一对矛盾.为了克服这对矛盾,这上两种FLASH都有了.各有用途.另外,初学者一定要知道NANDFLASH与NORFLASH启动的不同吧.这是跟他们的特性有关的,接下来谈谈.

  开发板上有一个S2开关,当它打在NOR一端是就是NOR启动.相反,打在另一端就是NANDFLASH启动了.先说着两种启动的不同,再说说硬件上是如何启动的,空间有时如何分配的.当S2打在NANDFLASH启动,那么程序就是在NANDFLASH上跑起来.其实,在内部还有一个4K字节的steppingstone的缓冲器(其实这是一个SRAM),当选择NANDFALSH启动时,这个缓冲器映射在地址0x0000_0000上,而它负责将NANDFLASH上的代码复制到SDRAM上(大家都知道,程序运行时都是在RAM上运行的,怎么可能是在FLASH上运行呢,其实就是将FLASH上的代码复制了而已)而负责复制这段代码的东西就是传说中的BIOS啦.

  当S2打在NORFLASH一端时,又有什么区别呢?当选择用NORFLASH启动时,2M的NORFLASH就映射到地址0x0000_0000上,程序就是从这里运行了.那难道程序就能从NORFLASH上运行吗?当然不行,那为什么可以在这里启动呢,其实这个NORFLASH已经安装了BIOS的了(若有读者不知什么是BIOS,那就暂且认为它的功能就是从FLASH上复制代码到SDRAM就可以了)

  大家都知道,32位可以寻址4G空间.但是S3C2440却的存储空间里把4G这样子分的:

  其实.S3C2440把低1G的空间分成了8块,由图可知,第0至6这七块的起始地址是不变的.而第七段的地址是可变的(它的地址有第六块需要用到多少来决定,反正就是第六第七是连在一起的).前6块可以是ROMSRAM.最后两块不但可以是ROM,SRAM外,还可以是SDRAM.其实啊,简单点的说,就是只有最后两块才能是SDRAM.也就是说SDRAM必须要映射到这两块里面.mini2440就是选择映射在第七块上,所以SDRAM的起始地址是0x3000_0000(这就是手册上为什么在加载测试程序时DNW的初始值要设为这个,它就是为了想程序直接加载到SDRAM上,这只是做实验而且,掉电后还是会丢失的.所以做产品时是不可能这样做的).

  刚刚说S3C2440把存储空间分为8块,它为什么要这么做呢?其实很简单,即使它不这么做,我们也会这么做的.先了算一算数:每块128M,那就是需要27根地址线块呢就跟着引出与之一一对应的8跟片选引脚.讲到这聪明的读者必能想到.其实这8根片选引脚就是里面用3根地址线译码出来的.所以一共用了30根地址线G么.呵呵.

新闻排行

随机阅读