新闻中心

EEPW首页>嵌入式系统>设计应用> S3C2410的内存映射

S3C2410的内存映射

作者: 时间:2016-11-20 来源:网络 收藏
这片文章主要介绍S3C2410内存映射,主要参考2410的用户手册。

我用的板子是基于三星的2410,三星的内存片选有8个bank,这里所谓的bank我开始也不是很清楚,在网上搜了一通也不知所云,但是当我看了 2410的用户手册后才有点明白,这里的bank就是片选,一个片选就是一个bank,在U-Boot中,配制的时候要配制SDRAM和FLASH的 bank数,那么如果你的SDRAM或者FLASH就接了一个片选的时候,就定义为1就可以了,其他的类推。
下面是2410的内存映射图,2410和其他的大部分的处理器一样,支持NorFlash和NANDFlash启动,而这两种启动方式内存所映射的地址不怎么相同,我的板子没有NANDFlash,所以就以从NorFlash启动为例子了:
==============================================<-------0xFFFF_FFFF
|NOT USED
==============================================<-------0x6000_0000
|SFR Area (各个接口的控制寄存器)
==============================================<-------0x4800_0000
==============================================<-------0x4000_0FFF
|BootSRAM(4KBytes)
==============================================<-------0x4000_0000
|SROM/SDRAMnGCS7(bank7)
==============================================<-------0x3800_0000
|SROM/SDRAMnGCS6(bank6)
==============================================<-------0x3000_0000
|SROMnGCS5(bank5)
==============================================<-------0x2800_0000
|SROMnGCS4(bank4)
==============================================<-------0x2000_0000
|SROMnGCS3(bank3)
==============================================<-------0x1800_0000
|SROMnGCS2(bank2)
==============================================<-------0x1000_0000
|SROMnGCS1(bank1)
==============================================<-------0x0800_0000
|SROMnGCS0(bank0)
==============================================<-------0x0000_0000
上面的每个bank最大支持128M,除了bank0,其它的每个bank都支持8/16/32位操作,bank0只支持16/32位操作,在我的板子上,Flash接bank0,一共8M,16位,SDRAM接bank6,一个32M,32位。所以启动的时候,CPU从0x0000_0000开始执行,而在这上面的NorFlash,存放的是U-Boot,用于启动Linux的。
而我们目前所做的工作就是要把U-Boot移植成功,然后烧写到该地址,假设你的板子的供应商已经提供了少些的工具,等到我们少些成功,我们就可以通过网络来加载Linux,通过串口来调试了,至于怎么做的,我们慢慢来,以后的帖子会涉及到。。。
在上面的存储地址布局中,SFR Area就是各个接口控制器的地址,我们可以把它定义如下,来自华恒PPCboot上面的源代码中的头文件s3c2410.h:

#define rBWSCON(*(volatile unsigned *)0x48000000)
#define rBANKCON0(*(volatile unsigned *)0x48000004)
#define rBANKCON1(*(volatile unsigned *)0x48000008)
#define rBANKCON2(*(volatile unsigned *)0x4800000C)
#define rBANKCON3(*(volatile unsigned *)0x48000010)
#define rBANKCON4(*(volatile unsigned *)0x48000014)
#define rBANKCON5(*(volatile unsigned *)0x48000018)
#define rBANKCON6(*(volatile unsigned *)0x4800001C)
#define rBANKCON7(*(volatile unsigned *)0x48000020)
#define rREFRESH(*(volatile unsigned *)0x48000024)
#define rBANKSIZE(*(volatile unsigned *)0x48000028)
#define rMRSRB6(*(volatile unsigned *)0x4800002C)
#define rMRSRB7(*(volatile unsigned *)0x48000030)

#define rHcRevision(*(volatile unsigned *)0x49000000)
#define rHcControl(*(volatile unsigned *)0x49000004)
#define rHcCommonStatus(*(volatile unsigned *)0x49000008)
#define rHcInterruptStatus(*(volatile unsigned *)0x4900000C)
#define rHcInterruptEnable(*(volatile unsigned *)0x49000010)
#define rHcInterruptDisable(*(volatile unsigned *)0x49000014)
#define rHcHCCA(*(volatile unsigned *)0x49000018)
#define rHcPeriodCuttendED(*(volatile unsigned *)0x4900001C)
#define rHcControlHeadED(*(volatile unsigned *)0x49000020)
#define rHcControlCurrentED(*(volatile unsigned *)0x49000024)
#define rHcBulkHeadED(*(volatile unsigned *)0x49000028)
#define rHcBuldCurrentED(*(volatile unsigned *)0x4900002C)
#define rHcDoneHead(*(volatile unsigned *)0x49000030)
#define rHcRmInterval(*(volatile unsigned *)0x49000034)
#define rHcFmRemaining(*(volatile unsigned *)0x49000038)
#define rHcFmNumber(*(volatile unsigned *)0x4900003C)
#define rHcPeriodicStart(*(volatile unsigned *)0x49000040)
#define rHcLSThreshold(*(volatile unsigned *)0x49000044)
#define rHcRhDescriptorA(*(volatile unsigned *)0x49000048)
#define rHcRhDescriptorB(*(volatile unsigned *)0x4900004C)
#define rHcRhStatus(*(volatile unsigned *)0x49000050)
#define rHcRhPortStatus1(*(volatile unsigned *)0x49000054)
#define rHcRhPortStatus2(*(volatile unsigned *)0x49000058)

