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.

IWR1843BOOST: Sensor Restart during Operation

Part Number: IWR1843BOOST
Other Parts Discussed in Thread: IWR1843

Hello All,

I am using MRR Lap with mrr only configuration, SDK 3.6 LTE.

I am trying to conserve power by stopping the RF sensor when not needed by calling MRR_MSS_CLISensorStop(2, dummy); from "mss_mrr_cli.c"

But when I try to start again using MRR_MSS_CLISensorStart(2, dummy); the processor is stuck at MMWave_start() API specifically in MMWave_startLink() API

The only modification I made is changing gMrrMSSMCB.runningStatus to false in MRR_MSS_CLISensorStop:

static int32_t MRR_MSS_CLISensorStop(int32_t argc, char* argv[])
{
int32_t errCode;

if (gMrrMSSMCB.runningStatus == false) {
return 0; // Already stopped.
}

/* The sensor can only be stopped; if the link has been configured */
if (gMrrMSSMCB.cfgStatus == true) {
/* Stop the sensor */
if (MMWave_stop(gMrrMSSMCB.ctrlHandle, &errCode) < 0) {
/* Error: Unable to stop the mmWave control module */
System_printf("Error: mmWave stop failed [Error code %d]\n", errCode);
return -1;
}
System_printf("Debug: Sensor has been stopped\n");

/* The link is no longer configured. */
gMrrMSSMCB.runningStatus = false;
return 0;
} else {
/* Invalid CLI use case; doing a sensor stop multiple times. Inform the user and return an error code. */
System_printf("Error: Sensor has already been stopped. Reconfigure and start the sensor if required\n");
return -1;
}
}

static int32_t MRR_MSS_CLISensorStart(int32_t argc, char* argv[])
{
MMWave_CalibrationCfg calibrationCfg;
int32_t errCode;

if (gMrrMSSMCB.runningStatus == true) {
/* Already running. */
return 0;
}
/* The sensor can only be started; if the link has been configured */
if (gMrrMSSMCB.cfgStatus == true) {
/* Initialize the calibration configuration: */
memset((void*)&calibrationCfg, 0, sizeof(MMWave_CalibrationCfg));

/* Populate the calibration configuration: */
calibrationCfg.dfeDataOutputMode = MMWave_DFEDataOutputMode_ADVANCED_FRAME;
calibrationCfg.u.chirpCalibrationCfg.enableCalibration = true;
calibrationCfg.u.chirpCalibrationCfg.enablePeriodicity = true;
calibrationCfg.u.chirpCalibrationCfg.periodicTimeInFrames = 10U;

System_printf("Debug: Sensor will start momentarily. \n");

/* Start the mmWave: */
if (MMWave_start(gMrrMSSMCB.ctrlHandle, &calibrationCfg, &errCode) < 0) {
/* Error: Unable to start the mmWave control module */
System_printf("Error: mmWave start failed [Error code %d]\n", errCode);
return -1;
}

gMrrMSSMCB.runningStatus = true;
return 0;
} else {
/* Invalid CLI use case; doing a sensor start without executing the basic or advanced configuration
* command. Inform the user and return an error code. */
System_printf("Error: Please ensure that the XXXCfg CLI command is invoked before starting the sensor\n");
return -1;
}
}

Note: I don't need to change any configuration between stops.

Can anyone help getting this feature to work without this issue. Thank you

  • Hi,

    An expert will comment shortly.

    Best,

    Nate

  • Hello Nathan,

    I tried the approach mentioned in this thread in the end of the MRR_MSS_CLIInit() task in "mss_mrr_cli.c" file by calling MRR_MSS_CLISensorStop() then delay 5 seconds then MRR_MSS_CLISensorStart() then repeated this again one more time.

    The sensor could be started then stopped and restarted successfully only once, then It could be stopped but not started again (again stuck in MMWave_startLink()).

    And when I tried to make the same calls but in a different task outside "mss_mrr_cli.c" using the same APIs, the sensor could only be stopped but not started again not even once.

    Do you have an explanation why this occurs and how to mitigate this issue?

    BR,

    Amr

  • To make my purpose clear, I want to be able to stop the RF front end and the processing chain when not needed in order to conserve power, then be able to restart the RF front end with the same initial configuration and continue normal operation directly, and be able to perform this several times during operation.

    I also tried using SOC_haltBSS and SOC_unhaltBSS which worked before in the Traffic Monitoring Repo but raises an error here in the MRR repo when I call the unhalt function. I guess it has something to do with miss synchronization between cores in the MRR repo.

  • Hi Amr,

    This functionality wasn't really built into the MRR demo. It was however, built into the out-of-box demo for the IWR1843. Can you try the outofbox demo for 1843, load the configuration file, let it run for a minute, send sensorStop, then sensorStart, and see if the problem persists. If not, then you can find the differences in the implementation and port them over.

    I'd also note that while you will save power by not chirping, the sensor will still remain in idle mode when you send sensorStop. It might be better to power off the device with an external controller to save more power.

    Best,

    Nate