关于Flash的操作,有几个问题需要请教下:
问题1.写半字操作,如下是利用库函数
void Flash_Write(uint32_t Address,uint8_t value)
{
FLASH_Status status = FLASH_COMPLETE;
assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));
status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
if(status == FLASH_COMPLETE)
FLASH_Unlock();
FLASH_ProgramHalfWord(Address,value);
status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
if(status == FLASH_COMPLETE)
FLASH_Lock();
}
这里有个问题:看参考手册,Flash会预读下一个待编程字节,是否全为1,如果不是,则自动停止,但我看了一些例程,在半字写入时,并没有这个检查,如果待写入字节非0xFFFF或0x0000,那不是会出错吗?
如果会出错,那该怎么处理?可以进行半字擦除?
问题2.对于多个半字写入
有两种方式:一种就是一个一个的半字写入;
另一种是整页读出,再写入,会对已有的内容做一个检查,看看待写入区域内是否有内容,给出提醒,或者是编程者已知区域内会有内容,做强制写入
这个步聚就是先读出页内容,然后页擦除,然后把待写入内容加入到擦除前读出的缓冲中,最后写入整页。但由于单页有1KB的容量,这个很费内存。
|