#define rSRCPND(*(volatile unsigned *)0x4A000000)
#define rINTMOD(*(volatile unsigned *)0x4A000004)
#define rINTMSK(*(volatile unsigned *)0x4A000008)
#define rPRIORITY(*(volatile unsigned *)0x4A00000C)
#define rINTPND(*(volatile unsigned *)0x4A000010)
#define rINTOFFSET(*(volatile unsigned *)0x4A000014)
#define rSUBSRCPND(*(volatile unsigned *)0x4A000018)
#define rINTSUBMSK(*(volatile unsigned *)0x4A00001C)

#define rULCON0(*(volatile unsigned *)0x50000000)
#define rUCON0(*(volatile unsigned *)0x50000004)
#define rUFCON0(*(volatile unsigned *)0x50000008)
#define rUMCON0(*(volatile unsigned *)0x5000000C)
#define rUTRSTAT0(*(volatile unsigned *)0x50000010)
#define rUERSTAT0(*(volatile unsigned *)0x50000014)
#define rUFSTAT0(*(volatile unsigned *)0x50000018)
#define rUMSTAT0(*(volatile unsigned *)0x5000001C)
#define rUBRDIV0(*(volatile unsigned *)0x50000028)
#define rULCON1(*(volatile unsigned *)0x50004000)
#define rUCON1(*(volatile unsigned *)0x50004004)
#define rUFCON1(*(volatile unsigned *)0x50004008)
#define rUMCON1(*(volatile unsigned *)0x5000400C)
#define rUTRSTAT1(*(volatile unsigned *)0x50004010)
#define rUERSTAT1(*(volatile unsigned *)0x50004014)
#define rUFSTAT1(*(volatile unsigned *)0x50004018)
#define rUMSTAT1(*(volatile unsigned *)0x5000401C)
#define rUBRDIV1(*(volatile unsigned *)0x50004028)
#define rULCON2(*(volatile unsigned *)0x50008000)
#define rUCON2(*(volatile unsigned *)0x50008004)
#define rUFCON2(*(volatile unsigned *)0x50008008)
#define rUTRSTAT2(*(volatile unsigned *)0x50008010)
#define rUERSTAT2(*(volatile unsigned *)0x50008014)
#define rUFSTAT2(*(volatile unsigned *)0x50008018)
#define rUBRDIV2(*(volatile unsigned *)0x50008028)
#ifdef __BIG_ENDIAN
#define rUTXH0(*(volatile unsigned char *)0x50000023)
#define rURXH0(*(volatile unsigned char *)0x50000027)
#define rUTXH1(*(volatile unsigned char *)0x50004023)
#define rURXH1(*(volatile unsigned char *)0x50004027)
#define rUTXH2(*(volatile unsigned char *)0x50008023)
#define rURXH2(*(volatile unsigned char *)0x50008027)
#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000023)=(unsigned char)(ch)
#define RdURXH0()(*(volatile unsigned char *)0x50000027)
#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004023)=(unsigned char)(ch)
#define RdURXH1()(*(volatile unsigned char *)0x50004027)
#define WrUTXH2(ch)(*(volatile unsigned char *)0x50008023)=(unsigned char)(ch)
#define RdURXH2()(*(volatile unsigned char *)0x50008027)
#define UTXH0(0x50000020+3)
#define URXH0(0x50000024+3)
#define UTXH1(0x50004020+3)
#define URXH1(0x50004024+3)
#define UTXH2(0x50008020+3)
#define URXH2(0x50008024+3)
#else
#define rUTXH0(*(volatile unsigned char *)0x50000020)
#define rURXH0(*(volatile unsigned char *)0x50000024)
#define rUTXH1(*(volatile unsigned char *)0x50004020)
#define rURXH1(*(volatile unsigned char *)0x50004024)
#define rUTXH2(*(volatile unsigned char *)0x50008020)
#define rURXH2(*(volatile unsigned char *)0x50008024)
#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
#define RdURXH0()(*(volatile unsigned char *)0x50000024)
#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)
#define RdURXH1()(*(volatile unsigned char *)0x50004024)
#define WrUTXH2(ch)(*(volatile unsigned char *)0x50008020)=(unsigned char)(ch)
#define RdURXH2()(*(volatile unsigned char *)0x50008024)
#define UTXH0(0x50000020)
#define URXH0(0x50000024)
#define UTXH1(0x50004020)
#define URXH1(0x50004024)
#define UTXH2(0x50008020)
#define URXH2(0x50008024)
#endif

#define rTCFG0(*(volatile unsigned *)0x51000000)
#define rTCFG1(*(volatile unsigned *)0x51000004)
#define rTCON(*(volatile unsigned *)0x51000008)
#define rTCNTB0(*(volatile unsigned *)0x5100000C)
#define rTCMPB0(*(volatile unsigned *)0x51000010)
#define rTCNTO0(*(volatile unsigned *)0x51000014)
#define rTCNTB1(*(volatile unsigned *)0x51000018)
#define rTCMPB1(*(volatile unsigned *)0x5100001C)
#define rTCNTO1(*(volatile unsigned *)0x51000020)
#define rTCNTB2(*(volatile unsigned *)0x51000024)
#define rTCMPB2(*(volatile unsigned *)0x51000028)
#define rTCNTO2(*(volatile unsigned *)0x5100002C)
#define rTCNTB3(*(volatile unsigned *)0x51000030)
#define rTCMPB3(*(volatile unsigned *)0x51000034)
#define rTCNTO3(*(volatile unsigned *)0x51000038)
#define rTCNTB4(*(volatile unsigned *)0x5100003C)
#define rTCNTO4(*(volatile unsigned *)0x51000040)

本文引用地址://m.amcfsurvey.com/article/201611/318881.htm


关键词:S3C2410内存映

评论


技术专区

关闭