基于 MT28EW的FLASH控制原理
本设计是基于MT28EW_QLLP_01G_ABA_0SIT-1287008的控制器,主要实现对flash的读写擦除控制,模式为×16。(此文档只是做一个记录,方便以后查看,写的不会太详细,详细设计还是自行查看官网文档,不懂再私下询问。)
1.FLASH控制原理及命令
对flash的操作分为byte模式及word模式,也就是×8及×16两种模式。此文档对×16模式进行简单操作,×8模式时序与×16并无差别只是相关命令及引脚有所改变。在实际测试中,可先使用镁光公司提供的仿真模块进行测试,完成之后再上板测试,仿真模块不会用就私下问我吧。
1.1 flash擦除命令
此款flash只有块擦除(128k)及全部擦除(1G),一般也只会使用块擦除。本次测试对0x1000000处进行擦除。
擦除命令序列如下:
时序如下:
结果如下:
开始擦除
擦除完成
1.2 flash读写命令
写命令序列如下:
读命令序列如下:
发送命令序列至flash,即可对flash进行写操作,由于flash的操作实际是通过缓冲区,故数据的读写均需要
满足flash的缓冲区大小。此款芯片的flash缓冲区分别有32,64,128,256,512,几种模式,故每次操作的数据大小均需在此范围之类,可根据实际情况进行选择。
程序测试首先对0x1000000处进行写数据操作,写输入数据为0xaaaa,写完512个字节后,回读写入的数据进行校验。唯一需要注意的是命令中的3个BAd需要完全一样,在官方文档中有具体说明,如果不一样,可能仿真能成功但上板不一定能成功。(flash的硬件写原理是把’1’变成’0’,即你能写入“0000”,但绝对不能写入“ffff”,只能通过擦除命令,将flash清空,不要通过写命令进行无用操作。)
写时序如下:
写测试结果如下,可见在flash的相应位置读出的数据为写入数据。
基本常用的也就这三种命令,如果需要使用其他的命令,只需要按当前时序,更改命令即可。另外需要注意的就是官网文档给的一个时钟周期最小为60ns。