//将升级代码写入临时存储区
u32 WriteAppBinToFlash2(u32 appxaddr,u8 *appbuf,u32 appsize)
{
u32 t;
u32 iapbuf[UpdatePacketMaxLen/4];//缓存
u16 i=0;
u32 temp;
u32 fwaddr=appxaddr;//当前写入的地址
u8 *dfu=appbuf;
memset(&iapbuf,0xff,sizeof(iapbuf));
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个字节
if((((temp)&0xFFFF0000)==(FLASH_BASE | Flag_Table.ull_vetofflen))&&(((temp)&0x0000FFFF)!=0X00000000))
{
temp = ((temp)&0x0000FFFF)|(FLASH_BASE|ull_vetselect);
}
iapbuf[i++]=temp;
if(i==UpdatePacketMaxLen/4)
{
i=0;
if(STMFLASH_Write(fwaddr,iapbuf,UpdatePacketMaxLen/4))
fwaddr+=UpdatePacketMaxLen;//偏移 UpdatePacketMaxLen=N*4
else
return FALSE;
}
}
if(i)
{
if(!STMFLASH_Write(fwaddr,iapbuf,i))//将最后的一些内容字节写进去.
return FALSE;
}
return fwaddr;
}
|