查S3C2440的数据手册可知S3C2440可寻址1G的地址范围,但是S3C2440的地址线只有27根,理论上只能寻址2的27次方等于128M的地址范围。
通过细致的分析可知:S3C2440通过一个BANK来解决了这个问题。S3C2440有8个存储器BANK,引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,这样S3C2440最多就可以连接8个128M的存储器。对某个BANK地址的访问实际上就是选通该BANK,于是ARM核只要发出一个地址,然后S3C2440的储存控制器把该地址解释成两部分:一部分是BANK地址,一部分是连接到该BANK存储器内部的地址就可以访问了。而作为32位的CPU,理论上可以使用的地址范围可以达到2的32次方等于4G,除去上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。
图1 S3C2440的存储器映射
0x4000 0000以后的地址是怎样映射的呢?
0x4000 0000——0x4000 0FFF 从NOR Flash启动时片内4KB SRAM映射在这个地址范围,而从NAND启动时片内4KB SRAM映射在0x0000 0000地址,则这个地 址范围是保留的。
0x4000 0FFF——0x4800 0000 保留
0x4800 0000——0x6000 0000 特殊功能寄存器的地址
0x6000 0000——0xFFFF FFFF 未用
具体这些地址是如何映射的,可以参考我写的另一篇博文《对S3C2440特殊功能寄存器地址的深入挖掘》。