凌阳科技大学计划论坛

首页 » 32位SPCE3200技术讨论区 » SPCE3200应用技术 » 请教一个nand flash ECC & sparea area的问题。
kui.chen - 2008-4-30 14:39:00
对于小容量的nandflash来说,一个page = 512byte + 16byte

每一个page对应的address是由
8 bit Column Address  + n bit line address.

感觉这么多address不够一个page的528byte来分。

比如说要访问它的sparea area的时候(主要是读/写ECC code),我要发的address该发多少呢?
coffee02182006 - 2008-4-30 14:41:00
顶一哈,我也有相同的问题哦!
  希望斑竹能给予帮助哦!
qxq005 - 2008-4-30 15:00:00
NandFlash器件通过CLEALE信号线实现I/O口上指令和地址的复用。指令、地址和数据都通过拉低 WE和CEI/O口写入器件中。CLEALE是否为高决定了当前写入的数据是命令还是地址,或者是数据。一些命令只需要一个总线周期完成,例如,复位命令、读命令和读状态命令等;另外一些命令,例如页写入和块擦除命令等,则需要2个周期,即在CLE有效的情况下启动两次WE信号来写入命令。下 列举出了以K9F5608U08为例的NandFlash具备的命令。
K9F5608U0B具备的指令和功能

功能
第一个周期
第二个周期
器件忙时是否接收
读方式1
0x00/0x01
-

读方式2
0x50
-

读芯片ID
0x90
-

复位
0xff
-

页写入
0x80
0x10

回拷贝
0x00
0x8a

块擦除
0x60
0xd0

读当前状态
0x70
-

kui.chen - 2008-4-30 15:57:00
谢谢你的解答,但是貌似不能解决我的疑问。

我要问的问题是(举个例子):

假设现在一个page是512byte + 16byte
这个page的start address是0x00000000,
如果我要向此page的sparea area写入ECC code,我要发过去的address应该是多少?

谢谢!
luckymxq - 2008-4-30 17:25:00
首先我建义您到网上去下载K9F2808U0C的DataSheet看一下,因为我下面讲的也许不够详细,呵呵!
      1、K9F2808U0C能够给用户用的容量只有128Mbit,再加上4Mbit的芯片内部的信息存储空间,所以总的容量大小为132Mbit
      2、该芯片用A0~A7作列地址,用A9~A23作行地址,那么地址数就是23位,因为该芯片是以字节来存,所以要再乘8,故能寻址
            的空间是128Mbit。
      3、该芯片分为32Page,1个Page有1024blocks,1个block有528byte.
      4、下面是1个block的具体分区情况:
       

附件: 12.JPG
luckymxq - 2008-4-30 17:29:00
3、该芯片分为32Page,1个Page有1024blocks,1个block有528byte.
这一句我打错了,请原谅!
luckymxq - 2008-4-30 17:30:00
应该是:该芯片分为1024blocks,1个blocks有32Page,1个Page有528byte.
luckymxq - 2008-4-30 17:32:00
要往sparea area写入数据的时序:

附件: 11.JPG
luckymxq - 2008-4-30 17:43:00
其实SPCE3200内部有NAND Flash的控制器,这样会使对NAND Flash的操作会简单很多,要写什么数据到NAND Flash中只要往相应的寄存器写入什么数据便可,所以还是建义你先看一下SPCE3200的NAND Flash控制器的设置,然后结合DataSheet,这样会更快上手的。
kui.chen - 2008-5-5 8:46:00
谢谢你们的解答,我想问的是
你们说的program C area的时候,  50 --> 80 --> address/data --> 10的时候,这里的address应该是多少?

假设现在一个page是512byte + 16byte
这个page的start address是0x00000000,
如果我要向此page的sparea area写入ECC code,我要发过去的address应该是多少?

谢谢!
luckymxq - 2008-5-5 9:34:00
Nand Flash 寻址方式
  NAND Flash的寻址方式和NAND Flash的memory组织方式紧密相关。NAND Flash的数据是以bit的方式保存在memory cell,一般来说,一个cell中只能存储一个bit。这些cell以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。
    这些Line会再组成Page,通常是528Byte/page或者264Word/page。然后,每32个page形成一个Block,Sizeof(block)=16kByte.
    Block是NAND Flash中最大的操作单元,擦除就是按照block为单位完成的,而编程/读取是按照page为单位完成的。
    所以,按照这样的组织方式可以形成所谓的三类地址:
    -Block  Address
    -Page    Address
    -Column Address
    首先,必须清楚一点,对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度可以是8位或者16位,但是,对于x16的NAND Device,I/O[15:8]只用于传递数据。
    清楚了这一点,我们就可以开始分析NAND Flash的寻址方式了。
    以528Byte/page 总容量128Mbit+512kbyte的NAND器件为例:
因为,
    1 block=16kbyte,
    128Mbit=16Mbyte,
    Numberof(block)=1024
    1block=32page,
    1page=528byte=512byte(Main Area)+16byte(Spare Area)
  用户数据保存在main area中。
    512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half和2nd half,各自的访问由所谓的pointer operation命令来选择,也就是选择了bit8的高低。因此A8就是halfpage pointer,A[7:0]就是所谓的column address。
    32个page需要5bit来表示,占用A[13:9],即该page在块内的相对地址。Block的地址是由A14以上的bit来表示,例如128Mb 的NAND,共1024block,因此,需要10个bit来表示,即A[23:14],如果是1Gbit的528byte/page的NAND Flash,共8192个block,则block address用A[26:14]表示。而page address就是blcok address|page address in block
  NAND Flash的地址表示为:
  Block Address|Page Address in block|halfpage pointer|Column Address
  地址传送顺序是Column Address,Page Address,Block Address。
  由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。
  例如,对于128Mbit x8的NAND flash,地址范围是0~0xFF_FFFF,只要是这个范围内的数值表示的地址都是有效的。
  以NAND_ADDR为例:
  第1步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0]上而halfpage pointer即bit8是由操作指令决定的,即指令决定在哪个halfpage上进行读写,而真正的bit8的值是don't care的。
    第2步就是将NAND_ADDR右移9位,将NAND_ADDR[16:9]传到I/O[7:0]上;
    第3步将NAND_ADDR[23:17]放到I/O上;
    因此,整个地址传递过程需要3步才能完成,即3-step addressing。
kui.chen - 2008-5-5 11:26:00
谢谢你刚刚的解答。

你所说的是针对main area部分的操作,我想问的是仅仅对sparea area的操作

一个page = 512byte + 16byte。
512byte需要9bit来寻址(column address),这9bit刚好够main area,那sparea area部分的16byte岂不是没address?那怎么操作~

谢谢!
leajian - 2008-5-5 18:15:00
读Spare area是靠Command来区分的

当发送0x00 Command的时候,送出的Column Address是对1st half 512byte有效的,当送0x1 Command的时候,送处的Column Address是对2nd half 512byte有效的,而如果需要读Spare area,需要送0x50 Command~~

也就是说,地址的组成始终都是:Page+Column,而具体这个Column地址到底是定位到Main Area还是Spare Area,需要看你发的CMD cycle~~~
kui.chen - 2008-5-10 10:31:00
感谢各位高手的解答,我还想请问一下:

一个page可以写三次吗?(1half, 2half,sparea area)

我写完main area后,可不可以不erase,写一次sparea area~

thanks!
leajian - 2008-5-12 20:34:00
可以~
 1 
查看完整版本: 请教一个nand flash ECC & sparea area的问题。