This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dm368 不能正常启动



大家好,我现在在用dm368 ipnc5.0方案,我们自己做的板子经常会出现系统不能正常启动的情况,串口输出只输出了这些:

DM36x initialization passed!
TI UBL Base Version: 1.50
Boot Loader BootMode = NAND
Starting NAND Copy...

不知道这是什么原因?请问该怎么解决?我们怀疑过是ddr的问题,也试图去修改ubl对ddr的初始化,但是不知道该改哪个寄存器。

  • 你好,

    你可以修改ubl,在ubl初始化DDR后对DDR进行读写,看是否正常来判断是否是DDR的问题。

    如果是DDR的问题,原因可能有两个:

    1. DDR布线

    请问你们是否严格按照数据手册的DDR章节来布线的?

    2. DDR时序参数配置

    如果你使用的DDR和IPNC上的型号不同,请根据DM36x DDR user guide的介绍来调整DDR相关参数。

  • 首先还应该确认一下nand上是否有启动程序

  • 我跟踪了一下ubl,发现是停在NAND_open这个函数,一直在while里死循环,跳不出来,感觉像是跑飞了,

    while (hNandInfo->CSOffset < DEVICE_EMIF_NUMBER_CE_REGION)
      {
       DEBUG_printString("666666666666666666666\r\n");
       DEBUG_printHexInt(hNandInfo->CSOffset);
        if ( (hNandInfo->flashBase >= (DEVICE_EMIF_FIRST_CE_START_ADDR + (DEVICE_EMIF_INTER_CE_REGION_SIZE * (hNandInfo->CSOffset+0)))) &&
             (hNandInfo->flashBase <  (DEVICE_EMIF_FIRST_CE_START_ADDR + (DEVICE_EMIF_INTER_CE_REGION_SIZE * (hNandInfo->CSOffset+1))))
           )
        {
         DEBUG_printString("777777777777777777777777777\r\n");
          break;
        }
        hNandInfo->CSOffset++;
        DEBUG_printHexInt(hNandInfo->CSOffset);
      }

    然后我把这段代码注释掉后,又在后面这段停止了,

      hNandInfo->busWidth = busWidth;

      // Setup AEMIF registers for NAND   
      AEMIF->NANDFCR |= (0x1 << (hNandInfo->CSOffset));        // NAND enable for CSx
      (*hNandInfo->hEccInfo->fxnEnable)(hNandInfo);

    DEBUG_printString("888888888888888888888\r\n");

    8888888888888888没有输出,不知道这是什么原因?

  • 有可能这个ubl还不支持你的nand,可以看一下,还就是注意一下这个版本的ubl中NAND为8Bit还是16bit,是否和实际使用的匹配,这个可以在nclude/configs/*dm368*.h这个头文件查看

  • 肯定支持的,我们用的ipnc的方案,器件都是一样的,而且这种不能启动的情况也只是偶尔一次,并不是每次都启动不了。

  • 那可能就是硬件上的原因,可以按照 Chris说的,先查下DDR,要是有CCS测试程序,可能更方便些