码迷,mamicode.com
首页 > 其他好文 > 详细

s3c2440——Nandflash

时间:2016-03-21 21:25:43      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

简介:

  Nandflash与计算机的硬盘类似,用于保存系统运行所必须的操作系统、用户数据、运行过程等各类数据。并且在Nandflash中的数据在掉电后仍可永久保存。

 

一、目标芯片(K9F1208U0M)

  1、此芯片为三星公司生产的容量为64MB。(下图为网上图片、非本人原创)。由下图可以看出,1page = 528byte(其中Data feild = 512bytes、spare = 16bytes)。

1 block = 32 pages = 32 * 528byte。其中可以存储数据的是 (32 * 512byte)  = 16KB。然而此芯片有4096个block。所以此芯片的容量可以计算得出:(4096 * 32 * 512)byte = 64MB。

技术分享

 

  2、行地址和列地址解析。(下表非上述芯片的地址列表、只供参考说明用

  一共有 4096 个块,每个块内有 32 页,每个页是(512+16) Bytes,假设,我们要访问其中的第2000个块中的第 10 页中的200 字节处的地址,此时,我们就要先把具体的地址算出来:        

  技术分享  

    物理地址 = 块大小×块号+页大小×页号+页内地址

         =2000 * 16K + 10 *512Byte + 200

        = 0x1F414C8

  

    但是有的程序编程时是按页写的,所以物理地址将不加页内地址。所以上述物理地址如果按页写则为0x1F41400(即A0-A7为0)。

 

  3、Nandflash控制器主要寄存器介绍

    1、NFCONF   用来设置时序、数据位宽等

    2、NFCONT   用来使能flash、使能控制引脚、初始化ECC等

    3、NFCMD   用来发送命令

    4、NFADDR   用来发送地址

    5、NFDATA   读、写数据

    6、NFSTAT   状态寄存器

   

  4、核心语句分析

  技术分享

  上图为命令字,操作Nandflash时、先传输命令、然后是地址、最后是读/写数据。

 

 二、分析代码:

1、 // 发片选 (主要是将NFCONT寄存器的bit1位置0,关闭片选就是把寄存器的相应位置1)

    void nand_select_chip(void)
   {
       unsigned long i;
       NFCONT &= ~(1<<1);
      for(i=0; i<10; i++);
   }

  

2、// 等待就绪 (NFSTAT的bit4表示状态位。0--busy,1--空闲)

  void nand_wait_idle(void)
  {
    unsigned long i;
    while( !(NFSTAT & (1<<0)) )
    for(i=0; i<10; i++);
  }

 

3、发出地址信号  (在数据手册中列出了地址操作。没有用到A8是因为当读命令为0时,A8=0;当读命令为1时,A8=1;)

  NFADDR = addr & 0xff;

  NFADDR = (addr>>9) & 0xff;

  NFADDR = (addr>>17) & 0xff;

  NFADDR = (addr>>25) & 0xff;

 

s3c2440——Nandflash

标签:

原文地址:http://www.cnblogs.com/liuzheng1101/p/5286332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!