虽然一开始工作就接触过flash芯片,但都是应用层次的接触,并没有直接接触到flash驱动。
直到最近要基于驱动接口直接操作flash芯片,才发现自己对它的使用特定一点都不了解。
先说一下自己的问题,原本打算对flash中的存储空间进行覆盖写,即写过数据后不擦除直接用新的数据进行覆盖。没想到验证的时候一直乱码,查了资料才知道,原来flash芯片不支持覆盖写,只能在擦除过的区域进行写操作,想要重写数据,必须进行擦除,而且擦除一般是按照扇区或者是块进行擦除。根本原因其实是flash芯片的写操作只能将1变为0,而不能将0变为1,擦除之后,flash中是全1的状态,若想将0变为1则只能通过擦除操作。所以严格来说不是不支持覆盖写,因为对于特定的数据(只要不涉及0变1)也可以进行覆盖写。
下面是一篇简单的介绍:
写flash时为什么需要先擦除?
Flash 的编程原理都是只能将 1 写为 0,而不能将 0 写为 1。所以在 Flash 编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为 1 的过程,块内的所有字节变为 0xFF
存储器分为两大类:ram(内存:随机存储器)和rom(外存:程序存储器),分别存数据和程序。