74

帖子

0

TA的资源

一粒金砂(初级)

41
 
引用 40 楼 liaifeilove 的回复:
eboot 起不来又好多种,搂住最好把现象描述清楚,
有可能是stepldr不能正确的将 eboot从nand flash中读出,
也有可能是 eboot代码不对 ,
还有 。。。。。

有可能是stepldr不能正确的将 eboot从nand flash中读出
这种也是很有可能的!
  1. nBadBlocks = 0;
  2.     for (nPage = NAND_COPY_PAGE_OFFSET ; nPage < (LOAD_SIZE_PAGES + NAND_COPY_PAGE_OFFSET) ; nPage++)
  3.     {
  4.         nBlock = ((nPage / NAND_PAGES_PER_BLOCK) + nBadBlocks);

  5.         if (!NF_ReadPage(nBlock, (nPage % NAND_PAGES_PER_BLOCK), pCopyPtr))
  6.         {
  7.             if ((nPage % NAND_PAGES_PER_BLOCK) != 0)
  8.             {
  9.                 Led_Display(0x9);    // real ECC Error.
  10.                                                                         Uart_SendString("d");
  11.                 // Spin forever...
  12.                 while(1)
  13.                 {
  14.                 }
  15.             }

  16.             // ECC error on a block boundary is (likely) a bad block - retry the page 0 read on the next block.
  17.             nBadBlocks++;
  18.             nPage--;
  19.             continue;
  20.         }

  21.         pCopyPtr += NAND_PAGE_SIZE_BYTES;
  22.     }

  23.     // Turn the LEDs on.
  24.     //
  25.    // Led_Display(LED_ON);//D4和D2


  26.          Led_Display(LED_OFF);
  27.                 Uart_SendString("Boot Eboot Now....\r\n");
复制代码

这个是读的过程代码!  Boot Eboot Now.... 在串口中有打印!

  1. int NF_ReadPage(UINT32 block,UINT32 page,UINT8 *buffer)
  2. {
  3.     //volatile int i;
  4.     register UINT8 * bufPt=buffer;
  5.     unsigned int blockPage;
  6.         ULONG MECC;
  7.         int NewDataAddr;

  8.         if ( bLARGEBLOCK == TRUE )
  9.         {
  10.                 blockPage = (block<<6) + page/4;
  11.                 NewDataAddr = 512*(page%4);
  12.                 NF_RSTECC();    // Initialize ECC
  13.                 NF_MECC_UnLock();
  14.    
  15.                 NF_nFCE_L();   
  16.                 NF_CMD(0x00);   // Read command

  17.                 NF_ADDR((NewDataAddr)&0xff);
  18.                 NF_ADDR(((NewDataAddr)>>8)&0xff);
  19.                 NF_ADDR(blockPage&0xff);            //
  20.                 NF_ADDR((blockPage>>8)&0xff);   // Block & Page num.
  21.             if (LB_NEED_EXT_ADDR) {
  22.                 NF_ADDR((blockPage>>16)&0xff);   // Block & Page num.
  23.             }
  24.         }
  25.         else
  26.         {[color=#008000]
  27.                 blockPage = (block<<5) + page;
  28.                 //blockPage = (block<<8) + page;
  29.                 NewDataAddr=0;
  30.                 NF_RSTECC();    // Initialize ECC
  31.                 NF_MECC_UnLock();
  32.    
  33.                 NF_nFCE_L();   
  34.                 NF_CMD(0x00);   // Read command

  35.                 NF_ADDR((NewDataAddr)&0xff);
  36.                 NF_ADDR(blockPage&0xff);            //
  37.                 NF_ADDR((blockPage>>8)&0xff);   // Block & Page num.
  38.             if (SB_NEED_EXT_ADDR) {
  39.                 NF_ADDR((blockPage>>16)&0xff);   // Block & Page num.
  40.             }[/color]        }

  41.         NF_CLEAR_RB();
  42.         NF_CMD(0x30);
  43.         NF_DETECT_RB();

  44.     __RdPage512(bufPt);
  45.         NF_MECC_Lock();

  46.         [color=#FF0000]// no ecc check
  47.         return 1;[/color]
  48.         MECC = NF_RDDATA32();
  49.         MECC = NF_RDDATA32();
  50.             
  51.     MECC = NF_RDDATA32();
  52.     NF_WRMECCD0( ((MECC&0xff00    )<<8) |  (MECC&0xff    )      );
  53.     NF_WRMECCD1( ((MECC&0xff000000)>>8) | ((MECC&0xff0000)>>16) );
  54.     NF_nFCE_H();   

  55.         if(rNFESTAT0 & 0x3)
  56.         {
  57.                 Uart_SendString("ECC ERROR block");
  58.                 Uart_SendDWORD(block,0);
  59.                 Uart_SendString("page");
  60.                 Uart_SendDWORD(page,1);
  61.                 return 0;
  62.         }
  63.         else
  64.                 return 1;

  65. }

复制代码

如果把// no ecc check
        return 1;

却掉 就会显示有坏块!
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

42
 
ECC ERROR block0x00000002  page0x00000000
ECC ERROR block0x00000003  page0x00000000
ECC ERROR block0x00000004  page0x00000000
ECC ERROR block0x00000005  page0x00000000
ECC ERROR block0x00000006  page0x00000000
ECC ERROR block0x00000007  page0x00000000
ECC ERROR block0x00000008  page0x00000000
ECC ERROR block0x00000009  page0x00000000
ECC ERROR block0x0000000e  page0x00000000
ECC ERROR block0x00000012  page0x00000017

eboot是烧写在BLOCK2的,可以是BLOCK2开始 就有坏块! 但我用烧写工具里面的读flash 选项读第二块
跟我的eboot.bin是一样的啊!  是不是read 操作有问题?

----------------------------------
再问下:烧写stelpldr时,nb0和nb1有什么不同,
        烧写eboot时,nb0和bin文件有什么不同?

应该烧写哪个?
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

43
 
stepldr.nb0/nb1,你打开看一下,应该是一样的.但也有地方说到nb0是空的.eboot.nb0和eboot.bin,前者是直接可以拷贝到memory上执行,而后者不可以.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表