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.

CCS/IWR6843ISK: Capturing Data from 2 TX Antennas

Part Number: IWR6843ISK
Other Parts Discussed in Thread: MMWAVEICBOOST,

Tool/software: Code Composer Studio

Hello Experts,

I am using the IWR6843ISK with the MMWAVEICBOOST carrier platform. For processing raw data I changed the Code of the mmWave demo application (mmwave_sdk_68xx_hwa). I adapted the DPC_ObjectDetection_execute function in such a way that the raw data samples captured from the ADCBUF are stored in the L3 RAM one after the other. Thus, I am able to read the data with the memory browser of CCS. Storing data and postprocessing of the raw ADC samples with MATLAB works fine in the case of using 1 TX Antenna and 1-4 RX Antennas.

The problem appears, when using 2 TX antennas. I always get the same four sets of data samples for every chirp. The spectra of the virtual antennas 1-4 are identical to the spectra of the virtual antennas 5-8. It seems that the individual chrips all come from the same transmitting antenna.

Since TDM-MIMO is used by default, I assume that the data stored one after the other in the memory comes from TX1 and TX3 alternately. Is that correct?

The CLI configuration I am sending to the board is as follows.

sensorStop
flushCfg
dfeDataOutputMode 1
channelCfg 15 5 0
adcCfg 2 1
adcbufCfg -1 0 1 1 1
profileCfg 0 60 577 7 47.06 0 0 85 1 80 2048 0 0 30
chirpCfg 0 0 0 0 0 0 0 1
chirpCfg 1 1 0 0 0 0 0 4
frameCfg 0 1 1 0 50 1 0
lowPower 0 0
guiMonitor -1 0 0 0 0 0 0
cfarCfg -1 0 2 8 4 3 0 15 1
cfarCfg -1 1 0 4 2 3 1 15 1
multiObjBeamForming -1 1 0.5
clutterRemoval -1 0
calibDcRangeSig -1 0 -5 8 256
extendedMaxVelocity -1 0
lvdsStreamCfg -1 0 0 0
compRangeBiasAndRxChanPhase 0.0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
measureRangeBiasAndRxChanPhase 0 1.5 0.2
CQRxSatMonitor 0 3 4 121 0
CQSigImgMonitor 0 39 4
analogMonitor 0 0
aoaFovCfg -1 -90 90 -90 90
cfarFovCfg -1 0 0 2.89
cfarFovCfg -1 1 -1 1.00
sensorStart

Hope we can find a solution for this issue.

Thanks

Lukas

  • HI, 

    You mentioned that "The spectra of the virtual antennas 1-4 are identical to the spectra of the virtual antennas 5-8".   Instead of looking at the spectra, can you look at the raw ADC data, and see whether TX1-RX1 and TX2-RX1 data are on top of each other?

    Or you can program to use TX1 only and program TX2 only to see whether your raw ADC data kind of matching your two set of ADC data with the TDM-MIMO configure.

    chirpCfg 0 0 0 0 0 0 0 1
    frameCfg 0 0 1 0 50 1 0

    chirpCfg 0 0 0 0 0 0 0 4
    frameCfg 0 0 1 0 50 1 0

    Best,

    Zigang

  • Hi Zigang,

    the comparison of the raw data shows the same result. The ADC samples of virtual antenna 1-4 are identical to the samples of virtual antenna 5-8.

    When I use TX1 and TX3 separately it seems to work correct.

    Best regards

    Lukas

  • Hi, Lukas:

    Can you check in your software, when you copy the raw ADC data to the L3, have you overwrite them, or you have copy them to the right memory offset. 

    Best,

    Zigang

  • Hi Zigang,

    I am using the DPC_ObjectDetection_execute function of the mmwave_sdk_68xx_hwa out of the box demo for copying the data from ADCBUF to L3 memory. The code I implemented is as follows.

        uint8_t *ptrDest = (uint8_t*)(&gMmwL3[0] + (gChirpCount * subFrmObj->staticCfg.ADCBufData.dataProperty.numAdcSamples * subFrmObj->staticCfg.ADCBufData.dataProperty.numRxAntennas * 2 * 2));
        uint8_t* adcptr = subFrmObj->staticCfg.ADCBufData.data;
    
        for(i = 0; i < subFrmObj->staticCfg.ADCBufData.dataProperty.numAdcSamples * subFrmObj->staticCfg.ADCBufData.dataProperty.numRxAntennas * 2 * 2; i++)
        {
            *ptrDest = *adcptr;
            adcptr++;
            ptrDest++;
        }
    
        gChirpCount++;
        if (gChirpCount * subFrmObj->staticCfg.ADCBufData.dataProperty.numAdcSamples * subFrmObj->staticCfg.ADCBufData.dataProperty.numRxAntennas * 2 * 2
            >= SOC_L3RAM_SIZE/2)
        {
            gChirpCount = 0;
        }

    Besides I changed the memory location of the processed data so I can use the half  of the L3 memory for storing my raw data.

        /* Memory related config */
        objDetInitParams.L3ramCfg.addr = (void *)&gMmwL3[0x48000];
        objDetInitParams.L3ramCfg.size = sizeof(gMmwL3)/2;
        objDetInitParams.CoreLocalRamCfg.addr = &gDPC_ObjDetTCM[0];
        objDetInitParams.CoreLocalRamCfg.size = sizeof(gDPC_ObjDetTCM);

    So as I understand the code copys the ADC raw data with size

    numRxAntennas*numADCsamples*2(IQ)*2(2Byte per Sample)

    for every chirp.

    Best regards

    Lukas

  • We can not debug and review the code for you.   

    Just remember the data comes in the order of:

    1st chirp of TX1,  1st chirp of TX3, 2nd chirp of TX1, 2nd chirp of TX3,

    3rd chirp of TX1,  3rd chirp of TX3, 4th chirp of TX1, 4th chirp of TX3 

    and total size of one chirp is:

    4*numADCsamples*2(IQ)*2(2Byte per Sample)

    Hope it helps,

    Zigang

  • Sure, but can you please tell me if it is the right approach. The order of the data is clear to me but am I using the right function for saving the data? Older posts in this forum regarding raw data capturing recommend using the chirp interrupt event but I am using the newest SDK version with the data path chain structure so there is no chirp interrupt event. Can you please give a brief overview how to proceed?

    Best regards

    Lukas

  • Hi, Lukas:

    I am not familiar with this part of the code.   Since you were able to get one TX data capture right, 

    and TX1 data and TX3 data chirp are coming at different time, I am guessing maybe you are re-write the 

    second chirp (TX3 data) to the same location of first chirp (TX1 chirp).    If I were you, I will make a debug with a breakpoint to check whether the destination address are offset correctly for the first and second chirp.

    Best,

    Zigang

  • Hi Zigang,

    thanks for your help. I resolved my issue!

    The DPC_ObjectDetection_execute function is called only once per frame. Therefore I captured only the first chirp of every frame. After changing the code I am now copying the data every chirp and it works as I expected.

    Best regards

    Lukas