IAP程序地址0x08000000——0x08003000,APP程序地址0x08003000——0x08007000,IAP和APP分别用SWD烧写进去后IAP能够正常运行跳转,APP正常工作。但是在IAP模式下,通过IAP升级就出错了。分析问题出在IAP的FLASH烧写部分。因为APP程序14K左右,C6T6的SRAM只有10K。所以写了上位机每次1K1K的发送数据,对应的写flash程序修改如下:
u32 FlashAdd=0x08003000;
u8 count=0;
if((((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)||(count!=0))
{iap_write_appbin(FlashAdd+count*1024,USART_RX_BUF,applenth);
count++;
}
iap部分如下:
u16 iapbuf[512];
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
u16 t;
u16 i=0;
u16 temp;
u32 fwaddr=appxaddr;
u8 *dfu=appbuf;
for(t=0;t<appsize;t+=2)
{
temp=(u16)dfu[1]<<8;
temp+=(u16)dfu[0];
dfu+=2;//Æ«òÆ2¸ö×Ö½ú
iapbuf[i++]=temp;
if(i==512)
{
i=0;
STMFLASH_Write(fwaddr,iapbuf,512);
}
}
if(i)STMFLASH_Write(fwaddr,iapbuf,i);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>