Nor Flash是Intel在1988年推出的非易失闪存芯片,可随机读取,擦写时间长,可以擦写1~100W次,支持XIP(eXecute In Place)。

本文以JS28F512M29EWH为例分析Nor Flash芯片的特性以及读、擦、写、查询等操作的具体实现原理。

 

1、芯片特性

1)页大小32Bytes, 块大小128KB, 写缓冲区1KB(芯片厂家决定写缓冲区大小)

2)随机或者按页读取

3)以块为单位擦除、写入(擦除之后所有位默认为1)

4)WP#引脚决定锁保护第一个块或者最后一个块(具体哪一个块由芯片厂家决定)

5)Byte#引脚决定数据总线位宽,低电平时为x8模式,高电平时为x16模式(数据总线位宽,地址总线位宽由硬件连接和CPU控制器决定)

6)兼容JEDEC或者CFI协议(JEDEC制定)

7)Extended Memory Block

 

2、引脚说明

nios读写FIFO nor flash读写次数_地址总线

1)Address Inputs (A0~Amax)

地址输入信号

2)Data Inputs/Outputs(DQ0~DQ7)

数据输入输出信号

3)Data Inputs/Outputs(DQ8~DQ14)

当BYTE#引脚为低电平(x8模式)时,DQ8~DQ14均为高阻态;当BYTE#为高电平(x16模式)时,DQ8~DQ14有效

4)Data Input/Output or Address Input (DQ15/A-1)

当BYTE#引脚为低电平(x8模式时),该引脚为A-1,即地址最低位;当BYTE#引脚为高电平(x16模式)时,该引脚为DQ15。

5)Chip Enable(CE#)

当CE#为低电平时,允许Bus Read和Bus Write操作;当CE#为高电平时,禁止Bus Read/Write操作

6)Output Enable(OE#)

输出使能控制信号,控制Bus Read操作

7)Write Enable(WE#)

写使能控制信号,控制Bus Write操作

8)Vpp/Write Protect(WP#)

当WP#引脚为低电平时,写保护第一个或者最后一个块。

备注:对于2Gbit或者1Gbit的Nor Flash,写保护第一个块和最后一个块;对于低于1Gbit的Nor Flash,写保护最后一个块(芯片厂家自定义)

nios读写FIFO nor flash读写次数_数据总线_02

9)Reset(RST#)

复位信号

10)Ready/Busy Output(RY/BY#)

在擦写操作时为低电平,在读操作时为高电平

11)Byte/Word Organization Select(BYTE#)

BYTE#引脚为低电平时,为x8模式(数据总线位宽);为高电平时,为x16模式

 

3、Nor Flash硬件连线

  从引脚说明部分可以看到,Nor Flash有自己独立的地址总线和数据总线,这样的总线称为Local Bus总线。

  通常,硬件设计上,x16模式下Nor Flash地址总线A0~An与处理器的地址总线A0~An是一一对应直连的。x8模式下错一位,Nor Flash地址总线A-1~An-1与处理器地址总线A0~An一一对应。

 

4、命令集和工作模式

  Nor Flash的读取和RAM很类似,但是不可以直接进行写操作,对Nor Flash的写操作需要遵循特定的命令序列,最终由芯片内部的控制单元完成写操作。

  Nor Flash和Nand Flash一样,必须先擦后写。

  此外,Nor Flash芯片内部还写入了一些特定信息,需要进入特定模式查询。

nios读写FIFO nor flash读写次数_数据总线_03

nios读写FIFO nor flash读写次数_nios读写FIFO_04

  Nor Flash的Reset、Read、Program、Erase、Read CFI Query均需要通过上述命令序列才能实现。比如,往0x55地址写入0x98,才能进入Read CFI Query模式获取芯片预置信息。

 

5、CFI接口(Common Flash Interface)

  JEDEC(Joint Electron Device Engineering Council)即电子元件工业联合会。JEDEC是由生产厂商们制定的国际性协议,主要为计算机内存制定。JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。工业标准的内存通常指的是符合JEDEC标准的一组内存。

  不同公司的Nor Flash在erase/program/lock/unlock等操作上有差别,即command set不一致。

  CFI接口是由Intel, AMD, Sharp, Fujutsu推动JEDEC制定的一个通用接口,用来帮助程序读取Flash的制造商ID和设备ID,确定Flash的大小,获取Flash的各个物理特性,比如block块的擦除时间等。CFI标准目前只支持Parallel Nor Flash,还不支持SPI Flash和Spansion的ORNAND Flash。

 

CFI标准包括以下五部分:

 

nios读写FIFO nor flash读写次数_数据总线_05

  CFI是一组标准的数据结构,通过Read CFI Query Command命令(往0x55地址写0x98)进入Read CFI Query模式查询。为统一起见,通过CFI接口查询时,CFI接口地址均为Flash芯片的地址,通过CFI接口查询到的数据,以D7~D0低字节为准。

 

1) CFI Query Identification String CFI查询识别码字符串

         在Read CFI Query模式,通过读取查询识别码信息部分,可以判断Nor Flash芯片是否支持CFI。

 

nios读写FIFO nor flash读写次数_nios读写FIFO_06

         比如,在x16模式下,读取0x10开始的连续三个字节,如果为QRY字符串,则表示Nor Flash支持CFI。

2) System Interface String 系统接口字符串

         在Read CFI Query模式下,通过读取系统接口信息部分,可以获取Nor Flash芯片的电气特性。

 

nios读写FIFO nor flash读写次数_nios读写FIFO_07

3) Device Geometry Definition 设备物理结构信息

         在Read CFI Query模式下,通过读取设备物理结构信息部分,可以获取Nor Flash芯片的容量、数据总线位宽、单次写入字节数最大值、擦除块大小等信息。

 

nios读写FIFO nor flash读写次数_引脚_08

4) Primary Vendor-Specific Extended Query 原始设备提供商查询信息

         在Read CFI Query模式下,通过读取原始设备提供商信息部分,可以获取厂商信息。

 

nios读写FIFO nor flash读写次数_数据总线_09

5) Alternate Vendor-Specific Extended Query 可选供应商自定义扩展查询信息

         厂家自定义,一般不涉及。