Nor Flash的一般操作(通用)

    Nor Flash具有其独特的数据保护机制,它可以像内存一样读,但是它不可以像内存一样写,这就会导致我们在向Nor Flash中写数据时会稍显麻烦。这篇文章介绍Nor Flash 的一般操作,适合大多数的Nor Flash芯片,笔者使用的芯片是MX29LV160D T/B,容量为2MB。

    拿到一款Nor Flash芯片,我们首先简明扼要的浏览数据手册上芯片的特性(FEATURES),做到一个大概的了解,接着看相关操作的命令介绍及文字说明,一般来说,芯片手册上的 NOTE内容很重要。至于相关操作的时序,如果你使用的微控制器内部集成有内存控制器,那么你在操作之前,必须严格遵守相关时序来配置内存控制器的寄存器;如果你使用的微控制器内部没有集成内存控制器,那么相关操作中,严格按照时序来编程。

Nor Flash的一般操作(通用)

                                                                                  图1 相关操作指令

         从图1中可以看出,像Nor Flash芯片发送数据或者是读取数据有两种方式,一种是2字节方式(发送的数据和读取的数据都是2字节,short),一种是1字节方式(发送的数据和读取的数据都是1字节,char)。这个特点在编程的时候一定注意,即数据的类型不要搞错了。

        举个例子,进入CFI(COMMON FLASH MEMORY INTERFACE)模式,我们首先向地址为55H的地方写入数据98H即可。

        对于芯片的读写操作,一般都是先编写基本读、写函数。

/*写一个字,微控制器的A1->nor的A0,故需要左移一位*/

#define NOR_FLASH_BASE 0X0

void write_word_nor_flash(unsigned int base,unsigned int offset,unsigned int word)

{

       Volatile unsigned short * p=(volatile unsigned short *)(base+(offset<<1));

       *p=word;

}

/*写命令*/

void nor_command(unsigned int offset,unsigned int command)

{

       write_word_nor_flash(NOR_FLASH_BASE,offset,command);

}

/* 读数据 */

unsigned int read_data_nor_flash(unsigned int base,unsigned int offset)

{

       volatile unsigned short * p=(volatile unsigned short *)(base+(offset<<1));

       return *p;

}

unsigned int nor_dat(unsigned int offset)

{

       return read_data_nor_flash(NOR_FLASH_BASE, offset);

}
 

         想要进入某种模式,输入对应的命令即可。注意,像芯片写数据时,所对应的扇区的初始值一定要是0XFFFF,否则,写无效 。擦除操作或者是写操作时,一定要结合状态位来判断芯片是否擦除或者是写完成。         

     

Nor Flash的一般操作(通用)

                                                                     图(2)擦除操作状态位说明