当前位置: 代码迷 >> 驱动开发 >> nandflash 读写不正确,不能通过jlink烧录nandflash解决方案
  详细解决方案

nandflash 读写不正确,不能通过jlink烧录nandflash解决方案

热度:411   发布时间:2016-04-28 10:06:23.0
nandflash 读写不正确,不能通过jlink烧录nandflash
9GAG08U0D。如果读地址和写nandflash的起斯地址一样,那么读出来是一样的。如果读的地址不是写nandflash 的起始地址,那么读不一样。如
nand_write_32(addr, buf, 100);
/×写的数据是
0x11111111 0x22222222 0x33333333 0x44444444 0x55555555 0x66666666 0x00000000 0x00000000 0x00000000
×/
nand_read_32(addr+2,read_buf,100);
那么结果:
:0x22221111 0x33332222 0x44443333 0x55554444 0x66665555 0x00006666 0x00000000 0x00000000 0x00000000 0x00000000 
正确该是:0x33333333 0x44444444 0x55555555 0x66666666 0x00000000 0x00000000 0x00000000 0x00000000 
以上读写都是在一页情况下进行的。求救!!!!!!! 
下边是读写函数:
void nand_write_32(U32 nd_addr,U32 *buf,U32 len)

{
U32 count=0;
// U32 addrtmp=addr;

U32 i =nd_addr%4096;
nand_select();
    
while(count<len)
{
//if(count%1024==0){putstr("ddr_addr  :");U32 add=buf+count;putword(&add,1);putstr("ddr_data :");putword(&buf[count],1);putstr("\r\n");
//   putstr("nand_addr :");putword(&nd_addr,1);putstr("\r\n");}
putstr("nand_addr :");putword(&nd_addr,1);putstr("ddr_data :");putword(&buf[count],1);putstr("\r\n");
nand_cmd(0x80);
nand_addr(nd_addr);
for(;i<4096&&(count<len);i++)
{
rNFDATA=buf[count++];
nd_addr++;
}
i=0;
nand_cmd(0x10);
nand_wait();

}
nand_deselect();

}

void nand_read_32(U32 addr,U32 *buf,U32 len)
{
U32 count=0;
//U32 addrtmp=addr;
U32 i =addr%4096;

while(count<len)
{
putstr("nand_addr :");putword(&addr,1);putstr("\r\n");   
nand_select();
nand_cmd(0x00);
nand_addr(addr);
nand_cmd(0x30);
nand_wait();
for(;i<4096&& count<len;i++)
{
buf[count++]=rNFDATA;
addr++;
}
i=0;
nand_deselect();
}


------解决方案--------------------
你的读写是以字读的吧,所以你读地址要为addr+8,才能得到你说的正确结果。
  相关解决方案