搜索
bottom↓
回复: 1

求教下NandFlash的读取问题.

[复制链接]

出0入0汤圆

发表于 2012-5-16 18:59:50 | 显示全部楼层 |阅读模式
本帖最后由 zyp000 于 2012-5-16 19:01 编辑

看过几个版本的例子,仿照着做了,却总不成功,求教下各位朋友。运行的时候好像产生了软件中断,不知为何。
以下是我的NandFlash.c,整个测试工程代码在附件里,搞了很久都没有搞定这个问题,求各位大神帮帮忙吧。


#include "S3C2440.h"
#include "NandFlash.h"

int NandFlash_Reset( void )
{
        /*使能片选*/       
        NandFlash_nCE_L;
       
        //清RnB信号
        NandFlash_ClrRnB;
       
        /*发出复位指令*/
        NandFlash_CMD( 0xFF );
       
        /*等待NandFlash复位*/
        /*Bit0:        0-NF存储器忙;        1-NF存储器就绪        */
        NandFlash_WaitForReady;
       
        /*禁止片选*/
        NandFlash_nCE_H;
       
        return 0;
}

void NandFlash_Init( void )
{       
        NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0); //配置Nand时序
        NFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
                             //13禁止紧锁 12禁止上锁 10禁止中断 9禁止RnB中断 8RnB传输检测上升沿
                             //6锁定备份ECC 5锁定主数据区ECC产生 4初始化ECC编码器/译码器
                             //1禁止片选 0控制器使能
        NFSTAT = 0;         //清零状态寄存器
        NandFlash_Reset();
}

static void NandFlash_WriteAddr( unsigned long addr )
{       
        // 设置Bit0~Bit10
        // Bit11设置为0,选择64字节OOB时设置为1.即0~2047,2048~2111.
        NFADDR = (unsigned char)addr;
        NFADDR = (unsigned char)( ( addr >> 8 ) & 0x7 );
       
        //设置Bit11~Bit27
        NFADDR = (unsigned char)( addr >> 11 );
        NFADDR = (unsigned char)( addr >> 19 );
        NFADDR = (unsigned char)( ( addr >> 27 ) & 0x1 );
}

int NandFlash_ReadPage( unsigned char *data, unsigned long addr )
{
        unsigned int i;
       
        //判断地址参数是否合法
        //要求data字对齐,addr也对齐.
        if( ( (unsigned long)data & 0x3 ) || ( addr & 0x7FF ) ) return -1;
               
        //复位
        NandFlash_Reset();
       
        //使能片选
        NandFlash_nCE_L;
       
        //清RnB信号
        NandFlash_ClrRnB;
       
        //写入1st读命令
        NandFlash_CMD( 0x00 );
       
        //写入地址
        NandFlash_WriteAddr( addr );
       
        //写入2nd读命令
        NandFlash_CMD( 0x30 );
       
        //等待数据准备好
        NandFlash_WaitForReady;
       
        //读数据
        for( i = 0 ; i < 2048 ; i++ )
                *( data + i ) = NFDATA8 ;

        //ECC校验
       
       
        //禁止片选
        NandFlash_nCE_H;

        //读取成功返回0
        return 0;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-7-7 13:43:55 | 显示全部楼层
我也不会啊   想学                                 
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 13:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表