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.

AWR2243: Issue with setting chirp config using dfp for AWR2243 with external MCU.

Part Number: AWR2243

Hello all,

I am trying to set chirp config using dfp.

1) set chirp config using MMWL_chirpConfig

2) call MMWL_readChirpConfig to below config

3) frame config is also provided below.

4) num_tx =3 and num_rx = 4

We still observe only one chirp. Can you guys help with what the issue could be?

void MMWL_readChirpConfig(rlChirpCfg_t *chirpCfgArgs, int chirpCfgCnt)
{
    chirpCfgArgs->chirpStartIdx = 0;
    chirpCfgArgs->chirpEndIdx = 0;
    chirpCfgArgs->profileId = 0;
    chirpCfgArgs->startFreqVar = 0;//*53.644Hz
    chirpCfgArgs->freqSlopeVar = 0;//*48.279KHz/uS
    chirpCfgArgs->idleTimeVar = 0;//*10ns
    chirpCfgArgs->adcStartTimeVar = 1000;//*10ns
    chirpCfgArgs->txEnable = 1;
    chirpCfgArgs++;

    chirpCfgArgs->chirpStartIdx =1;
    chirpCfgArgs->chirpEndIdx = 1;
    chirpCfgArgs->profileId = 0;
    chirpCfgArgs->startFreqVar = 0;//*53.644Hz
    chirpCfgArgs->freqSlopeVar = 0;//*48.279KHz/uS
    chirpCfgArgs->idleTimeVar = 0;//*10ns
    chirpCfgArgs->adcStartTimeVar = 1000;//*10ns
    chirpCfgArgs->txEnable = 2;
    chirpCfgArgs++;

 }
