合金装备5阿富汗传送点:fs2410移植u-boot之修改SDRAM配置

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 04:23:38
fs2410移植u-boot之修改SDRAM配置 (2009-09-22 17:20) 分类: 移植U-BOOT引导程序

一、SDRAM简介     SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存取存储器,同步是指Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。 二、修改SDRAM的配置     SDRAM的初始化工作主要在board/fs2410/lowlevel_init.S文件中进行设置存储控制器的。检查BANK的设置如下:

    根据HCLK设置SDRAM的刷新参数,主要有REFCNT寄存器。由于我所用的开发板的HCLK设置为100Mhz,根据SDRAM芯片(K4S561632数据手册上注:64ms refresh period (8K Cycle))的参数计算REFCNT寄存器的值。计算公式如下:

R_CNT=2^11+1-SDRAM时钟频率(MHz)*SDRAM刷新周期(us)

则:修改#define REFCNT 0X4F4

    对于S3C2410开发板而言,将FCLK设为200MHz,分频比为FCLK:HCLK:PCLK=1:2:4,那么修改board/fs2410/fs2410.c如下:

int board_init (void)
{
    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
    S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();

        clk_power->CLKDIVN = S3C2410_CLKDIV;

        __asm__(    "mrc    p15, 0, r1, c1, c0, 0\n"
                    "orr    r1, r1, #0xc0000000\n"
                    "mcr    p15, 0, r1, c1, c0, 0\n"
                    :::"r1"
                    );

    /* to reduce PLL lock time, adjust the LOCKTIME register */
    clk_power->LOCKTIME = 0xFFFFFF;

    /* configure MPLL */
    clk_power->MPLLCON = S3C2410_MPLL_200MHZ;

    /* some delay between MPLL and UPLL */
    delay (4000);

    /* configure UPLL */
    clk_power->UPLLCON =  S3C2410_UPLL_48MHZ;

    /* some delay between MPLL and UPLL */
    delay (8000);

    /* set up the I/O ports */
    gpio->GPACON = 0x007FFFFF;
    gpio->GPBCON = 0x00044555;
    gpio->GPBUP = 0x000007FF;
    gpio->GPCCON = 0xAAAAAAAA;
    gpio->GPCUP = 0x0000FFFF;
    gpio->GPDCON = 0xAAAAAAAA;
    gpio->GPDUP = 0x0000FFFF;
    gpio->GPECON = 0xAAAAAAAA;
    gpio->GPEUP = 0x0000FFFF;
    gpio->GPFCON = 0x000055AA;
    gpio->GPFUP = 0x000000FF;
    gpio->GPGCON = 0xFF95FFBA;
    gpio->GPGUP = 0x0000FFFF;
    gpio->GPHCON = 0x002AFAAA;
    gpio->GPHUP = 0x000007FF;

    /* arch number of SMDK2410-Board */
    gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;

    /* adress of boot parameters */
    gd->bd->bi_boot_params = 0x30000100;

    icache_enable();
    dcache_enable();

    return 0;
}

    对于上述函数,需要添加宏定义:

    #define  S3C2410_MPLL_200MHZ  ((0x5c<<12)|(0x04<<4)|(0x00))

    #define  S3C2410_UPLL_48MHZ   ((0X28<<12)|(0X01<<4)|(0X02))

    #define  S3C2410_CLKDIV            0X03

 

    此时完成了对于SDRAM的修改任务了。