uboot下的DRAM的初始化

          在G870中,C版的SDRAM爲128MB(DDR2),E版的SDRAM爲64MB(MDDR),它們在系統存儲空間的基地址都爲0x8000_0000,具體見iMAX25RM的數據手冊:

            在uboot中,我們必須設置好這些參數,主要是基地址和SDRAM的大小等。這裏主要採用到了uboot的一個全局的結構體變量: bd_t : board info數據結構定義,位於文件 include/asm-arm/u-boot.h。主要是用來保存板子參數。

typedef struct bd_info {
int                                    bi_baudrate;        /* serial console baudrate    串口波特率 */
unsigned long                     bi_ip_addr;         /* IPAddress    IP 地址 */
unsignedchar                     bi_enetaddr[6];     /*Ethernet adress    MAC地址*/
structenvironment_s       *bi_env;                //結構體變量定義見46行
ulong                                 bi_arch_number;   /* uniqueid for this board    板子的id*/
ulong                                 bi_boot_params;   /*where this board expects params 啓動參數*/
struct     /* RAM configuration    RAM 配置*/
{
ulong start;
ulong size;
}    bi_dram[CONFIG_NR_DRAM_BANKS];

}bd_t;

       其中紅色部分爲關於RAM的配置,初始化爲:

int dram_init(void)
{
#ifdef CONFIG_MX25_MDDR
    gd->bd->bi_dram[0].start = PHYS_SDRAM_1;  // PHYS_SDRAM_10x8000_0000
    gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
#else
    gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
    gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;

if(CONFIG_NR_DRAM_BANKS == 2)  // 其中CONFIG_NR_DRAM_BANKS = 1  ,因爲只有一個BANKS
{
    gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
    gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
}
#endif
    return 0;
}

           這樣,就設置好了RAM的參數。接下來就是設置SDRAM的控制寄存器了,這裏不再介紹。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章