本帖最后由 吃饱了不饿 于 2014-7-17 19:18 编辑
这两天在学习使用FLASH存储芯片,用的是华邦W25X16这款16Mbits存储器,作为初学者,我感觉到了和EEPROM存储存在的一些有趣的差别,分享一下。如果有新发现,会在此继续补充。虽然很基础,望勿喷;如有描述有误,也望不吝指正。
X16共16Mbits的空间,是一个整体,并引入页page,扇区sector,块block的概念,256B为一页page,16页page为一扇区sector,16扇区为一块block.
1.在写入数据时,使用页编程指令(02h),但在写入数据前必须要用扇区擦除指令(20h)将要写入数据的目标页page进行擦除,使得每个字节变为0xFF,而后在这些字节上写入用户数据,也就是说,如果说某扇区擦除后,只需存储2个数据比如0x11,0x22,那么该页中剩余的254个字节值全是0xFF,而不是0x00;如果在上述0x11所在地址写入新数据0x33,则该地址上此时数据不是0x33,而是与先前值相与,0x11&0x33得到0x11,所以要重新写入数据0x33,必须擦除扇区使之全变为0xFF后,再写入新数据。
2.读出数据时,使用读数据指令(03h),向X16送入该指令后,再送入一内部地址比如Addr,之后X16芯片会将此地址Addr上的数据准备好,用主MCU的SPI接口读出即可,读出后,X16会自动将下一个地址Addr+1的数据准备好以供主MCU读出。由此,使用一个读数据指令即可使FLASH存储器连续送出连续存储的一块数据了。
|