NandFlash无法连续读取~~!
本帖最后由 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 = 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;
}
本帖最后由 zyp568 于 2012-10-14 08:31 编辑
原因找到了哦~~自问自答了。
是指针赋值有错误,简单测试了一下。
unsigned long *pTest = (unsigned long *)0;
unsigned long *p = (unsigned long *)0x30000000;
#define TEST 2048
pTest += TEST;
*p = (unsigned long)pTest;
> mdw 0x30000000
0x30000000: 00002000
嗯!稀奇了。
2048 B == 2 KB
不要...B...
2048 = 2 K = 2000
0 + 2000 = 2000
GCC成功了...
OVER!
另外一个编译错误
代码:
unsigned long *pTargeAddr;
...
pTargeAddr += (unsigned long *)NFPageSize;
src/nand.c:100: error: invalid operands to binary + (have 'long unsigned int *' and 'long unsigned int *')
转到Windows用Visual C++ 2010又试了一下。
int main(void)
{
unsigned int *pTest = 0;
unsigned int p;
#define TEST 2048
pTest += TEST;
p = (unsigned int)pTest;
return 0;
}- pTest 0x00002000 unsigned int *
CXX0030: 错误: 无法计算表达式的值
p 8192 unsigned int
编译通过了,却提示无法计算表达式值……
难道是因为
pTest是一个指针变量,其中存放了一个指针。
这个(指针的数值)在内存中的存放形式不是 unsigned long/int 之类的结构。
所以直接相加出错?
页:
[1]