解决不能擦除flash的问题

This commit is contained in:
ranchuan
2023-10-08 18:27:10 +08:00
parent 41b36f357e
commit 7f6efb9f5a
14 changed files with 156 additions and 48 deletions

View File

@@ -88,10 +88,13 @@ static int flash_erase(uint32_t sector)
s->mutex=rt_mutex_create("flash_mutex",RT_IPC_FLAG_FIFO);
}
rt_mutex_take(s->mutex,RT_WAITING_FOREVER);
//irq_disable();
FLASH_Unlock();
FLASH_CLEAR_FLAG();
// 对于f103 2048byte为一个扇区这里把扇区地址转化为flash地址
ret=FLASH_ErasePage(sector*2048);
ret=FLASH_ErasePage(FLASH_BASE+ sector*2048);
//FLASH_Lock();
//irq_enable();
rt_mutex_release(s->mutex);
if(ret!=FLASH_COMPLETE)
{
@@ -263,20 +266,24 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len)
//DBG_LOG("write flash addr=%08x",flash_addr);
len+=3;// len不是4字节对齐时强行增加到4字节
//FLASH_Unlock();
for(int i=0;i<len/4;i++)
{
//FLASH_CLEAR_FLAG();
//irq_disable();
//state=FLASH_ProgramByte((uint32_t)addr,data[i]);
state=FLASH_ProgramWord(flash_addr,t[i]);
flash_addr+=4;
//FLASH_CLEAR_FLAG();
//irq_enable();
if(state!=FLASH_COMPLETE)
{
DBG_WARN("flash write failed.ret=%d",state);
DBG_WARN("FLASH->SR=%08X",FLASH->SR);
DBG_WARN("addr=%08X",flash_addr);
ret=-1;
break;
}
flash_addr+=4;
}
//FLASH_Lock();
if(memcmp(addr,data,(len/4)*4)!=0)
{
DBG_WARN("addr=%08x write/read data not equate.",addr);