作者:双鱼獒主 | 来源:互联网 | 2023-05-18 10:21
一.CPU 地址分配:
1. s3c2440A 的存储器控制器有以下特性:
l 大小端(通过软件选择)
l 地址空间:每个bank有128M 的字节(总共1G字节/8个banks)
l 可编程的访问位宽,bank0(16/32 位),其他bank(8/16/32 位)
l 共8个存储器banks
l 6 个是ROM,SRAM 等类型存储器bank (bank0 ---- bank5)
l 2 个是可以作为ROM、SRAM、SDRAM 等存储器bank (bank6 ---- bank7)
l 7 个固定的存储器bank起始地址 (bank0 ---- bank6)
l 最后一个bank 的起始地址可调整 (bank7, 接两片sdram时.接在bank7上的sdram会根据bank6上的结束地址而调整)
l 最后两个bank 大小可编程
l 所有存储器bank的访问周期可编程
l 总线访问周期可通过插入外部wait来延长
l 支持SDRAM 的自刷新和掉电模式
理论上,cpu是32位的.可以寻址的空间为2的32次方,也就是4GB的地址空间.但我们cpu只用了其中一1GB多一点的空间,其它的空间都是未到到.且看下图,我们作一个感性认识:
图1
(1) S3C2440A的存储器管理器提供访问外部存储器的所有控制信号,27位地址信号(ADDR[26:0])、32位数据信号(DATA[31:0])、8个片选信号(nGCS[7:0])、以及读/写控制信号等.
看图1,我们知道.从0x4000 0000 地址开始,有片内SRAM,片内寄存器,还有未使用的空间.这是都是固定的,不能动的.留给我们用户的只有0x0000 0000 到 0x3FFF FFFF这1GB的地址空间给我们用. 1GB的地址空间我们需要30根地址线才能完全寻址完毕,2 的 30次方 刚好等于1GB,但是,芯片引脚上只给出了27根地址()ADDR[26:0]),单靠芯片上的27根引脚,它只能控制128M的空间,那3根线去哪里.其实这3根线用在了3-8译码器(如:000表示00000001,001表示00000010,010表示00000100,011表示00001000等等)的输入端去了,而这个3-8译码器的输出端,就是对应这nGCS0~7,对应着8个bank,用于选择当前处于哪个bank,这样做的好处在于很模块化结构化了,便于管理.不会造成一片和手动去分割地址.
(2) bank0---bank5为固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB
请看图2
图2
所以.7个固定存储器bank(bank0-bank6)起始地址。bank7的开始地址与bank6的结束地址相连接,但是二者的容量必须相等,s3c2440最小可以支支持2MB(2MB一片,只接bank6) 最大支持是256MB(bank6接128MB,bank7接128MB),另需注意一点就是如果,需要接两片sdram的话,两片的容量大小必须是一样的.看图2就清楚了.
(3) bank0可以作为引导ROM。其数据线宽只能是16位和32位,其它存储器的数据线宽可以是8位、16位和32位
(4) 地址:
0x0000 0000 ----- 0x3FFF FFFF : 分配了8个bank ,每个bank 有128MB寻址空间, 每个bank也都会有片选信号,这8个bank 的地址提供给nandflash ,norflash,sdram使用(下面sdram的接入我们会祥细讲解)
0x4000 0000 ----- 0x47FF FFFF : 其中的前4KB空间,也就是0x4000 0000 到 0x4000 1000 为片内SRAM地址空间,这就是所谓的steppingstone(下面s3c2440启动时会再讨论steppingstone的作用),其它的空间未使用.
0x4800 0000 ----- 0x5FFF FFFF : 特殊功能寄存器,CPU的寄存器都在这时定义和配置.
0x6000 0000 ----- 0xFFFF FFFF : 这大概3G的空间是没有使用的.