网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术信息 > 正文
  • RSS
  • s3c2410的nand flash的驱动分析
    http://www.ic72.com 发布时间:2007/11/27 10:08:50
      以前都是把别人写好的代码直接拿过来用,而没有去关心里面到底怎么实现的,昨晚对照着samsung 2410和K9F1208的芯片资料把这些代码读了一遍,终于明白了对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的效果吗?



    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质