我没有使用TI ota的lib进行OTA升级,自己写的一个简单的tcp socket ,服务端也是简单的用socket 进行文件传输,收到升级的新文件后,调用了
static void RebootMCU()
{
//
// Configure hibernate RTC wakeup
//
PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
{
//
// Configure hibernate RTC wakeup
//
PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
//
// Delay loop
//
Report("Delay loop...\r\n");
MAP_UtilsDelay(8000000);
// Delay loop
//
Report("Delay loop...\r\n");
MAP_UtilsDelay(8000000);
//
// Set wake up time
//
Report("Set wake up time...\r\n");
PRCMHibernateIntervalSet(330);
// Set wake up time
//
Report("Set wake up time...\r\n");
PRCMHibernateIntervalSet(330);
//
// Request hibernate
//
Report("Request hibernate...\r\n");
PRCMHibernateEnter();
// Request hibernate
//
Report("Request hibernate...\r\n");
PRCMHibernateEnter();
//
// Control should never reach here
//
while(1)
{
// Control should never reach here
//
while(1)
{
}
}
}
这个函数后,系统无法重启,从串口看log,卡住了(没有重新从main启动)。我烧录的application_bootloader是从SDK中编译出来的,没有改动,升级后用Uniflash 查看的文件列表 见附件。而且发现升级后读取/sys/mcubootinfo.bin 明明是把img状态写进去了,而且也把文件正常关闭了,但是当我软件重启失败后,用硬件reset,后再次打印文件内容,发现读取的还是默认的数值, 所以我有点怀疑,软件reset 可能是卡在了读取/sys/mcubootinfo.bin 整个文件的操作上,这只是猜测。