|
30
我的nand flash是K9F2G08U0B
代码用的是天嵌bootloader里dev.c里的代码
- static U32 LB_WritePage(U32 addr, U8 * buf)
- {
- U32 i, mecc,j;
- U8 stat, tmp[7];
- NF_nFCE_L();
- NF_CLEAR_RB();
- NF_CMD(CMD_WRITE1);
- NF_ADDR(0);
- NF_ADDR(0);
- NF_ADDR(addr);
- NF_ADDR(addr>>8);
- NF_ADDR(addr>>16);
- for(i=0; i<2048; i++)
- NF_WRDATA(buf[i]);
- NF_RSTECC(); //reset mecc and secc
- NF_MECC_UnLock();
- NF_MECC_Lock();
- mecc = NF_RDMECC();
- tmp[0] = mecc&0xff;
- tmp[1] = (mecc>>8)&0xff;
- tmp[2] = (mecc>>16)&0xff;
- tmp[3] = (mecc>>24)&0xff;
- tmp[5] = 0xff; //mark good block
- NF_SECC_UnLock();
- NF_WRDATA(tmp[0]);
- NF_WRDATA(tmp[1]);
- NF_WRDATA(tmp[2]);
- NF_WRDATA(tmp[3]);
- NF_SECC_Lock();
- NF_WRDATA(tmp[4]);
- NF_WRDATA(tmp[5]);
- NF_CMD(CMD_WRITE2);
- stat = WaitNFBusy();
- NF_nFCE_H();
- // printf("Write nand flash 2048 Byte\n");
- #ifdef WR_BAD_BLK_TEST
- if((addr&0xff)==0x17)
- stat = 1; //just for test bad block
- #endif
- if(stat)
- Uart_Printf("Write nand flash 0x%x fail\n", addr);
- else
- {
- U8 RdDat[2048];
- rLB_ReadPage(addr, RdDat);
- for(i=0; i<2048; i++)
- if(RdDat[i]!=buf[i])
- {
- Uart_Printf("Check data at page 0x%x, offset 0x%x fail\n", addr, i);
- stat = 1;
- break;
- }
- }
- return stat;
- }
复制代码
但是如果我写入1,2,3,4,5,6,7,8,9的话
读出来是1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9
请问这是什么问题呢?读nand flash的代码应该没有问题,因为我可以从nand flash启动,也就是可以从nand flash读到sdram,但是写nand flash的代码,我也不知道是哪里有问题,还是说我是哪里设置什么的出问题了?写nand flash之前还有什么必要的操作吗?谢谢各位了
|
|