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.

AWR1243: LVDS valid in cascaded configuration

Anonymous
Anonymous
Guru 17045 points
Part Number: AWR1243

Hi, 

Accoding to

https://e2e.ti.com/support/sensors/f/1023/t/686001

LVDS valid is only high for the first frame in an apparently multiple frame configuration.

We're following a sub-frame configuration (total of 3) for a master - slave architecture. When probing LVDS_VALID from master, we see only it "high" for the first frame (with the subFramePeriodicity as we wish). After that first frame, it should be slave the device transmitting. The spectrum analyzer shows we are actually chirping with slave (some other transmit antennas).

Could you please tell us how to get LVDS valid per sub-frame?

Thanks

M.

  • Hi,

    Our cascade team will review your question and will get back to you as soon as possible

    thank you

    Cesar

  • Anonymous
    0 Anonymous in reply to Cesar

    Hi,

    any update on that?

    Thanks.

  • Hello,

    The LVDS VALID signal will be HIGH for 1 chirp , during the period where the chirp data is being transmitted out on the LVDs lines and will go low at the end of the transfer of the chirp data. It is not linked to sub frame or frame, its linked to single chirp.

    Regards,
    Vivek

  • Anonymous
    0 Anonymous in reply to Vivek Dham

    Thanks Vivek, thanks for the clarification.

    However, why do we not see slave chip's LVDS valid for our subframe configuration? I attach it below:

    if(deviceMap == 1U)
    
            {
    
                setChirpCfgArgs[0].chirpStartIdx = 0;
    
                setChirpCfgArgs[0].chirpEndIdx = 1;
    
                setChirpCfgArgs[0].profileId = 0;
    
                setChirpCfgArgs[0].startFreqVar = 0;
    
                setChirpCfgArgs[0].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[0].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[0].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[0].txEnable = 1U;
    
    
    
                setChirpCfgArgs[1].chirpStartIdx = 1;
    
                setChirpCfgArgs[1].chirpEndIdx = 2;
    
                setChirpCfgArgs[1].profileId = 0;
    
                setChirpCfgArgs[1].startFreqVar = 0;
    
                setChirpCfgArgs[1].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[1].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[1].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[1].txEnable = 1U;
    
    
    
                setChirpCfgArgs[2].chirpStartIdx = 2;
    
                setChirpCfgArgs[2].chirpEndIdx = 3;
    
                setChirpCfgArgs[2].profileId = 0;
    
                setChirpCfgArgs[2].startFreqVar = 0;
    
                setChirpCfgArgs[2].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[2].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[2].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[2].txEnable = 0U;
    
    
    
                setChirpCfgArgs[3].chirpStartIdx = 3;
    
                setChirpCfgArgs[3].chirpEndIdx = 4;
    
                setChirpCfgArgs[3].profileId = 0;
    
                setChirpCfgArgs[3].startFreqVar = 0;
    
                setChirpCfgArgs[3].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[3].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[3].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[3].txEnable = 0U;
    
    
    
                setChirpCfgArgs[4].chirpStartIdx = 4;
    
                setChirpCfgArgs[4].chirpEndIdx = 5;
    
                setChirpCfgArgs[4].profileId = 0;
    
                setChirpCfgArgs[4].startFreqVar = 0;
    
                setChirpCfgArgs[4].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[4].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[4].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[4].txEnable = 0U;
    
    
    
                setChirpCfgArgs[5].chirpStartIdx = 5;
    
                setChirpCfgArgs[5].chirpEndIdx = 6;
    
                setChirpCfgArgs[5].profileId = 0;
    
                setChirpCfgArgs[5].startFreqVar = 0;
    
                setChirpCfgArgs[5].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[5].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[5].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[5].txEnable = 0U;
    
    
    
            } else {
    
    
    
                setChirpCfgArgs[0].chirpStartIdx = 0;
    
                setChirpCfgArgs[0].chirpEndIdx = 1;
    
                setChirpCfgArgs[0].profileId = 0;
    
                setChirpCfgArgs[0].startFreqVar = 0;
    
                setChirpCfgArgs[0].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[0].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[0].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[0].txEnable = 0U;
    
    
    
                setChirpCfgArgs[1].chirpStartIdx = 1;
    
                setChirpCfgArgs[1].chirpEndIdx = 2;
    
                setChirpCfgArgs[1].profileId = 0;
    
                setChirpCfgArgs[1].startFreqVar = 0;
    
                setChirpCfgArgs[1].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[1].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[1].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[1].txEnable = 0U;
    
    
    
                setChirpCfgArgs[2].chirpStartIdx = 2;
    
                setChirpCfgArgs[2].chirpEndIdx = 3;
    
                setChirpCfgArgs[2].profileId = 0;
    
                setChirpCfgArgs[2].startFreqVar = 0;
    
                setChirpCfgArgs[2].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[2].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[2].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[2].txEnable = 2U;
    
    
    
                setChirpCfgArgs[3].chirpStartIdx = 3;
    
                setChirpCfgArgs[3].chirpEndIdx = 4;
    
                setChirpCfgArgs[3].profileId = 0;
    
                setChirpCfgArgs[3].startFreqVar = 0;
    
                setChirpCfgArgs[3].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[3].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[3].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[3].txEnable = 2U;
    
    
    
                setChirpCfgArgs[4].chirpStartIdx = 4;
    
                setChirpCfgArgs[4].chirpEndIdx = 5;
    
                setChirpCfgArgs[4].profileId = 0;
    
                setChirpCfgArgs[4].startFreqVar = 0;
    
                setChirpCfgArgs[4].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[4].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[4].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[4].txEnable = 4U;
    
    
    
                setChirpCfgArgs[5].chirpStartIdx = 5;
    
                setChirpCfgArgs[5].chirpEndIdx = 6;
    
                setChirpCfgArgs[5].profileId = 0;
    
                setChirpCfgArgs[5].startFreqVar = 0;
    
                setChirpCfgArgs[5].freqSlopeVar = freqSlopeVar;
    
                setChirpCfgArgs[5].idleTimeVar = idleTimeVar;
    
                setChirpCfgArgs[5].adcStartTimeVar = adcStartTimeVar;
    
                setChirpCfgArgs[5].txEnable = 4U;
    
            }
    
    subFrameCfgArgs[0].forceProfileIdx = 0;
    
        subFrameCfgArgs[0].chirpStartIdx = 0;
    
        subFrameCfgArgs[0].numOfChirps = 2;
    
        subFrameCfgArgs[0].numLoops = 255;
    
        subFrameCfgArgs[0].burstPeriodicity = burstPeriodicity;
    
        subFrameCfgArgs[0].chirpStartIdxOffset = 0;
    
        subFrameCfgArgs[0].numOfBurst = 1;
    
        subFrameCfgArgs[0].numOfBurstLoops = 1;
    
        subFrameCfgArgs[0].subFramePeriodicity = subFramePeriodicity;
    
    
    
        subFrameDataCfgArgs[0].totalChirps = chirpEndIdx+1;
    
        subFrameDataCfgArgs[0].numChirpsInDataPacket = 1;
    
    
    
        subFrameCfgArgs[1].forceProfileIdx = 0;
    
        subFrameCfgArgs[1].chirpStartIdx = 2;
    
        subFrameCfgArgs[1].numOfChirps = 2;
    
        subFrameCfgArgs[1].numLoops = 255;
    
        subFrameCfgArgs[1].burstPeriodicity = burstPeriodicity;
    
        subFrameCfgArgs[1].chirpStartIdxOffset = 0;
    
        subFrameCfgArgs[1].numOfBurst = 1;
    
        subFrameCfgArgs[1].numOfBurstLoops = 1;
    
        subFrameCfgArgs[1].subFramePeriodicity = subFramePeriodicity;
    
    
    
        subFrameDataCfgArgs[1].totalChirps = chirpEndIdx+1;
    
        subFrameDataCfgArgs[1].numChirpsInDataPacket = 1;
    
    
    
        subFrameCfgArgs[2].forceProfileIdx = 0;
    
        subFrameCfgArgs[2].chirpStartIdx = 4;
    
        subFrameCfgArgs[2].numOfChirps = 2;
    
        subFrameCfgArgs[2].numLoops = 255;
    
        subFrameCfgArgs[2].burstPeriodicity = burstPeriodicity;
    
        subFrameCfgArgs[2].chirpStartIdxOffset = 0;
    
        subFrameCfgArgs[2].numOfBurst = 1;
    
        subFrameCfgArgs[2].numOfBurstLoops = 1;
    
        subFrameCfgArgs[2].subFramePeriodicity = subFramePeriodicity;
    

  • Hello ,

    Can you share the capture of the LVDS VALID signal , along with LVDS FRAME CLK and LVDS CLK signals from and oscilloscope? Are you saying you see the LVDS VALID signal is static HIGH for the complete sub frame and not going low inbetween the chirps? Please capture the waveform for 3-4 chirps duration only so that we can see the signal state inbetween the chirps clearly.

    regards,

    Vivek

  • Hello ,

    Maybe if you can share images of the LVDS VALID showing the issue it might help us understand the problem you are facing.

    Regards,
    vivek

  • Anonymous
    0 Anonymous in reply to Vivek Dham

    Hi,

    We want to achieve that:

    where LVDS is valid (high) for every chirp (there's no issue with that). Black LVDS signal represents MASTER TX0 while orange LVDS signal represents SLAVE TX1 and green LVDS signal represents SLAVE TX0. We confirm that subFramePeriodicity is set correctly as well.

    However, we get:

    meaning slave chirp is not chirping. The configuration employed is the one above and in https://e2e.ti.com/support/sensors/f/1023/p/923471/3419347#3419347 . We have tuned trigger parameters but with no success.

    Thanks.

  • Anonymous
    0 Anonymous in reply to Anonymous

    Any update on this?

    Below I attach our latest config:

    advFrameCfgArgs.frameSeq.subFrameCfg[0].forceProfileIdx = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].chirpStartIdx = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].numOfChirps = 1;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].numLoops = 255;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].burstPeriodicity = 2098000;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].chirpStartIdxOffset = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].numOfBurst = 1;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].numOfBurstLoops = 2;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].subFramePeriodicity = 60000000;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].reserved0 = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].reserved1 = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[0].reserved2 = 0;
    
    
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].forceProfileIdx = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].chirpStartIdx = 2;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].numOfChirps = 1;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].numLoops = 255;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].burstPeriodicity = 2098000;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].chirpStartIdxOffset = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].numOfBurst = 1;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].numOfBurstLoops = 2;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].subFramePeriodicity = 60000000;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].reserved0 = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].reserved1 = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[1].reserved2 = 0;
    
    
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].forceProfileIdx = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].chirpStartIdx = 3;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].numOfChirps = 1;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].numLoops = 255;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].burstPeriodicity = 2098000;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].chirpStartIdxOffset = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].numOfBurst = 1;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].numOfBurstLoops = 2;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].subFramePeriodicity = 60000000;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].reserved0 = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].reserved1 = 0;
    
    	advFrameCfgArgs.frameSeq.subFrameCfg[2].reserved2 = 0;

    where we have 3 unique chirps per chip with varying txEnable. We loop them accordingly to achieve the 512. However, we see no LVDS valid when Slave is chirping.

  • Hello,

    The slave can chirp only when the master device is chirping, it is synced with the master. So when you say " salve is chirping" I am assuming you are also running the frames in the master, is that correct? In the second sub frame are you seeing the LVDS valid of the master device toggling every chirp?

    regards,

    Vivek

  • Anonymous
    0 Anonymous in reply to Vivek Dham

    Hello, 

    Yes, the frames are in the master as well but with txEnable set to 0:

    if( deviceMap == 1U ) {
    
    
    
    		setChirpCfgArgs[0].chirpStartIdx = 0;
    
    		setChirpCfgArgs[0].chirpEndIdx = 1;
    
    		setChirpCfgArgs[0].profileId = 0;
    
    		setChirpCfgArgs[0].startFreqVar = 0;
    
    		setChirpCfgArgs[0].freqSlopeVar = freqSlopeVar;
    
    		setChirpCfgArgs[0].idleTimeVar = idleTimeVar;
    
    		setChirpCfgArgs[0].adcStartTimeVar = adcStartTimeVar;
    
    		setChirpCfgArgs[0].txEnable = 1U;
    
    
    		setChirpCfgArgs[1].chirpStartIdx = 1;
    
    		setChirpCfgArgs[1].chirpEndIdx = 2;
    
    		setChirpCfgArgs[1].profileId = 0;
    
    		setChirpCfgArgs[1].startFreqVar = 0;
    
    		setChirpCfgArgs[1].freqSlopeVar = freqSlopeVar;
    
    		setChirpCfgArgs[1].idleTimeVar = idleTimeVar;
    
    		setChirpCfgArgs[1].adcStartTimeVar = adcStartTimeVar;
    
    		setChirpCfgArgs[1].txEnable = 0U;
    
    
    		setChirpCfgArgs[2].chirpStartIdx = 2;
    
    		setChirpCfgArgs[2].chirpEndIdx = 3;
    
    		setChirpCfgArgs[2].profileId = 0;
    
    		setChirpCfgArgs[2].startFreqVar = 0;
    
    		setChirpCfgArgs[2].freqSlopeVar = freqSlopeVar;
    
    		setChirpCfgArgs[2].idleTimeVar = idleTimeVar;
    
    		setChirpCfgArgs[2].adcStartTimeVar = adcStartTimeVar;
    
    		setChirpCfgArgs[2].txEnable = 0U;
    
    	} else {
    
    		setChirpCfgArgs[0].chirpStartIdx = 0;
    
    		setChirpCfgArgs[0].chirpEndIdx = 1;
    
    		setChirpCfgArgs[0].profileId = 0;
    
    		setChirpCfgArgs[0].startFreqVar = 0;
    
    		setChirpCfgArgs[0].freqSlopeVar = freqSlopeVar;
    
    		setChirpCfgArgs[0].idleTimeVar = idleTimeVar;
    
    		setChirpCfgArgs[0].adcStartTimeVar = adcStartTimeVar;
    
    		setChirpCfgArgs[0].txEnable = 0U;
    
    
    
    		setChirpCfgArgs[1].chirpStartIdx = 1;
    
    		setChirpCfgArgs[1].chirpEndIdx = 2;
    
    		setChirpCfgArgs[1].profileId = 0;
    
    		setChirpCfgArgs[1].startFreqVar = 4660337;
    
    		setChirpCfgArgs[1].freqSlopeVar = freqSlopeVar;
    
    		setChirpCfgArgs[1].idleTimeVar = idleTimeVar;
    
    		setChirpCfgArgs[1].adcStartTimeVar = adcStartTimeVar;
    
    		setChirpCfgArgs[1].txEnable = 2U;
    
    
    
    		setChirpCfgArgs[2].chirpStartIdx = 2;
    
    		setChirpCfgArgs[2].chirpEndIdx = 3;
    
    		setChirpCfgArgs[2].profileId = 0;
    
    		setChirpCfgArgs[2].startFreqVar = 8388607;
    
    		setChirpCfgArgs[2].freqSlopeVar = freqSlopeVar;
    
    		setChirpCfgArgs[2].idleTimeVar = idleTimeVar;
    
    		setChirpCfgArgs[2].adcStartTimeVar = adcStartTimeVar;
    
    		setChirpCfgArgs[2].txEnable = 4U;
    
    
    
    
    	}

    we believe we only see LVDS valid for the first sub-frame, that's the issue.

    Thanks

  • Anonymous
    0 Anonymous in reply to Anonymous

    Hello Vivek,

    could you have a closer look at this?

    Thanks

  • Hello,
     I assume then you are not seeing the second subframe data from master device as well (looking at LVDS DATA VALID not toggling)? What is the Trigger select you have set? Are you setting the master device  in HW triggered mode or SW triggered mode?  Also what about the same setting for slave device? The slave device should always be in HW triggered mode since it needs to chirp based on the SYCN IN signal from master. For the master device, if you are setting in HW triggered mode then you need to provide external SYCN IN pulse for every sub frame.

    Regards,
    Vivek

  • Anonymous
    0 Anonymous in reply to Vivek Dham

    Hi Vivek,

    Many thanks for your reply. You're correct, we are not seeing the second and third subframes in either chips.

    This is our triggering setting:

    if (deviceMap == RL_DEVICE_MAP_CASCADED_2)
    
    	{
    
    		advFrameCfgArgs.frameSeq.triggerSelect = 2;
    
    	}
    
    	else
    
    	{
    
    		advFrameCfgArgs.frameSeq.triggerSelect = 1;
    
    	}

    If i'm not mistaken, slave is in SW triggered mode. Shall we change it to HW triggered mode instead and trigger SYNC_IN for every subframe?

    Thanks again.

  • Hello,

    the master should be in SW triggered mode and slave device in HW triggered mode. The SYNC OUT of the master needs to be connected to the SYNC IN pin of the slave so that it receives the SYNC pulse and triggers the chirps.

    Regards,
    vivek