FLASH 读写问题
-
attribute((section("ram_code"))) void internal_flash_test(void)
{
int i = 0;
uint32_t address = 0x32000;
address = 0x32000;
// test 1
memset(WBuffer, 0xaa, sizeof(WBuffer));
WBuffer[0] = 0x01;
WBuffer[1] = 0x01;
WBuffer[2] = 0x01;
WBuffer[3] = 0x01;
flash_erase(address, 256);
flash_write(address, 256, WBuffer);
flash_read(address, 256, RBuffer);
for (i = 0; i < 256; i++)
{
if (RBuffer[i] != WBuffer[i])
lw_log_info("QUAD mode err ");
RBuffer[i] = 0;
}
lw_log_info("QUAD mode END 1");
// test 2
address += 256;
lw_log_info("QUAD mode Read and QUAD Writer %08x", address);
memset(WBuffer, 0x55, sizeof(WBuffer));
WBuffer[0] = 0x02;
WBuffer[1] = 0x02;
WBuffer[2] = 0x02;
WBuffer[3] = 0x02;
flash_erase(address, 256);
// 读前256字节,应该全00x01和0xaa
flash_read(address - 256, 256, RBuffer);
for (i = 0; i < 10; i++)
{
lw_log_info("QUAD mode %02x", RBuffer[i]); // LOG 全部是0xff
}
flash_write(address, 256, WBuffer);
flash_read(address, 256, RBuffer);
for (i = 0; i < 256; i++)
{
if (RBuffer[i] != WBuffer[i])
lw_log_info("QUAD mode err ");
RBuffer[i] = 0;
}
lw_log_info("QUAD mode END 2");
}
在擦除第二块256字节时,第一块读取后全部为0xff. 如果 换成每次都是擦除4096字节,再读取前4096个字节就没有这个问题,是不是FX8008HP擦除最小是4096?
-
是的,Flash 一个Block就是4k