nor flash功能架构 (nor flash主要参数)

norflash主要用在哪里,norflash使用注意事项

来源:韦东山嵌入式专栏_ARM裸机加强版维基教程

作者:韦东山

(本文字数:2682,阅读时长:4分钟)

Nor Flash的连接线有地址线,数据线,片选信号读写信号等,Nor Flash的接口属于内存类接口,Nor Flash可以像内存一样读,但是不能像内存一样写,需要做一些特殊的操作才能进行写操作,读只需像内存一样读很简单。

Nor Flash原理图如图:

norflash主要用在哪里,norflash使用注意事项

Flash介绍

常用的Flash类型有Nor Flash和NAND Flash两种。

Nor Flash由Intel公司在1988年发明,以替代当时在市场上占据主要地位的EPROM和E2PROM。NAND Flash由Toshiba公司在1989年发明。两者的主要差别如下表:

norflash主要用在哪里,norflash使用注意事项

Nor Flash支持XIP,即代码可以直接在Nor Flash上执行,无需复制到内存中。这是由于NorF lash的接口与RAM完全相同,可以随机访问任意地址的数据。Nor Flash进行读操作的效率非常高,但是擦除和写操作的效率很低,另外,Nor Flash的容量一般比较小。NAND Flash进行擦除和写操作的效率更高,并且容量更大。一般而言,Nor Flash用于存储程序,NAND Flash用于存储数据。基于NAND Flash的设备通常也要搭配Nor Flash以存储程字。

Flash存储器件由擦除单元(也称为块)组成,当要写某个块时,需要确保这个块已经被擦除。Nor Flash的块大小范围为64kB、128kB:NAND Flash的块大小范围为8kB,64kB,擦/写一个Nor Flash块需4s,而擦/写一个NAND Flash块仅需2ms。Nor Flash的块太大,不仅增加了擦写时间,对于给定的写操作,Nor Flash也需要更多的擦除操作——特别是小文件,比如一个文件只有IkB,但是为了保存它却需要擦除大小为64kB—128kB的Nor Flash块。

Nor Flash的接口与RAM完全相同,可以随意访问任意地址的数据。而NAND Flash的接口仅仅包含几个I/O引脚,需要串行地访问。NAND Flash一般以512字节为单位进行读写。这使得Nor Flash适合于运行程序,而NAND Flash更适合于存储数据。

容量相同的情况下,NAND Flash的体积更小,对于空间有严格要求的系统,NAND Flash可以节省更多空间。市场上Nor Flash的容量通常为IMB~4MB(也有32MB的Nor Flash),NAND Flash的容量为8MB~512MB。容量的差别也使得Nor Flash多用于存储程序,NAND Flash多用于存储数据。

对于Flash存储器件的可靠性需要考虑3点:位反转、坏块和可擦除次数。所有Flash器件都遭遇位反转的问题:由于Flash固有的电器特性,在读写数据过程中,偶然会产生一位或几位数据错误(这种概率很低),而NAND Flash出现的概率远大于Nor Flash,当位反转发生在关键的代码、数据上时,有可能导致系统崩溃。当仅仅是报告位反转,重新读取即可:如果确实发生了位反转,则必须有相应的错误检测/恢复措施。在NAND Flash上发生位反转的概率史高,推荐使用EDC/ECC进行错误检测和恢复。NAND Flash上面会有坏块随机分布在使用前需要将坏块扫描出来,确保不再使用它们,否则会使产品含有严重的故障。NAND Flash每块的可擦除次数通常在100000次左右,是Nor Flash的10倍。另外,因为NAND Flash的块大小通常是NorF lash的1/8,所以NAND Flash的寿命远远超过Nor Flash。

嵌入式Linux对Nor、NAND Flash的软件支持都很成熟。在Nor Flash上常用jffs2文件系统,而在NAND Flash常用yaffs文件系统。在更底层,有MTD驱动程序实现对它们的读、写、擦除操纵,它也实现了EDC/ECC校验。

Nor Flash的操作

下面我们使用u-boot来体验Nor Flash的操作(开发板设置Nor启动,进入u-boot)。

1).使用OpenJTAG烧写UBOOT到Nor Flash

那么我们怎么用u-boot来操作呢?

Nor Flash手册里会有一个命令的表格,如图:

norflash主要用在哪里,norflash使用注意事项

下面简单的举一些例子:

复位(reset):往任何一个地址写入F0。

读ID(ReadSiliconID):很多的Nor Flash可以配置成位宽16bit(Word),位宽8bit(Byte)。对于我们使用的jz2440开发板使用是位宽16bit,怎样读ID呢?

根据前面的图可知,往Nor Flash的555地址写AA,再往2AA的地址写入55,再往555的地址写入90,然后就可以读ADI地址,就可以读到DDI数据了。

实例1

读数据:

在u-boot上执行:md.b 0

结果(和我们烧进去的数据完全一样):

00000000:170000ea14f09fe514f09fe514f09fe5................
00000010:14f09fe514f09fe514f09fe514f09fe5................
00000020:6001f833c001f8332002f8337002f833`..3...3..3...3
00000030:e002f8330004f8332004f833efbeadde...3...3..3....

可以得出结论:u-boot可以像读内存一样来读nor flash

实例2

读ID(参考Nor手册)

  • 往地址555H写入AAH(解锁)
  • 往地址2AAH写入55H(解锁)
  • 往地址555H写入90H(命令)
  • 读0地址得到厂家ID(C2H)
  • 读1地址得到设备ID(22DAH或225BH)
  • 退出读ID状态:给任意地址写F0H就可以了。

下图为2440和Nor Flash的简易连接图:

norflash主要用在哪里,norflash使用注意事项

2440的A1接到Nor的A0所以2440发出的地址是,Nor Flash收到的地址左移一位。比如:2440发出(555H<<1)地址,Nor Flash才能收到555H这个地址。

下面对在Nor Flash的操作,2440的操作,U-BOOT上的操作进行比较,如下表:

norflash主要用在哪里,norflash使用注意事项

1).当执行过

md.w 0 1

结果(输出厂家ID):

00000000:00c2…(00c2就是厂家ID)

2).当执行过

md.w 2 1

结果(输出设备ID):

00000002:2249I"(2249就是设备ID)

3).当执行

mw.w 0 f0

就退出读ID的状态,

4).执行:

md.b 0

结果:00000000:17.(读到的就是Nor Flash地址·0的数据)

点击“了解更多”阅读更多站内信息