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.

AWR1843: Need help to send a mount of data through LVDS when using MRR demo or MMW demo

Part Number: AWR1843
Other Parts Discussed in Thread: IWR1843, MMWAVE-SDK

Hi,

I want to send a mount of data through LVDS from IWR1843 radar to PC.

It works well by using  MMWStudio 02.01.00.00.

However, there are problems when using MRR demo or MMW demo.

The max data I can get with only using 1 CBUFF user beffer is 3FFF * 2 =  32766Bytes, as former post:

https://e2e.ti.com/support/sensors/f/1023/t/787440?keyMatch=CBUFF%20SIZE&tisearch=Search-EN-everything

Noticing the fact that we can capture the adc data by flashing the  xwr18xx_masterss.bin located in "C:\ti\mmwave_studio_02_01_00_00\rf_eval_firmware\masterss"  to 1843 MSS.

So can I get the source code of that bin file? Then I can refer its usage of LVDS to solute my problem in MRR or MMW project.

If unavailable, what should I do?

Regards.

  • Hi User,

    Can you confirm which version of the mmWave-SDK you are using? Have you flashed your EVM with the mmw or mrr binary?

    We'll need some time to look into this.

    Regards,

    AG

  • Hi AG,

    Thankful for your rapid reply.

    The SDK version I'm using is mmwave_sdk_03_01_00_02.

    Definitely, I flashed the EVM with mrr binary, which succeeds to send 32767 bytes data through LVDS.

    In the reference code inside OOB Demo, only the detected points are sent. So it can not solve my problem.

    Regards,

    Wallace

     

  • Wallace, 

       Currently mmWave demo with LVDS-based instrumentation is supported through the SDK as shown below in the SDK userguide document 

    Unfortunately, MRR demo is not available in the LVDS instrumentation. 

    Source code of out of box demo could be found from the following location in the SDK

    C:\D\ti\mmwave_sdk_03_03_00_03\packages\ti\demo\

    Thanks and regards,

    CHETHAN KUMAR Y.B.

  • Hi,CHETHAN KUMAR Y.B.

    In the reference code inside OOB Demo, only the detected points are sent. So it can not solve my problem.

    How to send data more than 32776 bytes each frame time?

    Former post pointed that user can create more CBUFF sessions. But how to realize that ?

    Thanks and regards,

    Wallace

  • Hi Wallace,

    I am not sure we understand your goal and the question below.

    "In the reference code inside OOB Demo, only the detected points are sent. So it can not solve my problem."

    The Out of Box demo can stream out RAW ADC data as well as the detected points and each can be individually enabled using the options given in the lvdsStreamCfg command. If your goal is to capture raw ADC data, you should be able to do so without any limitation using the Out of Box demo using LVDS instrumentation process.

    Regards

    -Nitin

  • Hi,Nitin

    Thank you for the reply.

    In the xwr16xx demo project of sdk 03_02_00_04,  the radar cube data can be sent through UART inside MmwDemo_transmitProcessedOutput(),

    followed by such code:

    result->radarCube.data = (void *) SOC_translateAddress((uint32_t) result->radarCube.data,
                                                         SOC_TranslateAddr_Dir_FROM_OTHER_CPU,
                                                         &errCode);

    But I can not find it in MmwDemo_LVDSStreamSwConfig().

    Have you tested the transmition of radar cube data through LVDS? Or only a demo code is provided?

    Do I miss something, or we missunderstand each other?

    I can use MMWave Studio to send RAW ADC data through LVDS.

    What I need is to send it using MmwDemo_LVDSStreamSwConfig().

    As I said, I found the max data size can be sent is 1 CBUFF user beffer or 32766Bytes.

    Errors are caused by following code:

            sessionCfg.u.swCfg.userBufferInfo[1].size    = HSIHeader_toCBUFFUnits(numRangeBins * numDopplerBins * numAngleBins * sizeof(uint16_t)));
            sessionCfg.u.swCfg.userBufferInfo[1].address = (uint32_t)radarCube.data;

    Please give me a further help.

    Best regards,

    Wallace

  • Hi Wallace,

    I would like to clarify a couple of things:

    1. The function MmwDemo_LVDSStreamSwConfig() configures, as the name suggests, the LVDS streaming of software information only from the out of box demo. This information consists of Point cloud and Point cloud side info.

    2. The configuration related to raw ADC data output is done in MmwDemo_configLVDSHwData(). This already configures the streaming of unprocessed (i.e. Raw) ADC samples on the LVDS interface.

    Questions:

    1. Are you able to stream raw ADC data on LVDS, with the unmodified OOB demo (pre-compiled binary provided in the demo) using the procedure provided in the SDK user guide or not? This has been tested and you should be able to get raw ADC data without any limitations.

    2. If you are able to get the raw ADC data, is your next objective to also get the Radar cube data on the LVDS interface as you mentioned? Would like to clarify that Radar cube data is not Raw ADC data. It appears from your response that you are assuming that radar cube contains raw ADC data, which is not correct. This is not supported and hence untested functionality. I will check on whether this is doable and any limitations (including the one you stated) in this regard and get back to you.

    Thanks

    -Nitin

  • Hi Nitin,

    1. Yes, we are able to stream raw ADC data on LVDS.

    2. Yes, I made a misunderstand of ADC data and Radar cube data. What I want is to send radar cube data or range doppler matrix.

    And I am looking forward to your help.

    Thank you very much.

    Best regards,

    Wallace.

     

  • Hi Wallace,

    I am still looking into the feasibility of streaming the Radar Cube Data and the steps necessary to do so. Please allow me a couple of days to list my findings.

    Regards

    -Nitin

  • Hi Wallace,

    Thanks for your patience. As indicated before, the mmw demo does not support streaming out Radar Cube Data and while we do not have plans to add it in the mmw demo, you can try to enable this using the following pointers:

    1. The mmw demo allows you to send up to 3 user buffers of 32KB each. So right out of the box, you should be able to send up to 96KB of data by splitting it in three chunks and extending the following code accordingly. 

            sessionCfg.u.swCfg.userBufferInfo[1].size    = HSIHeader_toCBUFFUnits(numRangeBins * numDopplerBins * numAngleBins * sizeof(uint16_t)));
            sessionCfg.u.swCfg.userBufferInfo[1].address = (uint32_t)radarCube.data;

    2. Beyond this limit, you'll need to add code to repeat these transfers in the same frame, once the previous transfer session is completed. The completion of a transfer session invokes the SwTriggerFrameDone call back function registered when creating the session as shown below. You can essentially post a semaphore in this function to invoke another function which will need to perform the following sequence until all data is sent out:

    1. Delete the existing session,
    2. Re-create new session (but with each of the user buffers advanced by 32KB in the Radar Cube) and then
    3. activate the session to start the transfer again. (For your reference, the CBUFF session is activated in mss_main.c in function MmwDemo_transferLVDSUserData).  
    
    
        /* Populate the configuration: */
        sessionCfg.executionMode                     = CBUFF_SessionExecuteMode_SW;
        sessionCfg.edmaHandle                        = gMmwMssMCB.dataPathObj.edmaHandle;
        sessionCfg.allocateEDMAChannelFxn            = MmwDemo_LVDSStream_EDMAAllocateCBUFFSwChannel;
        sessionCfg.freeEDMAChannelFxn                = MmwDemo_LVDSStream_EDMAFreeCBUFFSwChannel;
        sessionCfg.frameDoneCallbackFxn              = MmwDemo_LVDSStream_SwTriggerFrameDone;
        sessionCfg.dataType                          = CBUFF_DataType_COMPLEX; 
        sessionCfg.u.swCfg.userBufferInfo[0].size    = HSIHeader_toCBUFFUnits(sizeof(MmwDemo_LVDSUserDataHeader_t));
        sessionCfg.u.swCfg.userBufferInfo[0].address = (uint32_t)&(streamMcb->userDataHeader);

    Hope the above helps.

    Regards

    -Nitin

  • Hi Nitin,

    Thank you a lot for your reply.

    I believe it can solve my problem.

    Best regards,

    Wallace