NAND FLASH 2440

    首先看一下NAND FLASH的组成,总最小的存储单元开始,存储的基本器件是MOSFET,具体怎么存储信息与沟道的形成有关(这在数字电路里面介绍得比较清楚),这个单元可能是SLC或者MLC,区别在于单个单元的存储信息量的不同,实现方式上是通过将电压分为多个档次,这样没个档次可以对应一个信息,比如一共4个档次,那么就可以存储2BITS的信息。然后大一点就是PAGE了,一个PAGE可能有几百或者几K BYTES的存储容量。其中PAGE联系之前SDRAM中的PAGE有一个共同的特性,就是指一行所包括的的全部单元(ROW)。这样多个行,也就是多哥PAGE就形成了快BLOCK,多个块就形成了一个芯片。所以地址需要根据这样的结构来进行寻址。外部来看,NAND FLASH 的一个特点是它没有具体的地址总线和数据总线,所以并不挂在CPU外部总线上,而是用IO口代替实现寻址和数据交换,这样的结果也使得不能在NAND FLASH中直接执行程序,因为CPU并不能直接依赖总线去NAND中取指令,所以在2440中配合NAND就有了一个STEPPING STONE。这里想到还有一个就是说,因为CPU RESET后总是从0地址开始取指的,这样从哪个器件启动程序就需要将哪个器件映射到0地址,而做这个工作的就是OM[1:0]引脚对应的内部逻辑单元。

    接着是NAND FLASH的工作原理。由于NAND FLASH的外部结构决定了只能是软件方式串行的操作,所以整个过程需要有操作命令和地址、数据等。又因为容量决定了地址寻址的位数可能不址IO引脚的数量,所以需要根据具体的容量大小和IO引脚的数量来确定地址的输入周期。这个参数也是需通知控制寄存器的,具体的地址在每个周期中的写法需要参考具体的NAND芯片的设计。接下来就是根据相应地址来读写数据了,根据不同芯片这个过程中有一种情况,比如我们在写操作的时候是将数据写进了NAND控制器相应的FIFO中,但是还需要经过一个BUFFER才能真正到NAND FLASH中,这个BUFFER是一个页的大小,也叫PAGE BUFFER,这也就解释了为什么有些NAND芯片的读写操作需要两个读写命令,第一个命令告诉NAND接下来的是要读还是写,让它准备好,那么相应的数据这个时候就暂时放在了BUUER中,然后第2个命令才是将BUFFER中的数据存入目标寄存器。

    由于NAND的制造技术使得坏块存在的可能性很大,所以这里要涉及一个检错纠错的功能,这个过程非常复杂,但是2440在硬件电路上已经设计好了这个模块,所以根据需要可以来选择这个功能。同时在NAND的页中也分成了两块,MAIN区放着实际数据,SPARE区放着EEC标记,这些信息就是用来检查坏块的。坏块有2种可能的情况,出厂时就存在的和在使用过程中产生的。他们都有相应的信息进行标注,比如块中第一个页的某个地址,如果不是0XFF,那么就是可、坏块。同时可以设置一张坏块表来实现坏块的管理BBT,这在UBOOT和LINUX中有相应的实现。而这张坏块表本身需要放在相对比较稳定的块中,而一般的厂商基本都会保证第一个块的完好。

    根据不同的NAND FLASH芯片,可能有不一样的操作指令,这个需要查找对应的DATASHEET来使用。

    参考2440数据手册中:

    SOFTWARE MODE
