1.1 寻址空间
ARM处理器为32bit处理器,内部32bit地址总线理论寻址空间为4GB,对于6410来说,寻址空间的高2GB在内部为保留(reserved),低2GB(0x0~0x7FFFFFFF)可划分为2部分:主存储区(main memory area)和外设区(peripheral area)。
1.2 主存储空间(Main memory area)
6410内核与主存储空间通过SPINE总线连接,主存储为地址空间0x0~0x6FFFFFFF,大小为1792MB的一片区域;其中主存储空间在6410内部划分为以下几部分:
- Boot镜像区(Boot image area)
- 内部存储区(Internal ROM area and internal SRAM area)
- 静态存储区(Static memory area)
- 动态存储区(Dynamic memory area)
- 保留区(Reserved memory area)
1.2.1 Boot镜像区(Boot image area)
Boot镜像区位于6410寻址空间的0x0~0x07FFFFFF(128MB)位置,这段区域并没有真正的存储设备,实际运行过程中是映射到内部存储区或静态存储区,Boot镜像区固定起始地址为0x00000000。
Boot 镜像区没有实际的存储设备,只是在一些特定区域的“镜像”,之所以有这种位于0x0地址镜像,主要是因为ARM内核启动之后强制PC从0x0地址开始取指有关。至于与哪些特定区域镜像,与系统配置密切相关(关于系统启动配置详见后续章节说明),当系统为:
1) SROM (8 bit/16 bit)启动(booting)
当系统为SROM booting 配置,Boot镜像区为SROM控制器的第0个bank(128MB),即0x10000000~0x17FFFFFF地址,支持的存储器可以是SRAM、ROM、Nor flash等,对应地址片选引脚Xm0CSn[0]。
2) MODEM(8 bit/16 bit)启动(booting)
当系统为MODEM Booting配置,Boot镜像区仅地址为0x00000000~0x00007FFF的32KB区域有效,且对应为6410内部的I_ROM区低32KB字节0x08000000~0x08007FFF。
3) ONENAND 启动(booting)
当系统为ONENAND 模式启动配置,整个Boot镜像区0x0~0x07FFFFFF全部为静态存储器0x20000000~0x27FFFFFF地址镜像,128MB一一对应。
6410支持2 Bank个ONENAND 地址映射区,分别为ONENAND0 和ONENAND1,只有ONENAND0对应的地址才可能在启动时候镜像到Boot镜像区。
4) IROM启动(booting)
IROM启动设置之后,Boot镜像区仅地址为0x00000000~0x00007FFF的32KB区域有效,且对应为6410内部的I_ROM区低32KB字节0x08000000~0x08007FFF。
顺便提及一下,I_ROM主要实现的功能是在系统启动之后,执行一些内核、外设初始化,搬移启动代码到Stepping stone区域,然后跳转到该区域执行后续的Booting。
1.2.2 内部存储区(Internal ROM area and internalSRAM area)
6410的内部存储区分为地址0x08000000~0x0BFFFFFF的64MB I_ROM和地址0x0C000000~0x0FFFFFFF的64MB I_SRAM的两块区域。64MB空间的I_ROM区域实际只有低32KB有效0x08000000~0x0BFFFFFF;64MB空间的I_SRAM区域也不连续分布在0x0C000000~0x0C005FFF区域。
1.2.3 静态存储区(Static memory area)
6410内部的静态存储区地址分布在0x10000000~0x3FFFFFFF,一共6*128MB大小,分为Bank0~Bank5,对应地址片选引脚Xm0CSn[0]~ Xm0CSn[5]。
静态存储区对应的芯片外部接口memoryport0通过外部总线接口(EBI),分别为
SROM控制器、ONENAND控制器、NAND Flash控制器以及CF控制器分享。如下图,memory port0分为片选共享和外部总线接口共享两部分。
静态存储区结构:
摘自《s3c6410 user’s manual REV 1.2》
EBI共享信号如下表:
摘自《s3c6410 user’s manual REV 1.2》
片选信号共享与系统启动模式(包括XSELNAND)和存储区控制寄存器MEM_CTL_CFG的bit5~bit0控制域(MP0_CS_CFG)共同决定。
当系统选择为NANDflash启动配置(XSELNAND=1,OM[4:0]=111x),系统会忽略MP0_CS_CFG的设定,自动使Xm0CSn[2]、Xm0CSn[3]对应NAND Flash CS0、NAND Flash CS1。
当系统选择为ONENANDflash启动配置,系统会忽略MP0_CS_CFG的设定,自动使Xm0CSn[2]、Xm0CSn[3]对应ONENAND Flash CS0、ONENAND Flash CS1。
当系统选择为SROM启动配置,无需配置MP0_CS_CFG,系统自动使Xm0CSn[0]、Xm0CSn[1]对应SROMC CS0、SROMC CS1。
当系统选择为SD启动配置,需要配置MP0_CS_CFG的bit4=1,或bit5=1,使Xm0CSn[4]、Xm0CSn[5]对应到CFCON CS0、CFCON CS1。
MP0_CS_CFG设置:
摘自《s3c6410 user’s manual REV 1.2》
1.2.4 动态存储区(Dynamic memory area)
6410动态存储区地址段0x50000000~0x6FFFFFFF,分为2个bank,每个bank 256MB。