void MMWL_readFrameConfig(rlFrameCfg_t *frameCfgArgs)
{
    frameCfgArgs->chirpStartIdx = 0;
    frameCfgArgs->chirpEndIdx = 1;
    frameCfgArgs->numFrames = 1;//infinite
    frameCfgArgs->numLoops = 1;
    frameCfgArgs->framePeriodicity = 1600000;//*5ns
    frameCfgArgs->frameTriggerDelay = 0;//*5ns
    frameCfgArgs->numAdcSamples = 512;
    frameCfgArgs->triggerSelect = 1;//(Software API based triggering)
}
int MMWL_chirpConfig(unsigned char deviceMap)
{
    int i, retVal = RL_RET_CODE_OK;
    rlChirpCfg_t setChirpCfgArgs[2] = {0};
    rlChirpCfg_t getChirpCfgArgs[MAX_GET_CHIRP_CONFIG_IDX+1] = {0};

    /*read chirpCfgArgs from config file*/
    MMWL_readChirpConfig(&setChirpCfgArgs[0], 2);
    /* With this API we can configure max 512 chirp in one call */
    retVal = rlSetChirpConfig(deviceMap, 2U, &setChirpCfgArgs[0U]);

    /* read back Chirp configuration, to verify that setChirpConfig actually set to Device
      @Note - This examples read back (10+1) num of chirp configuration for demonstration,
               which user can raise to match with their requirement */
    retVal = rlGetChirpConfig(deviceMap, setChirpCfgArgs[0].chirpStartIdx,
                              setChirpCfgArgs[0].chirpStartIdx + MAX_GET_CHIRP_CONFIG_IDX, &getChirpCfgArgs[0]);
    if (retVal != RL_RET_CODE_OK)
    {
        printf("GetChirp Configuration failed for deviceMap %u with error %d \n\n",
                deviceMap, retVal);
    }
    else
    {
        for (i=0; i <= MAX_GET_CHIRP_CONFIG_IDX; i++)
        {
            /* @Note- This check assumes that all chirp configs are configured by single setChirpCfgArgs[0] */
            /* compare each chirpConfig parameters to lastly configured via rlDynChirpConfig API */
            if ((getChirpCfgArgs[i].profileId != setChirpCfgArgs[0].profileId) || \
                (getChirpCfgArgs[i].freqSlopeVar != setChirpCfgArgs[0].freqSlopeVar) || \
                (getChirpCfgArgs[i].txEnable != setChirpCfgArgs[0].txEnable) || \
                (getChirpCfgArgs[i].startFreqVar != setChirpCfgArgs[0].startFreqVar) || \
                (getChirpCfgArgs[i].idleTimeVar != setChirpCfgArgs[0].idleTimeVar) || \
                (getChirpCfgArgs[i].adcStartTimeVar != setChirpCfgArgs[0].adcStartTimeVar))
            {
                    break;}

        }
    }

    return retVal;
}
  • Hi,

    Do you see one chirp or one frame?

    Please note that in the current frameCfg configuration, there is only 1 frame triggered. In order to trigger infinite frames, we need numFrames = 0

    frameCfgArgs->numFrames = 1;//infinite

    Thank you

    Cesar

  • I see one chirp for 1 frame ceaser . Ideally I was hoping to see two chirps. chirp1 => tx1 and chirp 2 => tx2.

    plzz ignore //infinite

  • Hi,

    The chirp and frame configurations look correct

    What is the profile configuration used?

    How do you know that you are receiving only one chirp?

    I think the issue may be either in the CSI connection or the host receiving the data

    thank you

    Cesar

  • Thanks Ceasar for getting back,

    Below are the observations.

    1) The size of the data received is equivalent to one chirp size. Checked on the host receiving data using Wireshark and see bytes equivalent to single chirp.

    2) Interestingly when we change the num_loops parameter in frame config, we see more chirps corresponding to single Tx. For example:

    In this below case we see that Radar transmits only single chirp.

    void MMWL_readChirpConfig(rlChirpCfg_t *chirpCfgArgsint chirpCfgCnt)
    {
        chirpCfgArgs->chirpStartIdx = 0;
        chirpCfgArgs->chirpEndIdx = 32;
        chirpCfgArgs->profileId = 0;
        chirpCfgArgs->startFreqVar = 0;//*53.644Hz
        chirpCfgArgs->freqSlopeVar = 0;//*48.279KHz/uS
        chirpCfgArgs->idleTimeVar = 0;//*10ns
        chirpCfgArgs->adcStartTimeVar = 1000;//*10ns
        chirpCfgArgs->txEnable = 1;
        chirpCfgArgs++; }
    void MMWL_readFrameConfig(rlFrameCfg_t *frameCfgArgs)
    {
        frameCfgArgs->chirpStartIdx = 0;
        frameCfgArgs->chirpEndIdx = 32;
        frameCfgArgs->numFrames = 1;//infinite
        frameCfgArgs->numLoops = 1;
        frameCfgArgs->framePeriodicity = 1600000;//*5ns
        frameCfgArgs->frameTriggerDelay = 0;//*5ns
        frameCfgArgs->numAdcSamples = 512;
        frameCfgArgs->triggerSelect = 1;//(Software API based triggering)
    }
    int MMWL_chirpConfig(unsigned char deviceMap)
    {
        int iretVal = RL_RET_CODE_OK;
        rlChirpCfg_t setChirpCfgArgs[1= {0};
        rlChirpCfg_t getChirpCfgArgs[MAX_GET_CHIRP_CONFIG_IDX+1= {0};

        /*read chirpCfgArgs from config file*/
        MMWL_readChirpConfig(&setChirpCfgArgs[0], 1);
        /* With this API we can configure max 512 chirp in one call */
        retVal = rlSetChirpConfig(deviceMap, 1U&setChirpCfgArgs[0U]);
    However, when I change the config to a different parameter as below, I see all the chirps being transmitted. Any problem you see in the above config?
    For some reason the chirp config is not taking affect using the setchirp API.
    void MMWL_readChirpConfig(rlChirpCfg_t *chirpCfgArgsint chirpCfgCnt)
    {
        chirpCfgArgs->chirpStartIdx = 0;
        chirpCfgArgs->chirpEndIdx = 0;
        chirpCfgArgs->profileId = 0;
        chirpCfgArgs->startFreqVar = 0;//*53.644Hz
        chirpCfgArgs->freqSlopeVar = 0;//*48.279KHz/uS
        chirpCfgArgs->idleTimeVar = 0;//*10ns
        chirpCfgArgs->adcStartTimeVar = 1000;//*10ns
        chirpCfgArgs->txEnable = 1;
        chirpCfgArgs++; }
    void MMWL_readFrameConfig(rlFrameCfg_t *frameCfgArgs)
    {
        frameCfgArgs->chirpStartIdx = 0;
        frameCfgArgs->chirpEndIdx = 0;
        frameCfgArgs->numFrames = 1;//infinite
        frameCfgArgs->numLoops = 32;
        frameCfgArgs->framePeriodicity = 1600000;//*5ns
        frameCfgArgs->frameTriggerDelay = 0;//*5ns
        frameCfgArgs->numAdcSamples = 512;
        frameCfgArgs->triggerSelect = 1;//(Software API based triggering)
    }
    int MMWL_chirpConfig(unsigned char deviceMap)
    {
        int iretVal = RL_RET_CODE_OK;
        rlChirpCfg_t setChirpCfgArgs[1= {0};
        rlChirpCfg_t getChirpCfgArgs[MAX_GET_CHIRP_CONFIG_IDX+1= {0};

        /*read chirpCfgArgs from config file*/
        MMWL_readChirpConfig(&setChirpCfgArgs[0], 1);
        /* With this API we can configure max 512 chirp in one call */
        retVal = rlSetChirpConfig(deviceMap, 1U&setChirpCfgArgs[0U]);
  • I think the issue is that you are sending chirps which have not been defined.

    The following code a frame with following structure (C0, C1, C2, C3, C4...C32) 33 chirps. However the MMWL_chirpConfig() has only initialized 1 chirp, C0

        frameCfgArgs->chirpStartIdx = 0;
        frameCfgArgs->chirpEndIdx = 32;
        frameCfgArgs->numFrames = 1;//infinite
        frameCfgArgs->numLoops = 1

    The following code will create a frame with following structure (C0, C0, C0, C0, C0...) 33 chirps of type C0, So this will work because C0 is initialized
        frameCfgArgs->chirpStartIdx = 0;
        frameCfgArgs->chirpEndIdx = 0;
        frameCfgArgs->numFrames = 1;//infinite
        frameCfgArgs->numLoops = 32
    Thank you
    Cesar