中级会员
 
- 积分
- 423
- 金钱
- 423
- 注册时间
- 2018-5-29
- 在线时间
- 136 小时
|
1金钱
在使用SD卡升级时发现 小于100K 的时都可以正常运行(实验44 录音机实验),超过100K 就无法升级(实验45 视频播放器实验),且会把IAP破坏,查看map文件都是在正常地址内,但是地址检查过不了
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)
写完上面不为为真,进不去。
怀疑写flash 是有问题:
这是写flash
iapfun jump2app;
u32 iapbuf[512]; //2K字节缓存
//appxaddr:应用程序的起始地址
//appbuf:应用程序CODE.
//appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
u32 t;
u16 i=0;
u32 temp;
u32 fwaddr=appxaddr;//当前写入的地址
u8 *dfu=appbuf;
for(t=0;t<appsize;t+=4)
{
temp=(u32)dfu[3]<<24;
temp|=(u32)dfu[2]<<16;
temp|=(u32)dfu[1]<<8;
temp|=(u32)dfu[0];
dfu+=4;//偏移4个字节
iapbuf[i++]=temp;
if(i==512)
{
i=0;
STMFLASH_Write(fwaddr,iapbuf,512);
//fwaddr+=2048;//偏移2048 512*4=2048
}
}
if(i)
STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.
}
红色的是自己修改的
下面是
从SD卡里每次读2048字节,写入FLASH
//len=2048
while(1)
{
/* 每次读取2K的数据到内存缓冲区 */
Res = f_read(&FileBin, Buffer, len, (UINT*)&Br);
ReadLen = Br;
ReceiveData += Br; // 读取的总字节数
if((Res) || (Br == 0))
break;
iap_write_appbin(Addrx,Buffer, ReadLen);
Addrx += len;
}
|
最佳答案
查看完整内容[请看2#楼]
可以参照一下这个
http://www.openedv.com/forum.php?mod=viewthread&tid=65104&highlight=iap%2Bsd
|