zoukankan      html  css  js  c++  java
  • Uboot中对SDRAM初始化

    项目中遇到需要把64M  SDRAM升级到128M的情况,我们板子上是两片32M的K4S561632C,而K4S511632C是64M的,直接更换不需要重新画PCB。原理图参见TQ2440—V2核心板,将对应电阻重焊后,就可将原来接到A24,A25引脚上的地址线换到A25,A26上。

    u-boot中board/samsung/hfrk2440/lowlevel_init.S中:

    #define BWSCON 0x48000000

    /* BWSCON */
    #define DW8   (0x0)
    #define DW16   (0x1)
    #define DW32   (0x2)
    #define WAIT   (0x1<<2)
    #define UBLB   (0x1<<3)

    #define B6_BWSCON  (DW32)                //两片16位SDRAM并成32位
    #define B7_BWSCON  (DW32)

    #define B6_MT   0x3 /* SDRAM */ 

    /* Determine the memory type for bank6 and bank7.  00 = ROM or SRAM 01 = Reserved (Do not use) 10 = Reserved (Do not use) 11 = Sync. DRAM */
    #define B6_Trcd   0x1   /* 3clk */
    /*在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定 的延迟.S3C2440的FCLK最大的频率值为400Mhz,HCLK最大为133Mhz,PCLK最大为67Mhz。再查一下关于这些个时钟频率的使用就可以知道,内存方面,是由HCLK来控制的。那么经过简单的计算就可以知道,内存的一个时钟周期,最短为7.519ns(1s/133M)。再看一下K4S561632E-UC75的数据手册,关于Trcd的值的描述,K4S561632E-UC75的内存,这个值,最少需要20ns。如果 Trcd为2clk,则时间不够,差一点儿,所以只能填3clk。如果最短的时间都能满足,那么当内存工作在比133Mhz低的情况下,就更能满足了,所以这里的Trcd为3clk。
    */
    #define B6_SCAN   0x1 /* 9bit */
    /* K4S561632H的内存地址的Column Address为(CA0 ~ CA8),即9bit,所以值为0x1,对应64M SDRAM。
        K4S511632H的内存地址的Column Address为(CA0 ~ CA9),即10bit,所以值为0x2,对应128M SDRAM。*/
    #define B7_MT   0x3 /* SDRAM */
    #define B7_Trcd   0x1 /* 3clk */
    #define B7_SCAN   0x1 /* 9bit */

    /* REFRESH parameter */
    #define REFEN   0x1 /* Refresh enable */
    #define TREFMD   0x0 /* CBR(CAS before RAS)/Auto refresh */
    /* SDRAM Refresh Mode   0 = CBR/Auto Refresh 1 = Self Refresh  In self-refresh time, the SDRAM control signals are driven to the appropriate level. */
    #define Trc   0x3 /* 7clk */
    #define Tchr   0x2 /* 3clk */

    #if defined(CONFIG_S3C2440)
    #define Trp   0x2 /* 4clk */
    #define REFCNT   1012
    #else
    #define Trp   0x0 /* 2clk */
    #define REFCNT   1269

      /* 根据HCLK设置SDRAM的刷新参数,主要有REFCNT寄存器。由于我所用的开发板的HCLK设置为100Mhz,根据SDRAM芯片(K4S561632数据手册上注:64ms refresh period (8K Cycle))的参数计算REFCNT寄存器的值。计算公式如下:R_CNT=2^11+1-SDRAM时钟频率(MHz)*SDRAM刷新周期(us)*/
    #endif

    u-boot的include/configs/hfrk2440.h
    /*-----------------------------------------------------------------------
     * Physical Memory Map
     */
    #define CONFIG_NR_DRAM_BANKS 1    /* we have 1 bank of DRAM */
    /* 它是由nGCS确定,两片SDRAM的CS都接到了nGCS0上 */
    #define PHYS_SDRAM_1  0x30000000 /* SDRAM Bank #1 */
    /* SDRAM的物理基地址,blank6的地址就是0x30000000 */
    #define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
    /* SDRAM的大小,根据板子硬件配置,如果是128M,则应该是0x08000000 */
    #define PHYS_FLASH_1  0x00000000 /* Flash Bank #1 */

    #define CONFIG_SYS_FLASH_BASE  PHYS_FLASH_1

    /*-----------------------------------------------------------------------*/


    相关参考http://hi.baidu.com/%B6%C5%BD%F0%CA%F7/blog/item/9fae0b2f68175b2b359bf733.html  
     http://blog.csdn.net/atower_boy/article/details/6290817  

  • 相关阅读:
    python之函数嵌套与闭包
    python之高阶函数
    python之装饰器
    python之内置函数
    python之内置函数:map ,filter ,reduce总结
    Python之reduce函数
    install python2 python3 in same computer
    git basic
    git LF CRLF
    2 thread, first to open chat window, second to make the phone
  • 原文地址:https://www.cnblogs.com/huxingkeji/p/2593841.html
Copyright © 2011-2022 走看看