歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Uboot下的DRAM的初始化

Uboot下的DRAM的初始化

日期:2017/3/1 10:57:18   编辑:Linux編程
在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的控制寄存器了,這裡不再介紹。

Copyright © Linux教程網 All Rights Reserved