存储子系统结构如下图所示。6410的存储系统包括两个内部存储器和两个外部存储器端口(参用户手册1.1节、2.1节、4.3节):
内部存储器即集成在芯片内部的存储器,有
两个外部存储器端口支持外接存储器
S3C6410内存映射表如下所示:
S3C6410X支持32位(4G)物理地址,但实际只用了2G存储空间,地址空间范围为0x0000_0000至0x7FFF_FFFF。 此地址空间分为两部分:前1.75G用于存储器(内部存储器和外部存储器),后0.25G(256M)用于外设。
地址范围:0x0000_0000-0x6FFF_FFFF(1.75G),通过SPINE总线访问。 存储器空间分为四个区域,如下:
地址范围:0x0000_0000-0x07FF_FFFF(128M)
启动镜像区并没有实际的映射内存(mapped-memory)。启动镜像区反映一个镜像,这个镜像指向内部存储区的SteppingStone或静态存储区。启动镜像的地址固定为0x0000_0000。
程序启动从地址0x0000_0000开始,所谓映射,实际上就是跳到。如启动镜像区映射到NOR即程序执行时从0地址直接跳转到NOR中执行。
地址范围:0x0800_0000-0x0FFF_FFFF(128M, 64M×2)
包含内部ROM(Internal ROM, IROM)和内部SRAM(Internal SRAM, 亦称SteppingStone)。内部存储区供bootloader访问。每块内部存储区的起始地址固定: 1) 内部ROM地址范围0x0800_0000-0x0BFF_FFFF(64M),但实际存储仅32K。只读,当内部ROM启动被选中时该区域将映射到启动镜像区。 2) 内部SRAM地址范围0xC000_0000-0x0FFF_FFFF(64M),但实际存储仅4K。可读写,当NAND闪存启动被选中时该区域能映射到启动镜像区。
地址范围:0x1000_0000-0x3FFF_FFFF(768M, 128M×6)
此地址空间支持SROM控制器(支持SRAM、ROM、NOR)、OneNAND控制器(支持OneNAND)所支持的存储设备,还有SteppingStone(特殊,后面有描述)。也就是说NOR、OneNAND等可被编址到本空间,可通过地址访问。
此地址空间不支持NAND控制器和CF控制器。当NAND和CF的片选连接到Xm[0]CSn[5:2]的某一片选时,此片选对应的bank是没有用处的。不可以通过静态存储区的地址空间访问NAND的和CF,而是通过访问其控制器的SFR间接访问NAND和CF。有一个例外:若Xm[0]CSn[2]被用于片选NAND Flash,则Stepping Stone将映射到存取区0x2000_0000-0x27FF_FFFF,因NAND控制器有DMA功能,主要用于启动时的代码搬运,详细描述在本文的最后。
地址范围:0x4000_0000-0x6FFF_FFFF(768M) 0x4000_0000-0x4FFF_FFFF(256M, 128M×2)的地址空间保留。 0x5000_0000-0x6FFF_FFFF(512M, 256M×2)的地址空间用于DMC1(DRAM Controller of the Memory Port1),每一片选的起始地址可配置。
地址范围:0x0000 0000-0x6FFF FFFF(256M),通过PERI总线访问。
此地址空间可访问所有的SFR。同样,若数据需从NFCON 或CFCON 传输,那么它们将通过PERI 总线传输。
S3C6410设备启动模式如下表所示:
S3C6410支持Nand/Nor/OneNAND/Modem/iROM(内部ROM)几种启动方式,与启动模式相关的硬件管脚有:
启动模式分为两类:
iROM启动模式:启动镜像区映射到iROM
当OM[4:1]=1111时为iROM启动方式,芯片上电后,首先从iROM中运行。
BL0:Bootloader0,即固化在iROM中的启动代码,直接在iROM中运行。负责部分初始化工作以及将BL1拷贝至SteppingStone。
BL1:Bootloader1,存储于启动设备中(由GPN[15:13]管脚指定,如SD卡、NAND等),运行于iRAM中(即Internal SRAM, SteppingStone)。初始化DRAM等以及将BL2拷贝到DRAM。
BL2:Bootloader2,存储于启动设备中(由GPN[15:13]管脚指定,如SD卡、NAND等),运行于DRAM中,负责部分初始化工作以及引导操作系统等。
iROM启动方式如下图所示:
① iROM supports initial boot up: initialize system clock, D-TCM, device specific controller and booting device. ② iROM boot codes can load 4KB of bootloader to stepping stone. The 8KB boot loader is called BL1. ③ BL1: BL1 can initialize system clock, UART, and SDRAM for user. After initializing, BL1 will load remaining boot loader which is called BL2 on the SDRAM. ④ Finally, jump to start address of BL2. That will make good environment to use system.
BL0将执行如下操作,详细流程参考图
与启动相关的存储器映射如下表所示:
非iROM启动模式:启动镜像区映射到iRAM[NAND]、ExtROM、NOR或OneNAND
即使用Nand/Nor/OneNAND/Modem启动,以Nand为例:
当芯片上电后,Nand-Flash控制器会自动使用DMA将自己的bootloader区域的前4KB代码搬运到iRAM(内部SRAM),注意此动作由硬件执行,注意Nand-Flash控制器位于6410 IC内部,当然前提是芯片内部的Nand-Flash控制器支持Nand-Flash启动这个功能。
当然,若Nand-Flash中无bootloader程序,芯片肯定无法启动,DRAM也无法初始化。同样使用Nor启动也是一样。
非iROM启动方式与iROM启动方式不同的一点在于:非iROM启动方式是在芯片上电后,由Nand-Flash控制器(或Nor-Flash控制器等)将bootlader的相关部分搬运到SteppingStone中运行,而iROM启动方式是在芯片上电后,由iROM中的启动代码BL0将bootlader的相关部分搬运到SteppingStone中运行。如图2所示,即上电后第①步不同,其后步骤基本一样。
以下内容来自User Manual V1.10第6章和Application Note V1.0第6章 6410 SROM控制器支持SRAM, various ROMs和NOR flash。
SROM Controller support SROM interface for Bank0 to Bank5. In case of OneNAND boot, SROM controller cannot control Bank2 and Bank3 because its mastership is on OneNAND Controller. In case of NAND boot, SROM controller cannot control Bank2 and Bank3 because its mastership is on NAND Flash Controller.
当AXI Remap=0时,是非IROM启动方式。
下面从各控制器说起:
SROM控制器支持的存储器、OneNAND存储器均可通过静态存储区(static memory area)直接存取,它们被编址在静态存储区。
而NAND和CF卡则不行,必须通过相应的控制器对器件间接访问,不能被编址在静态存储区,当它们使用Xm0CSn[5:2]占了静态存储区的相应banks时,相应的bank将不可用,白白被占。一个例外是:若Xm[0]CSn[2]被用于片选NAND Flash,则Stepping Stone将映射到存取区0x2000_0000-0x27FF_FFFF,这一句话还是不很清楚。
当AXI Remap=1时,是IROM启动方式。
启动镜像区映射到Internal ROM(BL0),BL0初始化相关硬件后,将位于外部存储器(SRAM因掉电丢失除外,NOR,ROM,NAND,CF)的bootloader的前4KB(BL1)拷至SteppingStone(即Internal RAM),并跳转至BL1运行,SteppingStone中的BL1初始化相关硬件后,将外存中剩余的bootloader(BL2)拷至DRAM中并跳转至DRAM中的BL2运行,BL2开始引导操作系统。
[1] S3C6410X USER'S MANUAL.pdf, REV 1.20 [2] S3C6410_Internal_ROM_Booting.pdf, REV 1.00 [3] http://blog.chinaunix.net/space.php?uid=26470747&do=blog&id=3025478