W25Q128 使用SFUD驱动的问题

发布于 2020-07-29 10:42:31

W25Q128手册中给到的最小擦除单位为4K。
image.png
SFUD中支持256字节写入
image.png
问题:W25Q128写之前不是该先擦除对应扇区再写入吗?如果写256字节的话是不是该先读出扇区内容,加上写入得内容再写下去?但是在SFUD 驱动中并没有看到该操作,不知道是不是有问题。
我当前遇到的问题是,调用sfud_write写入256字节,再读出来,与写入得内容不一致,不知道是否和上面描述的问题相关。`

ret = sfud_write(spi_dev_w25q, my_work_para_list->sample_write_addr, SAMPLE_BLOCK_SIZE, write_buff);
if(ret != 0)
{
    LOG_E("%d spi_dev_w25q sfud_write failed ! ret %d", __LINE__, ret);
    my_work_para_unlock();
    return -1;
}

ifdef FLASH_PARA_VERIFY

ret = sfud_read(spi_dev_w25q, my_work_para_list->sample_write_addr, SAMPLE_BLOCK_SIZE, read_buff);
if(ret != 0)
{
    LOG_E("%d spi_dev_w25q sfud_read failed ! ret %d", __LINE__, ret);
    my_work_para_unlock();
    return -1;
}
ret = memcmp(read_buff, write_buff , SAMPLE_BLOCK_SIZE);
if(ret != 0)
{
    LOG_E("%d sfud_read != sfud_write ret %d", __LINE__, ret);
    my_work_para_unlock();
    return -1;
}

endif

查看更多

关注者
0
被浏览
573
1 个回答
CrisJay
CrisJay 认证专家 2020-07-29

题主可以看一下你所框出的下面一行文字,可编程字节为1-256,所以说是可以写入256个字节的,但是这有个前提,正如题主所说写之前应该先擦除对应扇区,其实就是因为flash的写入操作只能是把1写成0,而不能把0写成1,而擦除操作就是把对应区域的0全部变成1,这样就可以开始有效的写入。如果不进行擦除操作,并且写入的区域已经有值的话由于无法将原来存在的0变成1,就会产生写入后读取的值不同于写入的值。

所以如果想要在已写入的区域写入新值,那么就必须先擦除这个区域,而一次擦除最小就是4096字节。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览