s3c2440A的数据手册上推荐用的nandflash有两种:
K9S1208V0M-xxxx
K9K2G16U0M-xxxx
而从mini2440光盘里给的芯片手册知道mini2440开发板中用的是k9f1208系列的。
而手册里面看到这个系列也不相同,有16位位宽的,也有8位位宽的。
从开发板的电路图上可以看到他们用的是8位位宽的。从nandflash的手册上看到8位位宽的nandflash特性如下:
一、K9F1208X0A (X8) ARRAY ORGANIZATION(芯片的阵列组织形式)
注:我会尽我以后发表的内容中多用一些中英文穿插,这样有利于我和大家熟悉中文术语与手册上英文术语的对应,便于大家读手册。
这种8位位宽的芯片组织是这样的。从小到大依次为:
cell(单元) bitline(byte或halfword或word,这里是byte.) page(页) block(块)
一块芯片=64M=4096blocks=(4096*32=)128Kpages=4096blocks*32pages*512bytes=64Mbyte=64M*8bits
就是说
1cell=1bit
1bitline(byte)=8bits
1page=512bytes
1block=32pages
1chip=4096blocks
但上面只是按实际存储空间分。而实际上,我想大家也了解,nandflash比较容易出现位反转现像,因而每个page=512bytes(main area)+16bytes(spare area).
大家可能在代码或别人讲代码时见到spare 这个词,就是从这里出来的。
所以实际上是:
1cell=1bit
1byte=8bits
1page=528bytes
1block=32pages
1chip=4096blocks
另外就是,page=2halfpages.
1halfpage=256bytes.
二、nandflash的引脚结构。
nandflash八位宽的脚与十六位宽的区别公在于数据口的不同。其它的都是相同的。
VCC和VSS片上有多个,所有VCC连在一起接电源。所在VSS连一起接地即可,这里不再多讲。
下面我们来说说其余引脚。
1、数据口(IO0~IO7)这个也不必细讲了。
2、CLE(COMMAND LATCH ENABLE)命令锁存使能。
在cpu向nandflash发送命令时,需要向nandflash写数据,只不能什么数据都接收,当发送的是其它内容时,将CLE置0,则不接收。
当写的是命令时,cpu发出写命令给/WE引脚。然后发送命令。此时置CLE为1,则nandflash会在/WE的上升沿将命令数据锁存在相应寄存器中。收到有效命令。(注意对nandflash来说/WE的命令低电平有效,命令结束即为上升沿。
3、/WE(WRITE ENABLE)
即上面所说的写信号。低电平有效。其上升沿进行锁存。
4、ALE(ADDRESS LATCH ENABLE)地址锁存使能
这个引脚的信号与CLE原理相同,当cpu发送地址时,要把它置为1.平时为0.也是在/WE上升沿进行锁存。
5、/RE读使能。与写的道理差不多。
6、R/B这是nandflash要通知验cpu的。是1,表示芯片在可以准备好接受操作。是0表示忙。ready/busy
7、/WP写保护(write protect)在mini2440开发板上用的上接电阻接vCC.
因为nandflash没单独的地址线,所以nandflash无法进行直接寻址(考虑到读者也许真的不一样,这里不明白的是因为没学过计机算原理,所以可以去拿来看看)。
对nand(以下用这个作简称吧,省事些)寻址时,是对ALE置位,并通过八个数据口分四次(称为cycle)传给nand的。
64M=10的26次方,即需传送26位,以A[0~25]表示。那么这四个cycle怎么分呢?前三次传八位,最后传二位?
其实是这样的。上面讲了nand的结构。
最高层是block.共4096即2的12次方个block.
下一层是page.一个block=32即2的5次方个pages.
再下一层是halfpage.一个page=2即2的1次方个halfpages.
一个halfpage=256即2的8次方个bytes.
这样共四地址。从上到下依次称为
block address
page address
halfpage address
column address.正好四段地址,一次发一个好不好?
不好,因为block address可有12位呢,一次发不完。
其实说了半天,数据还真得八个八个的发,说这个有什么用呢?编程时候用。
下面讲一下实际上四个cycle的分法:
1st cycle :->A[0~7]即column address.
2nd cycle:->A[9~16]
3rd cycle:->A[17~24]
4th cycle:->A[25]
从第一个cycle发到第四个cycle就可以了。
有没有觉得不对?3*8=24最后一次发两个才对。怎么最后是一个?
仔细看看,A[8]即halfpage address没有发,为什么呢?
其实这是与nand的读写指令有关的。
K9f1208提供了两个读指令,‘0x00’、‘0x01’。这两个指令区别在于‘0x00’可以将A[8]置为0,选中上半页;而‘0x01’可以将A[8]置为1,选中下半页。
阅读(3221) | 评论(0) | 转发(0) |