解决不能擦除flash的问题
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user