S3C6410启动过程分析

S3C6410支持多种存储设备,包括片上的Internal ROM、Internal SRAM和片外的Flash/ROM、DRAM。多种启动设备形成多种启动模式,分析如下。

本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10035261.html

1. 存储系统

1.1 存储器结构

存储子系统结构如下图所示。6410的存储系统包括两个内部存储器和两个外部存储器端口(参用户手册1.1节、2.1节、4.3节):
S3C6410存储系统结构图

内部存储器即集成在芯片内部的存储器,有

  • Internal ROM

  • Internal RAM

两个外部存储器端口支持外接存储器

  • Memory Port0(Flash/ROM):
    片选引脚Xm0CSn[5:0],128M×6Banks。
    支持SROM控制器(支持SRAM、ROM、NOR Flash)、OneNAND控制器(支持OneNAND Flash)、NAND控制器(支持NAND Flash)和CF控制器(SDCARD等)所支持的外部存储器。

  • Memory Port1(DRAM):
    片选引脚Xm1CSn[1:0],256M×2Banks。
    支持mobile DDR、DDR、Mobile SDRAM和SDRAM,下文中的DARM即指此四种(相对于SRAM)

1.2 存储系统内存映射

S3C6410内存映射表如下所示:
S3C6410内存映射表

S3C6410X支持32位(4G)物理地址,但实际只用了2G存储空间,地址空间范围为0x0000_0000至0x7FFF_FFFF。
此地址空间分为两部分:前1.75G用于存储器(内部存储器和外部存储器),后0.25G(256M)用于外设。

1.2.1 存储器地址范围

地址范围:0x0000_0000-0x6FFF_FFFF(1.75G),通过SPINE总线访问。
存储器空间分为四个区域,如下:

1) 启动镜像区(boot image area)

地址范围:0x0000_0000-0x07FF_FFFF(128M)

启动镜像区并没有实际的映射内存(mapped-memory)。启动镜像区反映一个镜像,这个镜像指向内部存储区的SteppingStone或静态存储区。启动镜像的地址固定为0x0000_0000。

程序启动从地址0x0000_0000开始,所谓映射,实际上就是跳到。如启动镜像区映射到NOR即程序执行时从0地址直接跳转到NOR中执行。

2) 内部存储区(internal memory area)

地址范围: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闪存启动被选中时该区域能映射到启动镜像区。

3) 静态存储区(static memory area)

地址范围: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功能,主要用于启动时的代码搬运,详细描述在本文的最后。

4) 动态存储区(dynamic memory area)

地址范围: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),每一片选的起始地址可配置。

1.2.2 外设地址范围

地址范围:0x0000 0000-0x6FFF FFFF(256M),通过PERI总线访问。

此地址空间可访问所有的SFR。同样,若数据需从NFCON 或CFCON 传输,那么它们将通过PERI 总线传输。

2. 启动方式

S3C6410设备启动模式如下表所示:
S3C6410启动模式表
S3C6410支持Nand/Nor/OneNAND/Modem/iROM(内部ROM)几种启动方式,与启动模式相关的硬件管脚有:

  • XOM[4:0]:
    XOM[4:1]选择启动设备Nand/Nor/OneNAND/Modem/iROM。
    XOM[0]选择时钟源,为0选择XXTlpll,为1选择XEXTCLK。
  • GPN[15:13]:
    用于识别iROM启动方式时的设备类型。
  • XSELNAND:
    选择使用Nand设备或者OneNand设备(无论是用作启动设备还是存储设备)。为0使用OneNand,为1使用Nand,当NAND和OneNAND均未使用时,为0或1皆可。

启动模式分为两类:

2.1 iROM启动方式

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启动方式如下图所示:
S3C6410 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将执行如下操作,详细流程参考图

  1. 禁用Watch-dog
  2. 初始化TCM
  3. 初始化设备拷贝函数,用于拷贝BL1到SteppingStone中
  4. 初始化栈区域
  5. 初始化PLL
  6. 初始化指令Cache
  7. 初始化堆区域
  8. 拷贝BL1到SteppingStone中
  9. 验证BL1
  10. 跳转到SteppingStone中运行
    S3C6410 iROM启动模式流程图

与启动相关的存储器映射如下表所示:
S3C6410启动相关的存储器映射

2.2 非iROM启动方式

非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所示,即上电后第①步不同,其后步骤基本一样。

3. 总结分析

以下内容来自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.

S3C6410内存映射示意图

当AXI Remap=0时,是非IROM启动方式。

下面从各控制器说起:

  • SROM控制器:
    支持SRAM,ROM,NOR flash。上图中的SRAM0-SRAM5即指SRAM,External ROM则指ROM和NOR flash。SROM控制器支持的存储设备,代码可在其中直接运行。
    因此启动镜像区可直接映射到SRAM0、External ROM,启动代码直接在存储设备中运行。当然SRAM掉电丢失内容,无法作启动设备。

  • OneNAND控制器:
    控制OneNAND flash,代码也可在OneNAND中运行。
    因此启动镜像区可直接映射到OneNAND区,启动代码直接在OneNAND中运行。

  • NAND控制器:
    控制NAND flash,代码不可在其中运行。
    NAND启动时,上电时NAND控制器可自动将自己bootloder区的前4KB代码拷贝到即内部SRAM(SteppingStone),暂称之为DMA功能。
    启动镜像区映射到内部SRAM(限上电直接从内部SRAM执行),内部SRAM中的代码是从NAND时拷贝过来的,因此前面也称SteppingStone映射到了NAND。

  • CF控制器:
    控制CF/ATA card,代码不可在其中运行。
    CF控制器不具备DMA功能,因此SDCARD只能使用IROM启动,无法使用非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开始引导操作系统。

4. 参考资料

[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

posted @ 2018-11-28 21:59  叶余  阅读(1215)  评论(0编辑  收藏  举报