|
本帖最后由 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初始化函数:
- 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页读取函数:
- 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;
- }
复制代码 Nand读取128KB循环:
- unsigned long *pTargeAddr = (unsigned long *)31000000;
-
- for( i=0; i<64; i++ )
- {
- NF_ReadPage( 1, i, pTargeAddr );
- pTargeAddr += 2048;
- }
复制代码
|
|