- //将升级代码写入临时存储区
- 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;
- }
|