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 RBL启动UBL的问题



  我用的sdk版本是dvsdk_4.02, 在调试中发现了一个很隐蔽的问题:通过外部NANDflash启动,在RBL启动UBL时会偶尔失败,概率是1/3000 左右,不知道是什么原因,大家有没有出现过这种情况。

  • 你好,

      启动失败有什么错误信息么?能不能提供一下logs?

  • 你好,

         我调试时在UBL 的DEVICE_init()函数里加了看门狗复位操作让程序不断做重启,当启动失败出现时没有任何打印(RBL本身没有打印信息的,只有UBL在初始化串口后才能打印信息),我怀疑是在RBL启动UBL阶段出现了问题,即程序还没有进入UBL就已经失败了,DEVICE_init()函数修改如下(红色部分):

    Uint32 DEVICE_init()
    {
      Uint32 status = E_PASS;
     
       // Mask all interrupts
      AINTC->INTCTL = 0x4;
      AINTC->EABASE = 0x0;
      AINTC->EINT0  = 0x0;
      AINTC->EINT1  = 0x0;  
      
      // Clear all interrupts
      AINTC->FIQ0 = 0xFFFFFFFF;
      AINTC->FIQ1 = 0xFFFFFFFF;
      AINTC->IRQ0 = 0xFFFFFFFF;
      AINTC->IRQ1 = 0xFFFFFFFF;

      POR_RESET();
      WDT_RESET();

    #ifndef SKIP_LOW_LEVEL_INIT

       // System PSC setup - enable all
      DEVICE_PSCInit();
     
      DEVICE_pinmuxControl(0,0xFFFFFFFF,0x00FD0000);  // All Video Inputs
      DEVICE_pinmuxControl(1,0xFFFFFFFF,0x00145555);  // All Video Outputs
      DEVICE_pinmuxControl(2,0xFFFFFFFF,0x000000DA);  // EMIFA
      DEVICE_pinmuxControl(3,0xFFFFFFFF,0x00180000);  // SPI0, SPI1, UART1, I2C, SD0, SD1, McBSP0, CLKOUTs
      DEVICE_pinmuxControl(4,0xFFFFFFFF,0x55555555);  // MMC/SD0 instead of MS, SPI0

     GPIO->DIR02 &= 0xfeffffff;
     GPIO->CLRDATA02 = 0x01000000;

     
      if (status == E_PASS) status |= DEVICE_PLL1Init();

      if (status == E_PASS) status |= DEVICE_PLL2Init();

     if (status == E_PASS)
      status |= DEVICE_DDR2Init();

    #endif
      // AEMIF Setup
      if (status == E_PASS) status |= DEVICE_EMIFInit();

      // UART0 Setup
      if (status == E_PASS) status |= DEVICE_UART0Init();

      // TIMER0 Setup
      if (status == E_PASS) status |= DEVICE_TIMER0Init();
     
      // I2C0 Setup
      if (status == E_PASS) status |= DEVICE_I2C0Init();

      WDT_FLAG_ON();

      DEBUG_printString("WDT_RESET---------------1\r\n");
     
      WDT_RESET();

      while(1)
      {
             DEBUG_printString(" wait WDT_RESET\r\n");
      }

      return status;
    }

  • 关于这个问题我尝试在ubl中修改dm365的运行频率,从原来的Arm 297 DDR2 243 MHZ 修改为ARM 216 DDR2 173 MHz,重启失败就不会出现了,失败的时候DDR2还没开始运行代码啊,难道dm365在297频率下无法稳定工作?