mmc_relocate.c
将uboot.bin从SD卡拷贝到DDR中
- 代码编写
typedef unsigned int (*copy_sd_mmc_to_men) (unsigned int channel, unsigned int start_block, unsigned char block_size, unsigned int *trg, unsigned int init)
void copy_code_to_dram(void)
{
unsigned long ch;
unsigned long dest = 0x34800000; //加载到DDR中的目标地址
unsigned int sec_no = 49; //将uboot.bin烧写到SD卡中,开始扇区号49
unsigned int ret;
ch = *(volatile unsigned int *)(0xD0037488);
copy_sd_mmc_to_men copy_bl2 = (copy_sd_mmc_to_men) (*(unsigned int *)(0xD0037F98));
if(ch == 0xEB000000)
{
//channel 0,
ret = copy_bl2(0, sec_no, 128,(unsigned int *)dest,0);
ret = copy_bl2(0, sec_no + 128, 128,(unsigned int *)(dest + 0x10000),0);
ret = copy_bl2(0, sec_no + 256, 128,(unsigned int *)(dest + 0x20000),0);
}
}
- 在片内16k SDRAM中需要运行此段代码,确保在运行broad_init.c前,将uboot.bin加载到DDR中,以便跳转后可以直接运行broad_init.c,防止发生越界现象。
- 此段代码应该在初始化DDR后执行。