复方含漱液饭后漱吗:S3C2410内存设置

来源:百度文库 编辑:中财网 时间:2024/05/09 14:31:37
内存

在该系统中,我们采用K4s561632d作为系统中的内存,该内存在vivi进行加载的时候需要进行参数设置,在基于S3C2410arm系统中提供了多种存储设备的接口,其中包括接ROMSRAMSDRAMNOR FlashNAND Flash等,同时S3C2410的外接存储空间被分为8bank,每个容量为128M

S3C2410的存储控制器有下面的特点:

     /大端(可以通过软件选择),主要针对内存的起始位置

     地址空间:每个bank128M空间

     访问宽度:除了bank0外,所有的bank都是可编程的访问大小,其中包括81632

     总共有8个存储器bank,其中6个用于ROMSRAM,另外两个可以用于ROMSRAM以及SDRAM

     7个固定的存储器起始地址,最后一个bank的起始地址可以调整

     最后两个bank的存储大小可调

     所有bank的访问周期都是可编程的

通常系统中会选择是否使用nand存储器来存储系统的启动程序,在S3C2410复位后,系统的存储bank分布图按照两种不同的方式并不相同,具体情况在S3C2410手册197页。

通常的开发系统中,会选用64MNAND FLASH64MSDRAM来完成相应的存储功能,其中NAND FLASH并不占用任何的bank,他是通过几组寄存器进行访问的,在系统上电后,NAND Flash开始的4k数据被自动地复制到芯片内部一个被称为“Steppingstone”RAM上。Steppingstone被映射为地址0,上面的4k程序完成必要的初始化;SDRAM使用BANK6,它的物理起始地址为6*128M=0x30000000。由于bank67用于SDRAM类型的存储器,并且其大小可变,所以bank7的起始位置并不是确定的,需要根据实际情况考虑,但是在这里有非常重要的一点,当我们使用两个bank的时候,两者的存储容量必须是相同的。下表为两个bank的起始地址分布图:

vivi的启动阶段,我们需要对bank67的存储器进行合理的设置,具体而言就是针对控制bank13个寄存器进行设置。这13个寄存器包括BWSCON(主要用来控制总线宽度,起始地址为0X48000000,复位值为0X000000)、BANKCON0-BANKCON5(分别对应各自bank,起始地址从0X480000040X48000018,复位值为0X0700)、BANKCON6-BANKCON7(对应bank6bank7,起始地址从0X4800001C0X48000020,复位值为0X18008)、REFRESHSDRAM刷新控制寄存器,地址为0X48000024,复位值为0Xac000)、BANKSIZE(设置bank尺寸的寄存器,地址为0X48000028,复位值为0X0)、MRSRB6MRSRB7(分别为bank67的模式寄存器,起始地址为0X4800002C0X48000030,复位值为XXX)。

     BWSCON寄存器对应bank0bank7,每个bank占用4bit,这四位分别表示

n         STx:启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0;对于SRAM,此位为1

n         WSx:是否使用存储器的WAIT信号,通常设为0

n         DWx:使用两位来设置存储器的位宽:00-8位,01-16位,10-32位,11-保留。

n         比较特殊的是BANK0对应的4位,它们由硬件跳线决定,只读。

n         在这里我们要注意,所有存储器的时钟都对应总线时钟,在SRAM中,HCLK与总线时钟相同,在SDRAM中,SCLK也与总线时钟相同

     BANKCON0-BANKCON5的相关设置我们可以参考手册,如下所示:

     BANKCON6-BANKCON7

n         Bank67可以用于SRAMSDRAM

n         MT([16:15]):用于设置本BANK外接的是SRAM还是SDRAM:SRAM-0b00,SDRAM-0b11

n         当MT=0b11时,还需要设置两个参数:Trcd([3:2]):RAS to CAS delay,设为推荐值0b01;SCAN([1:0]):SDRAM的列地址位数,对于本开发板使用的SDRAM HY57V561620CT-H,列地址位数为9,所以SCAN=0b01。如果使用其他型号的SDRAM,您需要查看它的数据手册来决定SCAN的取值:00-8位,01-9位,10-10位。

     REFRESHSDRAM刷新控制寄存器)

         设为0x008e0000+ R_CNT 其中R_CNT用于控制SDRAM的刷新周期,占用REFRESH寄存器的[10:0]位,它的取值可如下计算(SDRAM时钟频率就是HCLK)R_CNT = 2^11 + 1 – SDRAM时钟频率(MHz) * SDRAM刷新周期(uS) 在未使用PLL时,SDRAM时钟频率等于晶振频率12MHz

         PLL:锁相环。S3C2410 CPU主频可以达到266MHzCPU的频率只有12MHz。在使用PLL之后,使得FCLK=200MHzHCLK=100MHzPCLK=50MHzS3C2410有两个PLLMPLLUPLLUPLL专用与USB设备,MPLL用于设置FCLKHCLKHorizontal Sampling Clock)、PLCKFCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM)PCLK用于APB总线的设备(比如UART)

n         AHB总线:其中高速芯片通常采用的AHB总线有以下几个特质:流水线式、非三态总线、支持多主控、总线仲裁与集中地址译码、应答响应机制(非实时)、支持突发。总之,AHB总线适宜于发挥CPU的效率,符合高效总线设计的原则,但是其本身也有总线位宽限制(主要是指令集位宽)SPLIT(切分)选项支持的复杂度。

●      BANKSIZE(存储器大小控制器)

n         [7]=1Enable burst operation

n         [5]=1SDRAM power down mode enable

n         [4]=1SCLK is active only during the access (recommended)

n         [2:1]=010BANK6BANK7对应的地址空间与BANK0-5不同。BANK0-5的地址空间都是固定的128M,地址范围是(x*128M)(x+1)*128M-1x表示05。但是BANK7的起始地址是可变的。假设使用BANK664M空间,我们可以令位[2:1]=010(128M/128M)001(64M/64M):这没关系,多出来的空间程序会检测出来,不会发生使用不存在的内存的情况——后面介绍到的bootloaderlinux内核都会作内存检测。

n         [6]、位[3]没有使用

n          

●      MRSRB6MRSRB7SDRAM模式寄存器)

n         能让我们修改的只有位[6:4](CL)SDRAM K4S561632D不支持CL=1的情况,所以位[6:4]取值为010(CL=2)011(CL=3)