|
本帖最后由 chenenzhi 于 2010-1-23 22:51 编辑
我在看BOOTLOADER程序的时候看到一个函数RdNF2SDRAM();它的功能是Copy Image from Nand Flash to SDRAM; 也就是把程序拷贝到SDRAM中,但是我看这个函数如下:
//=======================================================
void RdNF2SDRAM( )
{
U32 i;
U32 start_addr = 0x0;
unsigned char * to = (unsigned char *)0x33F80000;
U32 size = 0x40000;
rNF_Init();
switch(rNF_ReadID())
{
case 0x76:
for(i = (start_addr >> 9); size > 0; )
{
rSB_ReadPage(i, to);
size -= 512;
to += 512;
i ++;
}
break;
case 0xf1:
case 0xda:
case 0xdc:
case 0xd3:
for(i = (start_addr >> 11); size > 0; )
{
rLB_ReadPage(i, to);
size -= 2048;
to += 2048;
i ++;
}
break;
}
}
//=======================================================
问题就处在unsigned char * to = (unsigned char *)0x33F80000;这里,我们不是要把NAND FLASH 中256K的程序拷贝到SDRAM中,那地址应该是0x30000000才对,为什么会是0x33F80000呢?
这个是在EmbedSky_boot.mcp这个工程里面的一个bootloader,只有一个简单的引导linux启动的功能.
另外还有一个问题,为什么地址需要"start_addr >> 11"右移11位或9位? |
|