我用的sdk版本是dvsdk_4.02, 在调试中发现了一个很隐蔽的问题:通过外部NANDflash启动,在RBL启动UBL时会偶尔失败,概率是1/3000 左右,不知道是什么原因,大家有没有出现过这种情况。
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.
我用的sdk版本是dvsdk_4.02, 在调试中发现了一个很隐蔽的问题:通过外部NANDflash启动,在RBL启动UBL时会偶尔失败,概率是1/3000 左右,不知道是什么原因,大家有没有出现过这种情况。
你好,
我调试时在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频率下无法稳定工作?