电子工程师的网站
首 页 |  新闻资讯 | 最新产品 | 技术参数 | 设计应用 | 电路图
技术资料
芯片资料 | 技术论坛
  现在位置: 首页 > 技术资料 > 嵌入式系统/ARM技术 > 详细信息
嵌入式系统/ARM技术:s3c2410的nand flash的驱动分析
来源:   时间: 2007-11-27 2:20:49    
  以前都是把别人写好的代码直接拿过来用,而没有去关心里面到底怎么实现的,昨晚对照着samsung 2410k9f1208的芯片资料把这些代码读了一遍,终于明白了对nand flash的操作一步步是怎么实现的了。

以下的这些代码可以在vivi或者kernel里面找到

对一个nand flash的操作,总体上可以分为这么四步:

一、Select the NAND device

二、Send command to NAND device

三、Operation

四、De-select the NAND device

下面是以上四步的实现代码:

一、Select the NAND device

#define nand_select()   this->hwcontrol(NAND_CTL_SETNCE); \


                        nand_command(mtd, NAND_CMD_RESET, -1, -1); \


                        udelay (10);

hwcontrol(NAND_CTL_SETNCE)的作用是设置2410的NAND FLASH CONFIGURATION (NFCONF) REGISTER的NAND Flash Memory chip enable位为0,具体请参考samsung 2410 datasheet。

NAND Flash Memory chip enable   [11] NAND flash memory nFCE control

0 : NAND flash nFCE = L (active)

1 : NAND flash nFCE = H (inactive)

(After auto-boot, nFCE will be inactive.)

nand_command(mtd, NAND_CMD_RESET, -1, -1);看字面意思都知道是reset nand device,具体实现请看下面。

二、Send command to NAND device

这步又主要有以下几个过程

1、  Begin command latch cycle

实现代码:

this->hwcontrol(NAND_CTL_SETCLE);  // set command latch enable

this->hwcontrol(NAND_CTL_DAT_OUT);  // 这个我还不清楚

2、  Write out the command to the device

实现代码:

this->write_cmd (command); // write the command to NAND FLASH COMMAND SET (NFCMD) REGISTER

3、  Set ALE and clear CLE to start address cycle

实现代码:

this->hwcontrol(NAND_CTL_CLRCLE); // clear the command latch enabl

    this->hwcontrol(NAND_CTL_SETALE); // set the address latch enable

4、  Serially input address

实现代码:

this->write_addr (address);  // write the address to NAND FLASH ADDRESS SET (NFADDR) REGISTER

5、  Latch in address

实现代码:

    this->hwcontrol(NAND_CTL_CLRALE);  // clear the address latch enable


    this->hwcontrol(NAND_CTL_DAT_IN);  // 这个我也不清楚


6、  Pause for ?us


实现代码:


udelay (?)  // 延时,总得给Nand Flash一点反应时间三

           // 时间视具体Nand Flash而定


三、Operation


主要是往NAND FLASH DATA (NFDATA) REGISTER里面写或者读数据


例如:


static u_char read_data(void) 

{

    return (u_char)NFDATA;

}




四、De-select the NAND device


实现代码:


#define nand_deselect() this->hwcontrol(NAND_CTL_CLRNCE);


跟select the NAND device相反,把NAND FLASH CONFIGURATION (NFCONF) REGISTER的NAND Flash Memory chip enable位置1


至此,对samsung 2410平台上的Nand Flash一个操作完成。


以上是偶的个人理解,有啥不正确的地方还请大家指出来,感谢。


下面是一个我还没搞明白的问题,希望看到的朋友能指点下:


这段代码来自mizi_linux\drivers\mtd\nand\smc_s3c2410.c


static void smc_hwcontrol(int cmd)

{

    switch (cmd)

    {

        case NAND_CTL_SETNCE:   NFCONF &= ~NFCONF_nFCE_HIGH; break;

        case NAND_CTL_CLRNCE:   NFCONF |= NFCONF_nFCE_HIGH; break;

        case NAND_CTL_SETCLE:   break;

        case NAND_CTL_CLRCLE:   break;

        case NAND_CTL_SETALE:   break;

        case NAND_CTL_CLRALE:   break;

        case NAND_CTL_DAT_IN:   break;

        case NAND_CTL_DAT_OUT:  break;

    }

}


NAND_CTL_SETCLE、NAND_CTL_CLRCLE、NAND_CTL_SETALE以及后面几个cmd,传进去了啥活都不干喃,这能达到set or clear的效果吗?
相关信息
发表评论
打印本页 关闭本页
已有(
)位对此新闻感兴趣的网发发表了看法 >>更多评论
内 容:
     
 
热点新闻
一周排行
关于我们 | 服务项目 | 付款方式 | 广告服务 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2008 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8007 QQ:303939539 | MSN:zh1226@hotmail.com |  邮箱:laz8258@163.com dzsc51@163.com