Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240537
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-23 13:55
文章分类

全部博文(69)

文章存档

2016年(11)

2013年(58)

我的朋友

分类: LINUX

2016-05-09 12:09:17

原文地址:NOR Flash 作者:leonwang202

1.NOR Flash简介

   NOR Flash 有“完备的”地址线和数据线。也就是说,

   1) 地址线的条数决定了NOR Flash的大小
   比如23条地址线,NOR Flash大小为  2^23 bit = 64M bit = 8M Byte

   2) 数据线的条数决定了NOR Flash的“存取粒度”
   比如flash大小为16bit,16条地址线,nor flash存取粒度为 16 bit,
   即对于Flash来说1个地址对应着16bit,那么他只需要1条地址线就OK了。

   3) 片内可执行(Execute in place,XIP)
   和内存条一样,NOR Flash有独立的地址线和数据线,对于CPU来说,它和内存条没什么两样。NOR和SRAM都可以连续空间寻址,则片内可执行(指令)。

2. NOR Flash数据线 

   若NOR Flash的数据线多于8条,一般有管脚BYTE#来配置数据线宽度,可以选16mode,8mode

   描述一块NOR Flash时:
         x16 device / x16 mode,表示片子有16条地址线,经过配置,我们用全部16条。
         x16 device / x8 mode,表示片子有16条地址线,经过配置,我们只用其中8条。

   Flash端通过管脚BYTE# 配置地址线

   CPU端通过配置寄存器,来标识所连的NOR Flash用多少条地址线,也就是所谓的 8-bit/ 16-bit Flash
   (例如对于PowerPC,通过OR寄存器来标示8-bit or 16-bit Flash)



3. NOR Flash地址线 

    上面讲了数据线,现在该讲地址线。
    对于8bit/16bit NOR Flash,地址线的接法是不一样的。

    CPU的一个地址能对应多少bit数据,是由CPU硬件总线接口上地址线的条数来决定的。
    但是,站在软件的角度来考虑,一个地址对应的位数是由代码确定的(char,int,long)。
    比如,CPU的Local Bus上有32条地址线,我代码里把地址看成char来读数据。CPU虽然一下子拿到了32bit数据,但是只取最低的8bit,因为代码中只需要8bit(char)
    以下例子中,我们都假设CPU按char来读数据的。



3.1 8-bit flash地址线接法

    CPU一个地址对应8bit数据,8-bit flash的一个地址也是8bit数据,所以他们的地址线一一对应
    以下是从网上找的图,8-bit flash 地址线的接法。



3.2 16-bit flash地址线接法

    CPU的一个地址对应8bit数据,16-bit flash的一个地址是16bit数据,那接法就有讲究了。
    CPU端的最低地址线 A0 要当空,16-bit flash的地址线要错位接,象下面一样。


    实际上,CPU的地址                        16-bit Flash的地址
            0x0,0x1(对应的是16bit数据),     0x0 (这个地址对应有16bit数据) 
            0x2,0x3,                        0x1
            0x3,0x4,                        0x2

    硬件上如何实现上述地址对应呢,错位接线发挥作用了。
    CPU按照char来 读取 0x0,0x1,0x2,0x3(均为CPU的地址)上的数据,则大致有如下过程。

    1.CPU把0x0放到地址总线上,Flash的地址线上肯定也是全0
    2.Flash把地址0x0(Flash地址)上的16bit数据放到数据线上
    3.CPU取地址线的低字节数据 [D0-D7],这就0x0(CPU地址)上的数据


    4.CPU把0x1放到地址总线上,Flash的地址线上还是全0(注意CPU端A0线档空了)
    5.Flash把地址0x0(Flash地址)上的16bit数据放到数据线上
    6.CPU取地址线的低字节数据 [D8-D15],这就0x1(CPU地址)上的数据


    7.CPU把0x2放到地址总线上,Flash的地址线上是0x1 (注意CPU端A0线档空了)
    8.Flash把地址0x1(Flash地址)上的16bit数据放到数据线上
    9.CPU取地址线的低字节数据 [D0-D7],这就0x2(CPU地址)上的数据

    10.CPU把0x3放到地址总线上,Flash的地址线上是0x1 (注意CPU端A0线档空了)
    11.Flash把地址0x1(Flash地址)上的16bit数据放到数据线上
    12.CPU取地址线的低字节数据 [D8-D15],这就0x3(CPU地址)上的数据


4. NOR Flash的操作

   内存条可以直接读,写。
   NOR Flash也可以直接读,但写就比较麻烦了。NOR Flash在Program前一定要Erase。因为Program只能把1->0,只能通过Erase把 0->1。

   NOR Flash接受特殊的命令,来执行erase,program,lock,unlock等操作。
   这些命令,是通过向特殊的地址写特殊的数据来实现的,有些可能需要多个cycle周期

   对于Numonyx的NOR Flash,有如下命令:

阅读(3016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~