Part Number:CC1310
Tool/software: TI-RTOS
Hi,
these days, during testing CC1310 Tx/Rx, (we use the lastest SDK simplelink_cc13x0_sdk_2_30_00_20), during some heavy traffic, we found that CC1310 can hangup randomly.
after days tracking, we found that in some scenario, CC1310 can lockup in line
RF_runCmd(RadioIF_Rf_Handle, (RF_Op*)RF_cmdPropRadioDivSetup, RF_PriorityNormal, NULL, 0)
a further trace can found it locked on the line in RF_runCmd(....) in RFCC26XX_singleMode.c
return RF_pendCmd(h, ch, (RF_EventCmdAborted | RF_EventCmdStopped | RF_EventCmdCancelled));
when browse the code : we found this line in RF_pendCmd(... ):
SemaphoreP_pend(&h->state.semSync, SemaphoreP_WAIT_FOREVER);
this line just wait forever. so when error happened, it never quit.
so I tried to add a timeout onto it:
/* Wait for semaphore */
rf_state_good = 1;
_state = SemaphoreP_pend(&h->state.semSync, 100*100UL);
if(_state != SemaphoreP_OK)
{
rf_state_good = 0;
}
after this change, we can detect the timeout condition, and it can quit the RF_pendCmd(...), but after that, in our main task , we catch the rf_state_good status, and do recover RF task by using
RF_close(RadioIF_Rf_Handle);
....
RF_open(...)
but it again failed @ RF_close(..), (it can lock up in RF_close again), and the RF drvier can't recover anymore.
the only way is to do a software reset to recover the system to bring the RF back to work.
so I want to know: when detect a RF error, is there a way to call some routine to just re-power up the RF driver to let the RF driver back to work regardless the RF previous status?
B/R,
Shaowei