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.

IWR6843ISK-ODS: Firmware modification pointers to send a part of 1D-FFT data over to the serial port

Part Number: IWR6843ISK-ODS

Hello TI team,

I am trying to figure out if I can bring certain changes into a firmware (mmwave_industrial_toolbox_4_6_0/labs/out_of_box_demo/68xx_ods_point_cloud_demo/src), more specifically, I am interested in sending a part of 1D-FFT radar cube data for every frame, it would be a matrix of size [num_rx_ant x num_range_bins] * sizeof(complex) - I'd like to copy all the virtual Rx antennas and range bins for a specific Doppler bin (let's say 0th).

To achieve this task, I was hoping to be able to reuse a TLV field reserved for rangeAzimuthElevationHeatMap and copy the data from 1D-FFT result there so that to fetch the 1D-FFT data later at the serial port.

From what I understand the 1D-FFT data lives on L3 memory, but gets overwritten by 2D-FFT results afterwards - is this correct? Given this, is my goal achievable at all? Is there any way around it or what should be my strategy in order to be able to copy the part of 1D-FFT?

If there is a way to be able to copy the part of 1D-FFT data into the rangeAzimuthElevationHeatMap TLV field, could you please kindly provide some pointers on the source files and functions which I will need to modify? I am trying to locate the necessary functions at mmWave SDK folders, but I am not sure where to start.

Thank you.

Best regards,

Victoria

  • Hello

    The OOB demo sends out the 1st level 0th bin FFT already - that is what is used to plot the range graph.

    Based on the config option selected the Range Azimuth plot/heat map is plotted this map is created from the data sent by device which may be helpful for you.

    Please take a look at the readily available data before getting into code modification.

    In order to modify the code please see how data out is constructed in the device, the OOB demo's page which is available as doxygen:

    Typically : file:///C:/ti/mmwave_sdk_03_04_00_03/packages/ti/demo/xwr68xx/mmw/docs/doxygen/html/struct_mmw_demo___data_path_obj__t.html

    Thank you,

    Vaibhav

  • Hello Vaihab,

    Thanks for addressing my question. I am quite familiar with the serial port data format and I am aware that one of the TLV types is range profile. However, if I look at the documentation of mmwave SDK guide, it states "enable export of log magnitude range profile at zero Doppler" which tells me:

    • "log magnitude" represent an accumulation across the antennas while I would like to obtain a matrix of complex values for all the 12 antennas. 
    • "at zero Doppler" means a range profile for static objects, with velocity of 0 m/s - and that can only be obtained after the 2D-FFT operation is performed, while I'd like to access data before that - from 1D-FFT radar cube.

    I'm trying to understand if I can access the 1D-FFT range data for all 12 antennas (conplex matrix) for any Doppler index before it gets overwritten by 2D-FFT data and save that data into the data structure reserved for rangeAzimuthElevationHeatMap since the data size and type would be similar. I think I will need to modify the firmware source code for that, and that source code seems to be located somewhere where mmWave SDK code lives. 

    Does the above clarification make more sense? It would be great to get some pointers.

    Thank you.

    Best regards,

    Victoria

  • Hi Victoria,

    Please give me a few days to look into this, but you may need to export the ADC data over LVDS to get the data you are looking for. Please look at the following post and see if will help with what you are trying to export.

    https://e2e.ti.com/support/sensors/f/sensors-forum/885225/awr1843-need-help-to-send-a-mount-of-data-through-lvds-when-using-mrr-demo-or-mmw-demo

    Regards,

    Jackson

  • Hello Jackson,

    Thank you for looking into this. I would be happy to receive any tips, so will wait for your reply. I will also study the link you attached.

    In regards to the streaming data over the LVDS: I'd like to know the reason why do you suggest it? Is it because of the size or because it is 1D-FFT data? Just to highlight, I'm only interested in a small portion of data and not the whole 1D-FFT radar cube. Something like [num_rx_ant x num_range_bins] * sizeof(complex). When I test the serial port data streaming with the rangeAzimuthElevationHeatMap TLV turned on, I have no problem with streaming and the size would be equal. If the reason is different than size, it would be great to understand it as well.

    Thank you.

    Best regards,

    Victoria

  • Hi Victoria,

    I have some ideas that might help you to achivev this feature.

    1. From what I understand the 1D-FFT data lives on L3 memory, but gets overwritten by 2D-FFT results afterwards - is this correct? 

    [Wesley] No, the 1D-FFT data is always there, and will not be overwrite by 2D-FFT process in SDK OOB demo. But it depends on the demo you are using.

    2. Here's a quick way to get some of the data out through the UART.

    You can add below in funtion "MmwDemo_transmitProcessedOutput" in Mss_main.c

    UART_writePolling (uartHandle,
    (uint8_t*)&L3_data_address,
    L3_data_lenth);

    Then you send out the data you are interested in. Please make sure the frame idle time is long enough for the UART transfer.

    And, you also can add a new "tl[tlvIdx].type" for these new ADC RAW data to make the data structure match the SDK code.

    if all L3 data is needed, I always use 1000ms frame time, and 1s is enough to transmit all the data in L3.

    Also, I will add a manully CRC check to make sure the GUI get the correct data.

    Please let me know if you have any further questions. Thanks.

    Regards,

    Wesley

  • Hello Wesley,

    This is exactly what I need, thank you so much for your great advice and explanations! I'm glad it should be possible, and I will try to follow your pointers. I will make sure the idle time is enough in order to make the transfer.

    Just one clarification, if you don't mind - do you know what is the format of the 1D-FFT radar cube data at that point? From the `datapath` documentation that I found:

    1 cmplx16ImRe_t x[numTXPatterns][numDopplerChirps][numRX][numRangeBins] 1D Range FFT output
    2 cmplx16ImRe_t x[numRangeBins][numDopplerChirps][numTXPatterns][numRX] 1D Range FFT output
    3 cmplx16ImRe_t x[numRangeBins][numTXPatterns][numRX][numDopplerChirps] 1D Range FFT output

    I assume it is format 3 DPIF_RADARCUBE_FORMAT_3 . Is it correct? In case if I want to access certain chunk of data, I assume I would just need to calculate the L3_data_address+offset and then appropriate length and copy that chunk of memory. Does this sound correct?

    Also, is the L3_data_address defined somewhere or do I need to include a header in order to import it?

    Thank you.

    Best regards,

    Victoria

  • Forgot to specify regarding the radar cube format: I'm using the firmware code from "68xx_ods_point_cloud_demo" for the ODS sensor and it includes source code from demo/xwr64xx. 

  • Hello Victoria,

    The demo is set up with FORMAT_1. you can see this in the DPC_ObjDet_preStartConfig() function in "C:\ti\mmwave_sdk_03_05_00_04\packages\ti\datapath\dpc\objectdetection\objdethwa\src\objectdetection.c" You should be able to access the data with a calculated offset based on the setup.

    The L3 address is defined in the memory map in the TRM and should be set in the main function of the demo.

    Regards,

    Jackson

  • Hello Jackson,

    Thank you for sharing that document and for answering all my questions. This is great. I think I can move forward with modifications now.

    Best regards,

    Victoria