Other Parts Discussed in Thread: SYSBIOS
Hello, I am developing an application for the IWR6843AOP and am having issues related to opening the mmwave sensor. Whenever I call MMWave_open and pass it my MMWave_Handle, MMWave_OpenCfg, and MMWave_CalibrationData. The operating system gives me the following error, I am using mmwave_sdk_03_05_00_04:
{module#36}: line 449: error {id:0xa0000, args:[0x8001e10, 0x0]}
xdc.runtime.Error.raise: terminating execution
The crash is ultimately occurring in the line that opens the mmwavelink within MMWave_Open:
retVal = MMWave_openLink (ptrMMWaveMCB, ptrCalibrationData, errCode);
MMWave_openLink is failing here:
line 1757 in mmwave_link.c: retVal = rlRfSetCalMonTimeUnitConfig(RL_DEVICE_MAP_INTERNAL_BSS, &timeCfg);
rlRfSetCalMonTimeUnitConfig is failing here:
line 2381 in rl_sensor.h: retVal = rlDriverExecuteSetApi(deviceMap, RL_RF_DYNAMIC_CONF_SET_MSG, RL_RF_CALIB_MON_TIME_UNIT_SB, rlUInt8_t*)data, rlUInt16_t)sizeof(rlRfCalMonTimeUntConf_t));
rlDriverExecuteSetApi is failing here:
line 3118 in rl_driver.c: retVal = rlDriverCmdInvoke(deviceMap, inMsg, &outMsg);
rlDriverCmdInvoke is failing here:
line 2740 in rl_driver.c: retVal = rlDriverCmdSendRetry(deviceMap, outMsg);
At this point the optimizations make it very difficult to trace through the error, but at this point the function calls are no longer being made with the input variables I provided and are being called with local variables needed by the various functions.
The task calls MMWave_init, MMWave_flushCfg, and MMWave_sync all prior to calling MMWave_open without errors or bad return codes.
My task size stack is 4096, which is larger than what the demo use to run and initialize the sensor combined, so that is likely not the issue, dramatically increasing the stack size has not solved the problem.
The initial config for the MMWave sensor is as follows:
g_tiMmWaveInitCfg.cfgMode = MMWave_ConfigurationMode_FULL;
g_tiMmWaveInitCfg.domain = MMWave_Domain_MSS;
g_tiMmWaveInitCfg.eventFxn = tks_MMWave_eventFxn;
g_tiMmWaveInitCfg.executionMode = MMWave_ExecutionMode_ISOLATION;
g_tiMmWaveInitCfg.linkCRCCfg.crcChannel = CRC_Channel_CH1;
g_tiMmWaveInitCfg.linkCRCCfg.useCRCDriver = 1U;
g_tiMmWaveInitCfg.socHandle = g_tiSocHandle;
The calibration data is a nullptr, as per the documentation, this an acceptable value:
MMWave_CalibrationData* tempCalData = nullptr;
The MMWave_OpenCfg data is populated as follows:
m_mmWaveOpenCfg->freqLimitLow = 600U;
m_mmWaveOpenCfg->freqLimitHigh = 640U;
m_mmWaveOpenCfg->disableFrameStartAsyncEvent = false;
m_mmWaveOpenCfg->disableFrameStopAsyncEvent = false;
m_mmWaveOpenCfg->useCustomCalibration = false;
m_mmWaveOpenCfg->customCalibrationEnableMask = 0x0;
m_mmWaveOpenCfg->calibMonTimeUnit = 1;
m_mmWaveOpenCfg->adcOutCfg.fmt.b2AdcBits = 2;
m_mmWaveOpenCfg->adcOutCfg.fmt.b2AdcOutFmt = 1;
m_mmWaveOpenCfg->lowPowerMode.lpAdcMode = 0;
m_mmWaveOpenCfg->chCfg.rxChannelEn = 15;
m_mmWaveOpenCfg->chCfg.txChannelEn = 7;
m_mmWaveOpenCfg->chCfg.cascading = 0;