TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3235S OTA升级后重启卡死

你好,我们在OOB工程中加了自己的程序,并且程序正常可用,但是在OTA软件升级并且软件重启 后,程序会就卡死,如果要解决这个问题,可以掉电重启,掉电重启后不会卡死。请问有什么办法可以解决不掉电直接软件重启并不卡死嘛?

Viki Shi:

是否有信息输出,查看具体卡在哪一步?

user4696099:

回复 Viki Shi:

无法仿真,面看不到具体卡在哪里。开了看门狗,但是看门狗好像没有起作用

void WatchCallbackFxn(Watchdog_Handle watchdogHandle)
{Watchdog_clear(watchdogHandle);
}watchdog_Init()
{watchdog_init();Watchdog_Params_init(&params);params.resetMode = Watchdog_RESET_ON;params.callbackFxn = (Watchdog_Callback) WatchCallbackFxn;watchdogHandle = Watchdog_open(CONFIG_WATCHDOG_0,&params);if( watchdogHandle == NULL ){usleep(1);}
}void * controlTask(void *pvParameters)
{........
Watchdog_setReload(watchdogHandle, 150000);
}

Viki Shi:

回复 user4696099:

"如果要解决这个问题,可以掉电重启,掉电重启后不会卡死" 重启过后的程序是更新前还是更新后的?

user4696099:

回复 Viki Shi:

更新后的

Viki Shi:

回复 user4696099:

请问你使用的是TI launchpad还是自制板?

在OTA时推荐用bootloader来使用看门狗,需要写入"/sys/mcubootinfo.bin" 文件并且设置sBootInfo.ulStartWdtTime。请参考一下下面的代码【来自CloudOTA example】。在reset后【即系统文件已就位】,boot loader会在运行新image之前设置WDT。假如WDT超时【新image没有正确提交】,bootloader即返回到原先的image

int32_t Platform_CommitWdtConfig(int32_t TimeoutInSeconds)
{
#ifdef CC32XXint32_t lFileHandle;uint32_t ulToken = 0;sBootInfo_t sBootInfo;int32_t lRetVal;lFileHandle = sl_FsOpen((unsigned char *)"/sys/mcubootinfo.bin",SL_FS_CREATE | SL_FS_OVERWRITE |SL_FS_CREATE_MAX_SIZE(sizeof(sBootInfo)) |SL_FS_CREATE_SECURE | SL_FS_CREATE_PUBLIC_WRITE |SL_FS_CREATE_NOSIGNATURE,(_u32 *)&ulToken);if(0 > lFileHandle){//OTA_DBG_PRINT("OtaWatchDog: Error opening bootinfo file//: %d\n\r",lFileHandle);return(-1);}memset(&sBootInfo,0,sizeof(sBootInfo_t));/* max 104 seconds */sBootInfo.ulStartWdtTime = 40000000 * TimeoutInSeconds;sBootInfo.ulStartWdtKey = APPS_WDT_START_KEY;lRetVal =sl_FsWrite(lFileHandle, 0, (uint8_t*)&sBootInfo, sizeof(sBootInfo_t));lRetVal = sl_FsClose(lFileHandle, 0, 0, 0);if(0 != lRetVal){//OTA_DBG_PRINT("OtaWatchDog: Failed to close the bootinfo file");return(-1);}
#endif//Enable WDT - done by PRCMCC3200MCUInit//HWREG(0x4402E188) |= 0x00000020;return(0);
}

在MCU reset之前,确保先调用"sl_Stop()"

假如还有问题,请把整个OTA过程的log信息传上来【在otauser.h中,使能 "SL_ENABLE_OTA_DEBUG_TRACES",即可获取OTA lib的log信息】

赞(0)
未经允许不得转载:TI中文支持网 » CC3235S OTA升级后重启卡死
分享到: 更多 (0)