S3C2440A supports only software mode access. Using this mode, you can completely access the NAND flash
memory. The NAND Flash Controller supports direct access interface with the NAND flash memory.
1. Writing to the command register = the NAND Flash Memory command cycle
2. Writing to the address register = the NAND Flash Memory address cycle
3. Writing to the data register = write data to the NAND Flash Memory (write cycle)
4. Reading from the data register = read data from the NAND Flash Memory (read cycle)
5. Reading main ECC registers and Spare ECC registers = read data from the NAND Flash Memory
    NOTE
    In the software mode, you have to check the RnB status input pin by using polling or interrupt.


    结合NAND的特性,大概总结一下需要如下的一些设置:

         1、尺寸方面,IO BUS WIDTH,PAGE SIZE,ADDRESS CYCLE,这些在NFCONF中可以READ,但是根据NAND datasheet在引脚上来进行配置;

         2、时序方面,TACLS,TWRPH0,TWRPH1,这些也在NFCONF中进行设置;

         3(1)、使能+片选,不过这个在BOOT的时候被自动控制了,而后面的要对NANDFLASH进行操作的话,就需要设置使相应位使能。

         以上的基本设置设置好了之后,2440的NAND BOOT就可以通过硬件将前4K代码搬移到SDRAM中了,但是具体的实现跟软件的读写操作需要的步骤有什么不同我不是很清楚。

         4、其他如果要涉及ECC,那么还需要设置相应的寄存器,这在NFCONT中有相应的位。

         5、如果要对某些区域进行权限控制,比如禁止擦除和写等,这个在LOCK选项中实现,在NFCONT中进行设置。可以是LOCK TIGHT或者SOFT LOCK,区别在于,一个LOCK后只能在RESET后UNLOCK,后者可以通过软件方式修改LOCK状态。

         3(2)、使能+片选,NFCONT中的MODE,Reg_nCE位。清RnB 信号,NFSTAT的RnB_TransDetect位。

         6、接下来根据具体的操作来配置寄存器了,首先是输入相应的命令到NFCMMD,这个寄存器的可用位是8位,但是在看NAND数据手册的时候可以看到它的命令也正好是8位的,可见应该是统一的;然后是地址到NFADDR,这就需要联系2中的时序来进行操作,这些都需要根据具体的NAND芯片事先决定;然后判断前异一步操作是否完成,通过NFSTAT的RnB (Read-only)和RnB_TransDetect位,这里可以根据前面的NOTE中有轮询和中断两种办法;在不忙状态后,因为读/写是以页为单位进行的,接下来就连续读/写NFDATA中的数据,具体次数根据页的大小和IO位数来决定。

         7、禁止NANDFLASH,在NFCONT中进行,与3(2)对应。

 

    特别在根据NAND手册写入地址时需要根据手册中相应的位准确写入每个周期的相应地址,比如A8用来判断是一页的前半部分还是后半部分,但是并不在写地址过程中指定,而是在写命令的时候就已经确定了。

 

    在上电的时候,NAND FLASH中前4K代码将自动被装入STEPPING STONE中,由于此时还没有进行任何的程序执行,所以这部分可想而知完全是由硬件完成的,具体电路上怎么实现我还不清楚,但是即使不管NAND FLASH在读写操作上与NOR FLASH有什么区别,至少接口数目,内部爷的大小等信息还是必须要在搬移过程中知道的,而刚上电的时候怎么去获得这些信息:通过外部引脚。所以事先要设置与这些信息相对应的外部引脚的电平。参考2440 DATASHEET:

    PIN CONFIGURATION
    OM[1:0] = 00: Enable NAND flash memory boot
    NCON: NAND flash memory selection(Normal / Advance)
    0: Normal NAND flash(256Words/512Bytes page size, 3/4 address cycle)
    1: Advance NAND flash(1KWords/2KBytes page size, 4/5 address cycle)
    GPG13: NAND flash memory page capacitance selection
    0: Page=256Words(NCON = 0) or Page=1KWords(NCON = 1)
    1: Page=512Bytes(NCON = 0) or Page=2KBytes(NCON = 1)
    GPG14: NAND flash memory address cycle selection
    0: 3 address cycle(NCON = 0) or 4 address cycle(NCON = 1)
    1: 4 address cycle(NCON = 0) or 5 address cycle(NCON = 1)
    GPG15: NAND flash memory bus width selection
    0: 8-bit bus width
    1: 16-bit bus width
    NOTE
    The configuration pin – NCON, GPG[15:13] – will be fetched during reset.
In normal status, these pins must be set as input so that the pin status is not to be changed, when enters
Sleep mode by software or unexpected cause.

    另外:

    NOTE
During the auto boot, the ECC is not checked. So, the first 4-KB of NAND flash should have no bit error.

    可见BOOT过程也并不需要考虑ECC操作。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值