S3C6410设备时钟源选择、启动方式选择和内存映射

  

********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

时间:2011.7.23

类别:WINCE bootloader开发

********************************LoongEmbedded********************************

 

S3C6410根据启动设备(boot device)的类型分为支持6种操作模式,启动设备可以是SROM、NOR、OneNAND、MODEM和IROM(internal ROM)任何的一种,见下图

图1

从上图可知S36410的操作模式是系统启动的时候根据XSELAND、OM[4:0]和GPN[15:13]的值来决定是哪种操作模式(比如是IROM)以及操作模式下的具体启动设备(比如是SD或是NAND)。当然了这些引脚的值是根据我们所需要的启动方式来决定的,比如开发板中就支持SD卡和NAND启动的方式,下面尝试从硬件设计的角度来学习是如何确定一些关键设计的。

 

1.      开发板的时钟源选择

 

图2

上图是6410CPU对时钟发生器结构图的部分,这里只是截了一部分图,可知S3C6410的输入时钟源为外部晶振(XXTIpll)和外部时钟(XEXTCLK),其中时钟发生器由三个PLLs(Phase Locked Loop,锁相环)组成,最高可以产生1.6GHz频率的时钟,这里开发板的设计是选择12MHZ的外部晶振作为时钟源,见下图:

图3

因为选择外部晶振作为始终源,所以由XOM0=0,见下图:

图4

 

2.      开发板采用的启动方式

由图2和3中的内容可知XOM0=0,因为采用SD卡和NAND的启动方式,结合图1可知,OM[4:0]=11111,而且可知XSELNAND=1,那么就确定了这些引脚的设计,如下图:

图5

下图是XSELNAND引脚设计部分:

图6

 

 

2.1   SD卡启动方式

SD卡启动方式,而我们选择的是SD/MMC(CH1),根据图1可知GPN[15:13]=111,所以可以通过图5的SW1开关的2打到“OFF”,也即高电平的状态,就可以实现是SD卡启动的方式了。

2.2   NAND启动方式

开发板采用的是NAND是1GBytes的K9G8G08U0M,其一页大小为2048Bytes,需要5个时钟周期,见下图

图7

结合图1和图7可以得到NAND启动方式的的GPN[15:13]=101,这时就需要

通过图5的SW1开关的2打到“ON”,也即低电平的状态,就可以实现是NAND卡启动的方式了。

 

 

3.      S3C6410的存储器映射

S3C6410支持32位的物理地址空间,被分为memory和pheriperal部分。

 

3.1   memory空间

memory地址范围为0x0~0x6FFFFFFF(1792MBytes),通过SPINE总线memory空间。Memory又称为主内存,又被分为启动镜像区(boot image area)、内部存储区(internal memory area)、静态存储区(static memory area)和动态存储区(dynamic memory area)。

 

1)      启动镜像区

启动镜像区的物理地址范围是0x00000000~0x07FFFFFF(128MB),这个区域是用于启动系统的,但是这个区域内并没有实际的存储介质与之对应。这个区域反映一个镜像,这个镜像指向内部存储区或是静态存储区的一部分。启动镜像区的开始地址固定式0x00000000。在本设计中,通过上面描述的OM[4:0]选择据顶的启动介质后再把相应的介质的物理地址映射到这个启动镜像区,比如说选择了IROM启动方式(见图1)后,就把IROM所占用的地址空间映射为0x00000000开始的空间。在本设计中,比如我们选择NAND作为启动介质,而又是Xm0CSn2选择NAND的片选,那么就把0x20000000~0x27FFFFFF(为什么是这个范围呢?见下图)这128MB的物理地址映射到启动镜像区。

图8

 

2)      内部存储区

内部存储区用于启动代码(boot loader)访问内部ROM和内部SRAM,内部的SRAM也成为steppingstone。每块内存存储器的起始地址都是固定的,其中内部ROM的范围是0x08000000~0x0BFFFFFF(见图8),当然内部的ROM并没有64MB这么多,而实际只有32KB用于存储,该区域是只读的,并且当内部ROM(IROM)启动被选择时,该区域能映射到启动镜像区,此种情况下,该区域存放放的是IROM方式下的启动代码,选择IROM启动的时候首先运行的就是这部分的代码,称为BL0,这部分代码由厂家固化。内存SRAM的范围是0x0c000000~0x0fffffff,实际可用的SRAM按照三星的手册是4KB,其实这就是用于nand flash启动的Steppingstone(但是这个Steppingstone是8KB,这2者似乎有矛盾,我觉得应该是写这部分的作者的笔误)。该区域能被读写,当NAND启动被选择时能映射到启动镜像区。

  

3)      静态存储区

静态存储区域的地址范围是0x10000000~0x3FFFFFFF(6*128MB),通过该地址可以访问SROM、SRAM(比如DM9000A)、NOR Flash、同步NOR接口设备和steppingstone。每一块区域代码一个片选(见图8),比如如果用Xm0CSn[1]来作为DM9000A的片选信号,0x18000000~0x1FFFFFFF就代表Xm0CSn[1],我们就可以通过0x18000000~0x1FFFFFFF来访问DM9000A自带的SRAM。每个芯片选择的开始地址都是固定的。

 

虽然Xm0CSn[5:2]可以映射到NAND Flash和CF/ATA等非线性存储器,但我们不能通过静态存储区来访问NAND Flash和CF/ATA的地址空间,相反,当映射到这些存储器的时候这些bank的地址也不能再使用了,而只能通过pheriperal空间的AHB总线来访问这些非线性存储器。有一个例外是如果Xm0CSn[2]被映射到NAND Flash的时候,Steppingstone映射到0x020000000~0x27FFFFFF这块区域,具体一点说是steppingstone这4KB的SRAM被映射到bank2开始的4KB,而在以NAND Flash方式启动的时候bank2被映射到0x00000000开始的地方,那么实际上就是把steppingstone映射到0x00000000,,这样,系统启动的时候,会把NAND Flash的第一个4KB最开始的启动代码读取到steppingstone中 来执行,这个读取的动作是由NAND控制器自动完成的。

 

 

4)      动态存储区

动态存储区的范围是0x40000000~0x6FFFFFFF(3*256MB),其中第一个256MB为保留区,实际使用的动态内存区位0x50000000~0x6FFFFFF,这个范围又分为2个区间,每个区间占256MB,可以通过DMC(动态内存控制器)的Xm1CSn[1:0]来选择对应的区间,这个内存主要是扩展DRAM,最大可以扩展512MB的DRAM,见图8。下图是开发板用

Xm1CSn[作为DRAM的片选信号的电路图:

图9

结合图8,可以得出g_oalAddressTable表的DRAM区域范围如下:

DCD     0x80000000, 0x50000000,  256    ; 256 MB DRAM

 

 

3.2   pheriperal空间

外设区域通过PERI总线访问,其地址范围是 0x70000000~0x7FFFFFFF(256MBytes),这个地址范围的所有的SFR都能被访问,而且如果数据需要从NFCON或CFCON传输,这些数据需要通过PERI总线传输。

 

 

posted on 2011-07-27 13:06  王亮1  阅读(128)  评论(0编辑  收藏  举报

导航