一块2440开发板烧写了NBoot,然后通过串口下载Eboot.nb0,
void ComDownload()
{
int i,tmp;
unsigned short checkSum=0,dnCS;
unsigned long DownloadFileSize,fileSize=10;
unsigned char *downPt,*comloadaddress;
comloadaddress = (unsigned char *)LOAD_ADDRESS_PHYSICAL - 4;
downPt=comloadaddress;
Uart_SendString("\ndownload and run\n");
tmp=RdURXH1(); //To remove overrun error state.
i=0;
while(i
{
while(!(rUTRSTAT1&0x1));
*(downPt+i)=RdURXH1();
if(i==3)
{
fileSize=*((unsigned char *)(comloadaddress+0))+
(*((unsigned char *)(comloadaddress+1))<<8)+
(*((unsigned char *)(comloadaddress+2))<<16)+
(*((unsigned char *)(comloadaddress+3))<<24);
}
if((i%4000)==0)
WrUTXH1('#');
i++;
}
下载的过程中应该打印出的“#”字符变成了“??”问号,Eboot不能运行。测试串口接收RdURXH1(),我不下载Eboot,只通过键盘输入字符,可以正常打印出#字符,说明串口接收发送都是正常的。想到可能是Eboot.nb0的问题,但是同一个Eboot.nb0文件我用另一块2004开发板是可以通过Nboot正常下载运行的,只是这块开发板比上一块开发板少了Norflash、GPRS等,但是像串口、SDRAM、Nandflash用的芯片都是一样的,原理图上的接法也是一样的。想不出哪里出的问题了,请大伙指点。
另外还有个关于Nboot和eboot的烧进flash的问题,把Nboot烧进NandFlash的第0块,然后把eBoot烧进第2块,Nboot就应该可以引导Eboot了
Nboot中的定义:
dwSector=16*2;//从block:2 page:0开始存放eboot
dwLength=512;//一共12个block;block2-14;256K容量;如果eboot文件大于256K,需要修改该代码
dwRAM=0x30038000;//eboot load Start address;把NAND FLASH内容拷贝到0X30038000
我在用SJF2440烧Eboot时,在“Input target block number:”输入2 ,结果是连Nboot也跑不起来了,Nboot我是烧在第0块的。