128M*8bit
1型号 供电电压范围 组织 封装
K9F1G08U0DSIB0 2.7~3.6V X8
2结构:
存储单元阵列:(128M+4096K)bit*8 bit
数据寄存器: (2K+64)bit*8 bit
缓冲寄存器: (2K+64)bit*8 bit
3自动编程与芯片擦除
页编程: (2K+64)bit*8 bit
块擦除: (128k+4k)bit*8 bit
4读页大小: 2K字节
随机最大读取时间:25微秒
连续存取时间:50纳秒
5快速写循环时间:
页编程典型时间:300微秒
块擦除典型时间:2毫秒
6命令/地址/数据复用端口
7硬件数据保护:编程/擦除操作在电源转换时关闭
8可靠的CMOS浮置门技术:
保证:100K编程/擦除次数。
数据保持时间:10年
9命令寄存器操作
10为高速编程设置的缓冲编程操作
11通电自动读操作
12智能复制拷贝操作
13为防盗版而设置的唯一的ID保护
14封装
器件描述
对2048+64=2112字节的一页编程操作典型时间是300微秒,对128KB一块的擦除时间是50纳秒。输出引脚可以作为数据/地址/命令复用。每一页的数据读出时间也很快,平均每个字节只需50纳秒。片内的写控制器,可以自动执行写操作和擦除功能,包括必要的脉冲产生器,内部校验和冗余数据。提供了实时映象算法的纠错码,写操作系统可以利用K9F1G08扩展的100K编程/擦除。
引脚说明:
I/O0~I/O7:数据输入输出,在读操作期间,I/O引脚被用作输入命令/地址/数据。当芯片未被选中或输出,I/O呈高阻态。I/O8~I/O15仅用于*16结构存储器中。当操作写8位地址或命令输入时,I/O8~I/O15不能作为输入命令或者地址,I/O8~I/O15被用于数据输入或输出。
CLE:命令锁存允许。CLE输入使输入的命令发送到命令寄存器。当电平为高,在WE(写芯片使能)信号上升沿,输入的命令通过I/O8~I/O15锁存到命令寄存器。
ALE:地址锁存允许。ALE控制地址输入到片内的地址寄存器。在电平为高时,在WE(写芯片使能)信号上升沿时,地址被锁存。
CE:选通芯片使能,片送信号,当器件在忙状态时,CE=1被忽略,器件不会回到等待状态。
RE:读芯片使能,在RE下降沿,RE控制把数据放到数据总线上,数据输出控制,read时间后,数据有效,同时使用内部的列地址自动加1.
WE:写芯片使能。控制把数据从I/O写入。命令CLE/地址ALE/数据CE在WE上升沿时锁存。
WP:写保护。为不在意的写/擦除操作提供保护。在WP = 0 时(低电平有效)内部的高压生成器复位。
R/B:准备/忙输出。R/B反映当前设备的状态。当它是低电平时,表示编程/擦除操作或随机读写正在进行中,在 R/B=1时,表示这些操作已经完成,它采用开漏输出结构,在芯片未选中时,不会保持为高阻态。
PRE:通电读操作,用于控制通电时的自动读操作,当PRE接到VCC实现通电自动读操作。
VCC:电源端
VSS:芯片接地端
NC:悬空
注意:把各个器件的VCC或者VSS接到共同的电源输出端,不可以把VCC或VSS悬空(共地问题)。
I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7
第一 周期 A0 A1 A2 A3 A4 A5 A6 A7 column address
第二 周期 A8 A9 A10 A11 L L L L column address
第三 周期 A12 A13 A14 A15 A16 A17 A18 A19 row address
第四 周期 A20 A21 A22 A23 A24 A25 A26 A27 row address
注意:
列地址:寄存器开始的地址。
L必须被置低。除了要求的地址周期,存储器禁止输入任何额外的地址周期。
产品说明:
在读操作,和写操作时,为在I/O缓冲区和存储单元之间方便的传输数据,这些数据寄存器和命令寄存器相互联系着。存储单元由32个相互联系的存储单元组成一个nand结构,每个存储阵列在不同的页中。一块包括64页,由两个NAND结构组成,总计32个存储阵列,总计33792nand结构。存储阵列由1024个可擦除的128K字节块组成。
命令、地址和数据在CE=0,WE=0时通过I/O口写入,数据在WE上升沿被锁存。CLE和ALE是各自为地址和命令复用服务的,许多命令要求一个总线周期。复位命令,读状态命令只需要一个总线周期。其他命令如读页操作和块擦除命令,页编程操作需要两个周期(一个周期建立,另一个周期执行操作)。
128M物理空闲区需要28(*8)或者27(*16)地址,因此需要四个周期寻址,列寻址需要两个周期。读页操作和写页操作在命令输入后需要同样4个地址周期。在块擦除操作,仅有2行地址周期需要,通过为命令寄存器 写入明确的命令,选择适当的器件操作。表1定义了明确的命令。器件在块中提供了缓冲写操作。在缓冲写操作模式时,当数据被存储数据寄存器时,被写入存储单元阵列时,可以将数据写入缓冲寄存器。当在需要时,将很多页数据写入时,由于使用了缓冲写操作技术使得写入操作有很大的提高。
芯片包含了通电读操作。可以在通电后第一页自动存取数据而不需要地址和命令,除了增加结构和接口之外,器件提供了从一页到另一页的写操作技术而不需要把数据传送到另外的缓冲存储区。
表1 命令设置
命令 第一周期 第二周期 在忙时接收命令
读 00H 30H
读复录 00H 35H
读ID 90H
复位 FFH O
页编程 80H 10H
缓冲编程cache program 80H 15H
复录写入 85H 10H
块擦除 60H D0H
随机数据输入 85H 10H
随机数据输出 05H E0H
读状态 70H O
NAND闪存技术特性
无效块
无效块是指包含1或多位数据,但是不被三星允许的块,器件包含无效的块和器件包含有效的块有一样的质量和相同的交流/直流电特性。无效块不影响有效块的工作,因为无效块被位层和普通资源层用一个晶体管隔离了,系统设计必须能够凭借地址映像掩盖无效块。第一块,位于块地址00H区是有效的块,而不需要错误纠正。
识别无效块
所有的地址都被擦除(FFH for*8),除了优先写入无效块的信息。无效块的状态定义在空闲区的第一个字节。三星确保每个无效块的第1,2页的2048列设有FFH的数据。在很多情况下,无效块的信息被擦除,信息一旦被擦除,是不可能被恢复的。因此,系统应该能识别无效块基础上的无效块并能够创建无效块信息表,任何试图擦除初始无效信息块是被禁止的。
开始->设置块地址= 0 ->检查“FF orFFFFH”?如果是判断是否是LAST BLock?如果是,结束,否则增加块地址继续检查“FF or FFFFH"?
NAND闪存技术要点
如果在擦除和写操作之前,读状态失败,块就会被代替。因为写操作状态在1页写操作失败不会影响同一块中其他页的数据,块替代会在一页大小的缓冲区找到一个擦除的空块,并重新写入当前目标数据,复制剩下的被替代的块,为了提高存储器空间利用率,普遍建议读或证明失败是由于单个位错误(被ECC声明,而没有被任何块替代,附加的块失败率不包括那些被声明的块)。
失败模式 检查和检测顺序
写操作 擦除失败 擦除之后读状态->块替代
写操作失败 编程之后读状态->块替代
重新读->块替代(或者ECC校验)
读操作 单个位失败 检查ECC->ECC校验
写操作程序流程
开始---》写入80H---》写入地址---》写入数据---》写入10H----》读状态寄存器---》判断I/O6 =1?或R/B=1?---》I/O0 = 0?----否则编程错误;是则进入校验操作----写入00H----》写地址---》等待rR时间---》校验数据?-----是则编程结束;否则编程错误。
*如果写操作导致了一个错误,把错误块中的页映像出来,复制到另一个块。
擦除操作流程
开始---》写入60H--》写入块地址---》写入D0H---》读状态寄存器---判断I/O6 = 1?(状态的状态位)或者R/B =1?---否则继续判断;是则判断I/O0 =0?---是则擦除结束;否则擦除错误。
如果擦除操作发生错误,把错误的块映像出来,用另外的块替代。
读ID操作
获取命令:90H
第一个字节 厂商代码
第二个字节 设备代码
第三个字节 无关
第四个字节 页大小,块大小,空闲区大小,结构,连续最小存取时间
产生坏块的原因是因为NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,所以,在NAND的生产中及使用过程中会产生坏块。
一、坏块的具体表现:
当编程/擦除这个块时,不能将某些位拉高,这会造成Page Program和Block Erase操作时的错误,相应地反映到Status Register的相应位。
二、坏块的种类:
1.先天性坏块
这种坏块是在生产过程中产生的,一般芯片原厂都会在出厂时都会将坏块第一个page的spare area的第6个byte标记为不等于0xff的值。
具体标记的地方是,对于现在常见的页大小为2K的NandFlash,是块中第一个页列地址为2048的位置(旧的小页面,pagesize是512B甚至256B
的nandflash,坏块标记是spare area的第6个字节)
2. 后天性坏块
这种坏块是在NAND Flash使用过程中产生的,如果Block Erase或者Page Program错误,就可以简单地将这个块作为坏块来处理,这个时候需要把坏块标记起来。为了和先天性坏块信息保持一致,将新发现的坏块的第一个page的spare area的第6个Byte标记为非0xff的值。
三、坏块的处理
四、错杀坏块的补救方法
如果在对一个块的某个page进行编程的时候发生了错误就要把这个块标记为坏块,首先就要把其他好的page里面的内容备份到另外一个空的好块里面,然后,把这个块标记为坏块。当发生"错杀"之后,我们可以在进行完页备份之后,再将这个块擦除一遍,如果Block Erase发生错误,那就证明这个块是个真正的坏块,放心的做好标记吧!
最后需要补充说明的是,之所以要使用spare area的第六个byte作为坏块标记,是因为NAND Flash生产商的默认约定,例如:Samsung,Toshiba,STMicroelectronics都是使用这个Byte作为坏块标记的。
NANDFLASH地址数据的确定
NAND Flash 使用8位数据线,同时作为地址线,命令线,数据线复用。类似于平时使用的点阵液晶显示器的操作方式。nand flash 内部分为块、页,其中一块nandflash包含若干BLOCK,每个block包含若干page。
首先将数据列一下:
1 page = 2112 Byte = 0x840Byte;用PS表示
1 Block = 64 page = 64 *2112 Byte = 132 KB
假如需要访问第a Block,第b页的第n个字节(这里block 、page和页内址均为从0开始计数)
当前如果我们知道具体的block、page和页内位置,我们可以直接将三个参数组织后,分别传递给页地址A14-A20,A21-A32,A0-A13 ???
同时也可以根据给出的地址绝对值计算出相应的block 、page和页内位置。
绝对地址SUM = 块大小*块号 + 页大小 *页号 +页中位置
= 132KB * a +2112Byte * b + num = (64*a + b )*pagesize + num
所以绝对地址必定为页大小的整数倍 + 页内的位置大小
确定column address 列地址:页大小为12位,即绝对地址低12位为column address A0 -A11
A0-A11 = SUM%PS,余数就是页内地址 num
假设Num = 1077byte = 0x435 ,则 A0-A7 = 0X35,A8-A11 = 0X435>>8 = 0X4 右移八位
低八位作为第一个发送周期发送,剩余四位作为第二周期的高四位发送,另外四位为低电平0.
确定page address :每个block有64个页,即值为0~ 0x40,占7个bit位,即A12 -A18
假定 a =5, b=2,num= 1077byte .则sum= 675840 = 0xA5000 = 1010 0101 0000 0000 0000
1st 周期 A7 - A0 0000 0000 = 0x00
2st 周期 A11- A8 0000 0000 = 0x00
3st 周期 A19 - A12 1010 0101 = 0xA5
4st 周期 A27 - A20 0000 0000 = 0x00
注意,与图中对应的*L,意思是地电平,由于未用到那些位,datasheet中强制要求设为0,所以,才有上面的2nd周期中的高4位是0000
我们要访问第 7000 个块中的第 64 页中的 1208 字节处的话,所要传入的地址就是分 4 个周期,分别传入两个列地址:0x00,0x00然后再传2个行地址:0xA5,0x00这样硬件才能识别。行地址(页地址)(row address):指page在整个nand芯片中的索引.列地址是页内地址。nandflash一页的main area大小是2k,spare area的大小是64bytes,所以需要12个数据线才能完全寻址到2k+64
④页寄存器:由于对nand flash读取和编程操作,一般最小单位是page。所以nand在硬件设计时候,对每一片都有一个对应的区域用于存放将要写入到物理存储单元中区的或者刚从存储单元中读取出来的一页的数据,这个数据缓存区就是页缓存,也叫页寄存器。所以实际上写数据只是写到这个页缓存中,只有等你发了对应的编程第二阶段的确认命令0x10之后,实际的编程动作才开始把页缓存一点点的写到物理存储单元中去,这也就是为什么发完0x10之后需要等待一段时间的原因。
Nand Flash的地址寄存器把一个完整的Nand Flash地址分解成Column Address与Page Address.进行寻址
Column Address: 列地址。Column Address其实就是指定Page上的某个Byte,指定这个Byte其实也就是指定此页的读写起始地址。