W25Q128的写入过程不太理解,原子哥能给分析下吗?

2019-07-20 01:51发布

Flash是每次写入之前都要先擦除吗?
看程序的时候有一句 if(i<secremain) ,i<secremain不是没么也要擦除呢有超出扇区吗,为什也要擦除呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
Theone
1楼-- · 2019-07-20 06:45
回复【2楼】sdjkjsdh:
---------------------------------
这个就是先校验secremain区域内需不需要进行擦除,如果到最后都没有检测到需要擦除的块,即 i==secremain i就是起计数的作用,那就说明不需要擦除,如果某一块需要擦除,那肯定就提前退出的循环,i小于secremain。所以判断应该写成小于才需要擦除。
sdjkjsdh
2楼-- · 2019-07-20 10:10
 精彩回答 2  元偷偷看……
sdjkjsdh
3楼-- · 2019-07-20 12:27
 精彩回答 2  元偷偷看……
Theone
4楼-- · 2019-07-20 15:07
回复【4楼】sdjkjsdh:
---------------------------------
是这样的 
1.FLASH可用空间的数据应该是0xFF
所以检测到非0xFF(!0xFF)的值的时候就说明这个扇区写入了数据,如果要重新写入数据,只能先对这个扇区进行擦除,然后才可以写入FLASH;

2.数据写入到哪个位置,是要看你给这个函数提供的地址是什么,你可以通过提供的这个地址确定是属于哪个扇区,或者哪个块。
而且 我也不太清楚256个块是哪来的? 原子板上的是16M的FLASH。也不会只有256个块啊。
sdjkjsdh
5楼-- · 2019-07-20 16:14
回复【5楼】Theone:
---------------------------------
哦,我理解了,您这两条解释很清晰,谢谢您的耐心回复。
Alter
6楼-- · 2019-07-20 19:52
 精彩回答 2  元偷偷看……

一周热门 更多>