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.

IWR1843: Frame configuration failed [Error 79] when executing rlSetFrameConfig

Genius 13655 points
Part Number: IWR1843

Hello Champs,

When customer added below configuration code, it prompted error when executing retVal = rlSetFrameConfig(RL_DEVICE_MAP_INTERNAL_BSS, &FrameCfg);

Error: Frame configuration failed [Error 79]
Error: Please ensure that the XXXCfg CLI command is invoked before starting the sensor

BTW, the advanced frame configuration can work. 

Below are the frame configuration code

static int32_t Adcdata_MSS_AdvancedFrameCfg ()
{
MMWave_OpenCfg openCfg;
int32_t errCode;
rlProfileCfg_t profileCfg;
rlChirpCfg_t chirpCfg;
rlAdvFrameCfg_t advFrameCfg;
rlFrameCfg_t FrameCfg;
int32_t retVal;
rlRfLdoBypassCfg_t rfLdoBypassCfg[1] = {0};

if (gAdcdataMSSMCB.cfgStatus == true)
{
/* Radar has already been configured. */
return 0;
}

// retVal=rlSensorStop(RL_DEVICE_MAP_INTERNAL_BSS);
// if (retVal != RL_RET_CODE_OK)
// {
// System_printf ("STOP failed [Error %d]\n", retVal);
// return -1;
// }

/* Setup the calibration frequency: */
openCfg.freqLimitLow = 760U;
openCfg.freqLimitHigh = 810U;
openCfg.defaultAsyncEventHandler = MMWave_DefaultAsyncEventHandler_MSS;

/* Initialize the minimal configuration: */
Cfg_ChannelCfgInitParams (&openCfg.chCfg);
Cfg_LowPowerModeInitParams(&openCfg.lowPowerMode);
Cfg_ADCOutCfgInitParams (&openCfg.adcOutCfg);
openCfg.calibMonTimeUnit=1;//增加代码
/* Open the mmWave module: */
if (MMWave_open (gAdcdataMSSMCB.ctrlHandle, &openCfg, NULL, &errCode) < 0)
{
System_printf ("Error: MMWDemoMSS mmWave open configuration failed [Error code %d]\n", errCode);
return -1;
}

System_printf ("Set LDO Bypass\n");
rfLdoBypassCfg->ldoBypassEnable = 0x03;
retVal = rlRfSetLdoBypassConfig(RL_DEVICE_MAP_INTERNAL_BSS, (rlRfLdoBypassCfg_t*)rfLdoBypassCfg);
if (retVal != RL_RET_CODE_OK)
{
System_printf ("Error: LDO Bypass config failed [Error %d]\n", retVal);
return -1;
}

/********************************************************************************
* MMWave Link and BSS is operational now. In minimal mode we have access to all
* the mmWave Link API to perform the configuration
*
* Profile configurations:
********************************************************************************/
Cfg_ProfileCfgInitParams (&profileCfg);
retVal = rlSetProfileConfig (RL_DEVICE_MAP_INTERNAL_BSS, 1U, &profileCfg);
if (retVal != RL_RET_CODE_OK)
{
System_printf ("Error: Unable to configure the profile [Error %d]\n", retVal);
return -1;
}

/********************************************************************************
* Chirp configurations:
********************************************************************************/
Cfg_ChirpCfgInitParams (&chirpCfg);
retVal = rlSetChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, 1U, &chirpCfg);
if (retVal != RL_RET_CODE_OK)
{
System_printf ("Error: Unable to configure chirp [Error %d]\n", retVal);
return -1;
}

// /* Advanced Frame configuration. */
// Cfg_AdvFrameCfgInitParams (&advFrameCfg);
// retVal = rlSetAdvFrameConfig(RL_DEVICE_MAP_INTERNAL_BSS, &advFrameCfg);
// if (retVal != RL_RET_CODE_OK)
// {
// System_printf ("Error: Advanced Frame configuration failed [Error %d]\n", retVal);
// return -1;
// }

/* Frame configuration. */
Cfg_FrameCfgInitParams (&FrameCfg);
retVal = rlSetFrameConfig(RL_DEVICE_MAP_INTERNAL_BSS, &FrameCfg);
if (retVal != RL_RET_CODE_OK)
{
System_printf ("Error: Frame configuration failed [Error %d]\n", retVal);
return -1;
}

/* The link has been configured. */
gAdcdataMSSMCB.cfgStatus = true;
System_printf ("Debug: MMWave has been configured for MRR.\n");
return 0;
}

static void Cfg_FrameCfgInitParams (rlFrameCfg_t* ptrFrameCfg)
{
/* Initialize the configuration: */
memset ((void*)ptrFrameCfg, 0, sizeof(rlFrameCfg_t));

ptrFrameCfg->chirpStartIdx=0;
ptrFrameCfg->chirpEndIdx=0;
ptrFrameCfg->numLoops=1;
ptrFrameCfg->numFrames=0;
ptrFrameCfg->framePeriodicity=500000000;
ptrFrameCfg->triggerSelect=1;
ptrFrameCfg->frameTriggerDelay=0;

return;
}


Advanced Frame can work

/* Advanced Frame configuration. */
Cfg_AdvFrameCfgInitParams (&advFrameCfg);
retVal = rlSetAdvFrameConfig(RL_DEVICE_MAP_INTERNAL_BSS, &advFrameCfg);
if (retVal != RL_RET_CODE_OK)
{
System_printf ("Error: Advanced Frame configuration failed [Error %d]\n", retVal);
return -1;
}

static void Cfg_AdvFrameCfgInitParams (rlAdvFrameCfg_t* ptrAdvFrameCfg)
{
uint8_t numOfSubFrame = 0U;

/* Initialize the configuration: */
memset ((void*)ptrAdvFrameCfg, 0, sizeof(rlAdvFrameCfg_t));

/* Populate the default configuration: */
ptrAdvFrameCfg->frameSeq.forceProfile = 0;// 1: force Profile, 0: Don't force profile
ptrAdvFrameCfg->frameSeq.numFrames = 0;//infinite
ptrAdvFrameCfg->frameSeq.triggerSelect = 1;//SW Trigger
ptrAdvFrameCfg->frameSeq.frameTrigDelay= 0;

/* The high resolution 20m subframe */
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].forceProfileIdx = 0;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].numLoops = SUBFRAME_Adcdata_LOOP_COUNT;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].numOfBurst = 1;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].numOfBurstLoops = 1;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].chirpStartIdxOffset= 0;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].numOfChirps = CHIRP_Adcdata_END_INDEX - CHIRP_Adcdata_START_INDEX + 1;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].chirpStartIdx = CHIRP_Adcdata_START_INDEX;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].subFramePeriodicity= SUBFRAME_Adcdata_PERIODICITY_VAL;
ptrAdvFrameCfg->frameSeq.subFrameCfg[0].burstPeriodicity = SUBFRAME_Adcdata_PERIODICITY_VAL;
ptrAdvFrameCfg->frameData.subframeDataCfg[0].numAdcSamples = PROFILE_Adcdata_ADC_SAMPLE_VAL;
ptrAdvFrameCfg->frameData.subframeDataCfg[0].totalChirps = SUBFRAME_Adcdata_NUM_CHIRPS_TOTAL;
ptrAdvFrameCfg->frameData.subframeDataCfg[0].numChirpsInDataPacket = 1;
numOfSubFrame++;
ptrAdvFrameCfg->frameSeq.numOfSubFrames = numOfSubFrame;
ptrAdvFrameCfg->frameData.numSubFrames = numOfSubFrame;
return;
}



Thanks
Regards,
Shine