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