通過細致的分析可知: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特殊功能寄存器地址的深入挖掘》。http://www.linuxidc.com/Linux/2011-11/46480.htm