对照s3c2440的nandflash controller和K9F1208U0M读了下wince下的对nandflash的操作,感觉不过如此。下面为该nandflash spec的一些笔记。
OM[1:0]=00,Enable NandFlash memory boot,如果为01或10是设置bank0的bus width为16bit或32bit且bootsram在0x40000000-0x40000FFF,11为设置为test mode。
在对nandflash的device进行操作的时候要enable chip select(NFCONT[1]),例如发送命令和地址,读取和写数据。在操作完成后还要再disbale掉。在page program命令之前(也就是80h)要有00h/01h或者50h来选择要操作的区域,其实也就是特指写操作了。
命令集如下:
command 1cycle 2cycle 3cycle
Read1 00h/01h
Read2 50h
ReadID 90h
Reset FFH
Page Program(True) 80h
Page Program(Dummy) 80h 10h
Copy-Block(True) 00h 8Ah 10h
Copy-Blcok(Dummy) 03h 8Ah 11h
Block Erase 60h D0h
Multi-Plane Blcok Erase 60h D0h
Read Status 70h
Read Multi-Plane Statur 71h
command 1cycle 2cycle 3cycle
Read1 00h/01h
Read2 50h
ReadID 90h
Reset FFH
Page Program(True) 80h
Page Program(Dummy) 80h 10h
Copy-Block(True) 00h 8Ah 10h
Copy-Blcok(Dummy) 03h 8Ah 11h
Block Erase 60h D0h
Multi-Plane Blcok Erase 60h D0h
Read Status 70h
Read Multi-Plane Statur 71h
K9F1208U0M为64Mx8bit,共4096个block。data部分:page=512bytes blcok=32pages;spare部分:page=16bytes block=32pages。一个nandflash包含4个plane,每一个plane包含1024个block和528bytes的page register。blcok是按顺序循环放到每一个plane中的,第一个block在第一个plane中,第二个block在第二个plane中...第五个block在第一个plane中...
如果在program或者erase操作的时候出现error,就要将该blcok中的其余page的数据拷贝到另一个没有被用且已经被erase过的block中去。
samsung的nandflash有3个命令的地址指针:第一个命令设置区域为0-255bytes的指针,第二个设置区域为256-511bytes的指针,第三个设置为区域512-527bytes的指针。Read1 00h,从一个page的前半个page开读;Read1 01h,从一个page的后半个page开读;Read2 50h,从一个page的spare开读。
nandflash设备一上电就进入read1模式,这个操作也可通过写命令寄存器00h来初始化,一旦该命令完成就不需要再次写入来完成接下来的page read操作,这时有3种操作可用:random read; serial page read; sequential row read。当page地址变化时,random read模式就被enable了,所用的page的528bytes数据会在12us内传输到数据寄存器,系统控制器可通过检查R/B的输出引脚来判断传输是否完成。
erase操作以block为单位,其余的操作都是以page为单位。在写之前,要先erase整个block。copy-block program是将一个plane中的一个page拷贝到该plane中的另一个page中,并且不利用外部内存。过程:00hcmd(带源page地址)copy整个page到internal page register,8Ahcmd(带target page地址)copy整个internal page register数据到目的page,10hcmd确认命令。multi-plane copy-block program是从4个plane中的page copy数据到4个plane中的不同page中去。[注]第一个00h之后的3个normal read命令都要用03h命令,最后一个确认命令要用10h命令,而另外3个都要用11h命令。
nandflash有个R/B引脚用来给硬件提供一个标识page program,erase,random read操作完成的方法。该引脚通常是高的,当program或erase命令被写到命令寄存器或在random read在加载了地址启动,它就会变成低的。在内部控制器完成了相应操作之后,它会自动变成高。
转载于:https://blog.51cto.com/bluefish/74180