|  | 
 
| 本帖最后由 zyp568 于 2012-10-13 17:15 编辑 
 实验板:TQ2440
 环境:ubuntu12.04.1 + arm-linux-gcc-4.3.2
 写了个Nand读取函数,想从Nand读取128KB的数据到SDRAM。
 用OpenOCD + JLink调试,发现:
 只有第0页的数据读取是正确的,往后所有的页的数据均不正确,全为0xFFFFFFFF,没读取成功。
 求教下是咋会是呢?
 代码简要如下:
 Nand初始化函数:
 
 Nand页读取函数:复制代码void NF_InitDev( void )
{
        unsigned long iNFCONF;
        
        iNFCONF = NFCONF;
        iNFCONF &= 0x000F;
        iNFCONF |= ( 3 << 12 ) | ( 7 << 8 ) | ( 7 << 4 ); 
        NFCONF = iNFCONF;
        NFCONT = ( 1 <<  4 ) | ( 1 << 1 ) | ( 1 << 0 ) ;
        
        ResetDev();
}
 Nand读取128KB循环:复制代码inline static void WritePageAddress( unsigned int iBlock, unsigned int iPage )
{
        unsigned int iPageAddr = iBlock * NFBlockSize + iPage ;
        NFADDR = 0x00;
        NFADDR = 0x00;
        NFADDR = iPageAddr & 0xFF;
        NFADDR = ( iPageAddr >> 8 ) & 0xFF;
        NFADDR = ( iPageAddr >> 16 ) & 1;
}
int NF_ReadPage( 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[i] = NFDATA;
        }
    
        DevOFF();
        return TRUE;
}
 复制代码unsigned long *pTargeAddr = (unsigned long *)31000000;
    
    for( i=0; i<64; i++ )
    {
            NF_ReadPage( 1, i, pTargeAddr );
            pTargeAddr += 2048;
    }
 
 
 
 
 | 
 |