zyp568 发表于 2012-5-17 17:42:02

求助下NandFlash的问题.

自己尝试写了个NandFlash的页读取函数。
总是无法成功,更奇怪的是,还产生了SWI终止……
整个测试工程在附件里(只有10KB),求各位朋友帮忙看看,哪里搞错了。



另外,在NandFlash的数据手册和一些例程中,读取数据之前,都没有要等待数据准备好的过程,2nd的读命令写进去就可以读取了。但是有的例程里,在读数据之前加上了读状态的函数,不知为何?

embedsky_lhh 发表于 2012-5-25 21:08:32

建议你先读下ID,看能否读到,这样可以验证下你的复位及初始化及系统时钟等相关功能是否设置正常,还有我看了下你的读数据的那代码有点问题        NandFlash_nCE_L;                                        //使能片选
        NandFlash_WrCmd( READ_1_0 );                        //写入1st读命令

使能片选之后应该使能读信号,然后在发送读命令才对,你中间貌似漏掉一步。

zyp568 发表于 2012-7-7 11:55:42

embedsky_lhh 发表于 2012-5-25 21:08 static/image/common/back.gif
建议你先读下ID,看能否读到,这样可以验证下你的复位及初始化及系统时钟等相关功能是否设置正常,还有我看 ...

谢谢斑竹,最近无法上网-_-!
问题已经找到了,在读取第一个字节的数据到缓冲区之前,需要等待数据准备好,但是FLASH数据手册上给出的步骤中,没有这一步。NND,坑人啊。代码如下://页读取
#define NFDATA      (*(volatile unsigned long *) 0x4E000010)
int NFPageRead( unsigned int iBlock, unsigned int iPage, unsigned long *pTargeAddr )
{
        unsigned int i;
       
        DevON();
       
        WriteCmd( READ_1ST );
        WritePageAddress( iBlock,iPage );
        WriteCmd( READ_2ND );
        WiteForDevReady();                        // ※数据手册上未标明此步!!!
        for( i = 0 ; i < NFPageSize / 4 ; i++ )
        {
                pTargeAddr = NFDATA;      // ※字访问!!!
        }
       
        DevOFF();
        return 0;
}
页: [1]
查看完整版本: 求助下NandFlash的问题.