现在有一个项目用的f1,程序分为boot(0x8000000)和app(0x8010000),因为boot有个bug,需要通过app的网络升级功能反向修改boot的代码,在升级过程中发现一个问题,擦除boot代码的时候用到了这么一个函数
void Flash_Clean(void)
{
int i=0,j=0;
FLASH_Status status = FLASH_COMPLETE;
FLASH_Unlock();
printf("unlock
");
delay_ms(500);
for(i=0;i<20;i++)
{
for(j=0;j<4;j++)
{
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
status=FLASH_ErasePage(0x08000000+0x800*i);
printf("%d,flash sta:%d
",i,status);
if(status!=FLASH_ERROR_WRP)
{
break;
}
}
}
FLASH_Lock();
}
log显示如下:
0,flash sta:3
0,flash sta:3
0,flash sta:3
0,flash sta:3
1,flash sta:3
1,flash sta:3
1,flash sta:3
1,flash sta:3
2,flash sta:4
3,flash sta:4
4,flash sta:4
5,flash sta:4
6,flash sta:4
7,flash sta:4
8,flash sta:4
9,flash sta:4
10,flash sta:4
11,flash sta:4
12,flash sta:4
13,flash sta:4
14,flash sta:4
15,flash sta:4
16,flash sta:4
17,flash sta:4
18,flash sta:4
19,flash sta:4
其中3是FLASH_ERROR_WRP,4是FLASH_COMPLETE,也就是说单片机前面4k读保护,多次擦写也没用,这是怎么回事?另外产品是批量的,这个问题也是批量产生的,并非个例。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>