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.

AWR2944EVM: awr2944EVM

Part Number: AWR2944EVM
Other Parts Discussed in Thread: AWR2944, IWR6843, DCA1000EVM

你好,工程师

最近在使用AWR2944EVM,想要对DDMA模式下的phase shifter进行校准,准备先输出做完empty band解调之后的RDMAP,但是我发现在DDMA的objectdetection.c中subfrmObj->dpucfg->

dopplerCfg->hwres->azimFFTScratchBuf[2]只能存放2个rangeBin对应的RDMAP,请问在什么地方有保存完整的一帧数据对应的RDMAP吗。或者我想通过自己定义一个结构体传到
DPU_DopplerProcHWA_process()中保存每次输出的rangeBin对应的RDMAP,但我发现修改完这个函数后,编译时并没有重新生成对应的库(即我写的代码并没有生效),我看了makefile文件以及在编译时使用gmake -d all,没有发现有相关的依赖关系,所以无法重新编译该文件,请问有什么解决方法吗?
谢谢
  • Hi 

    mss_main.c 中 MmwDemo_transmitProcessedOutput中发送 range-doppler heatmap相关代码如下:

    /* Send data for range/Doppler heatmap */
    if (pGuiMonSel->rangeDopplerHeatMap == 1)
    {
    UART_Transaction_init(&trans);
    trans.buf = (uint8_t*)&tl[tlvIdx];
    trans.count = sizeof(MmwDemo_output_message_tl);
    UART_write(uartHandle, &trans);

    UART_Transaction_init(&trans);
    trans.buf = (uint8_t*)detMatrix;
    trans.count = tl[tlvIdx].length;
    UART_write(uartHandle, &trans);
    tlvIdx++;
    }

    建议从代码中追溯该变量是如何赋值的

  • 你好,

    我现在可以按照你给的思路读出RDMAP,但我只能在把天线配置成

    "profileCfg 0 76.9 2 2 37 0 0 11.6 0 512 30000 0 0 30 \n\r",
    "frameCfg 0 5 32 512 200 1 0\r\n", 

    即只能获得256*32(rangeBin,dopplerBin)的RDMAP,我想要获得512*128的RDMAP,但是当把天线参数配置为

    "profileCfg 0 76.9 2 2 37 0 0 11.6 0 102430000 0 0 30 \n\r",
    "frameCfg 0 5 128 512 200 1 0\r\n", 

    运行后板子会失去响应

    我在MmwDemo_DPC_ObjectDetection_reportFxn()函数中加了LOG,输出如下图

    该函数应该在每一帧的数据处理后调用一次,如上图所示,应该在处理完两帧的数据后板子宕机了。在输出上述的LOG后,如果代码正确执行,应该会进入到函数MmwDemo_transmitProcessedOutput()中,在该函数中我也用CLI_write()写了一些LOG,并且用网口将RDMAP通过UDP协议发到PC,但是无论从串口或是用wireshark都无法看到打印出LOG或是抓到UDP包。即代码可能没有运行到MmwDemo_transmitProcessedOutput中,就直接开始处理第二帧的数据然后失去响应。在256*32RDMAP的情况下可以正确输出结果。在文档中看到用于存储radarcube的L3有2.25或3MB,而将天线配置为numofadcsample=1024,numofloops = 128的情况下,需要的L3内存为1.5MB,理论上应该可以执行。

    请问是什么原因导致上述问题呢?

    谢谢

  • Hi

    可能的原因有帧处理时间不足或者内存不足,

    一方面Lwip协议栈会消耗一定内存和运算时间,另一方面在DDMA的的处理链路也会在L3中预留较多的scrach buff,

    建议使用串口进行输出并提升串口的输出速率,或者降低RDmap的维度。

  • 不好意思,上面的回复中是把天线配置为

    "profileCfg 0 76.9 2 2 37 0 0 11.6 0 512 30000 0 0 30 \n\r",
    "frameCfg 0 5 128 512 200 1 0\r\n",

    求256*128的RDMAP板子失去响应。所需的内存大小为1.5M

    我后面尝试延长chirp的Idle time 和frame的周期来保证HWA有足够的时间来完成chirp级运算以及保证有足够的时间把处理结果通过网口发到PC,但是问题仍然没有解决

  • 你好,我试过输出256*32的RDMAP是可以正常运行的,可是即使我把MmwDemo_transmitProcessedOutput函数在MmwDemo_DPC_ObjectDetection_reportFxn中的调用注释掉,让他只运行DDMA的处理链路,板子还是在出现上述的现象之后宕机了

    请问是内存不足导致的吗?我有看到一个high_end_corner_radar的demo(R79),里面配置的波形参数为numofadcsample=384,numsofloop = 128,我将相同的天线配置到我的文件中时,还是会宕机,(R79中没有使用EnetStream)。

  • R79demo启用了压缩率为50%的内存压缩以节约L3占用,在你的程序中是否启用了内存压缩?

  • 你好

    我不知道配置什么参数或调用什么函数开启内存压缩,但是在objectdetection.c中调用的

    DPU_DopplerProcHWA_process()函数中,确实有数据解压缩的步骤,流程和(R79demo)中的流程是一样的
  • 我通过在MmwDemo_DPC_ObjectDetection_reportFxn中打log,得知dpc的配置其实并没有完成,在配置DPC的过程中要调用该函数三次,report_type为DPM_Report_IOCTL,如果配置成功然后会输出sensorStarted Done;按照258*128的RDMAP的配置,我这边不能看到sensorStarted,是不是配置DPC就没有成功。如果是这种情况,是否为内存的问题?

  • R79 Demo 和 mmw DDM Demo 处理链大致相同,我检查了一下mmw demo确实也开启了50%压缩率的内存压缩,但mmw DDM Demo 并不支持网络输出。

    在SDK4.2.0.3的mmw demo中,profile_3d_3Azim_1ElevTx_DDMA_awr2944_highRange.cfg中射频设置为384采样点,768chirp

    profileCfg 0 77 7 7 20.81 0 0 8.883 0 384 30000 0 0 36
    chirpCfg 0 5 0 0 0 0 0 15
    frameCfg 0 5 128 0 384 500 1 0 

  • 你好

    我测试过在不使用lwip的情况下,仅生成DDM的BIN文件,可以配置为

    profileCfg 0 77 7 7 20.81 0 0 8.883 0 384 30000 0 0 36
    chirpCfg 0 5 0 0 0 0 0 15
    frameCfg 0 5 128 0 384 500 1 0 

    但是要配置为numofadcsample=512,numsofloop = 128还是会失败,现象和之前的一致,大概为DPC配置失败,请问这是内存不够导致的吗?

    还有一点想要请教一下,lwip协议栈不是在R5F核那边吗?C66x这边的用于HWA以及DSP的内存会受lwip的影响吗?

  • 但是要配置为numofadcsample=512,numsofloop = 128还是会失败,现象和之前的一致,大概为DPC配置失败,请问这是内存不够导致的吗?

     是的

    lwip协议栈不是在R5F核那边吗?C66x这边的用于HWA以及DSP的内存会受lwip的影响吗?

    lwip协议栈运行位于R5F,R5F也可以访问和占用L3,

    查看ENET Demo中mss.map文件,可以发现R5F占用了0x88000000~0x88000000+0x00100000的L3空间,开启ENET会使得内存更加紧张

  • 你好,

    我注意到mwDemo_DPC_ObjectDetection_reportFxn中有相关结构体可以打印出剩余的L3内存,通过比较DDM和DDMEnt可执行文件输出的剩余内存大小可以知道开启以太网占用了约1M的L3内存,导致配置失败。在开启以太网时配置numofadcsample=512,numsofloop = 32时剩余的L3内存为425K,在不开启以太网时剩余的L3内存为1470k;在不开启以太网,配置numofadcsample=512,numsofloop = 64时,剩余的L3内存为950k,相比numsofloop=32时多占用了500k,这解释了为什么在打开以太网时配置不了numofadcsample=512,numsofloop = 64。同理,在不开启以太网的情况下,也不能配置为numofadcsample=512,numsofloop = 128。

    谢谢@Ken Zhang

  • 你好

    不好意思隔了这么久再问您问题。关于您提到的,从detMatrix中获得RDMAP的数据。这里面好像只包含了一个subband的RDMAP,我该如何获得全部6个子带对应的RDMAP呢?我注意到在objdetection.c中,有个subframe结构体,每次在做速度解调之前,可以存储2个rangeBin上的所有chirp的2DFFT结果,是否可以自己定义一个数组变量,在每次解调之前,向该变量中读入对应rangeBin上的RDMAP?或者您有别的建议吗?

  • 你好,

    result->dematrix是由result->detMatrix   = subFrmObj->dpuCfg.dopplerCfg.hwRes.detMatrix;赋值的,但是hwRes.detMatrix是在L3中分配的地址,我无法找到对subFrmObj->dpuCfg.dopplerCfg.hwRes.detMatrix进行赋值的地方,是不是在经过HWA处理后直接由EDMA把处理得到的结果存放到在L3中分配的内存中?

    直接输出detMatrix的RDMAP如下图所示

    经过FFTshift后得到的RDMAP如下

    结合上面文档中的描述,该RDMAP是不是将几个subband叠加后的结果?

    另外,我对着处理的流程找了一下,没有看到存储doppler FFT结果做对数绝对值,并做RXsum的数据结构。在函数DPU_DopplerProcHWA_process()的传参subFrmObj->dpuCfg.dopplerCfg中,dopFFTSubMat存放的是速度解调之后的2D FFT结果,格式为[128 Doppler][4 Tx ant][4 Rx ant][8 byte],

    dopplerFFTScratchBuf存放的是2个rangeBin处理之前的2D FFT结果,格式为是[128 Doppler][6 sub-band][4 Rx ant][8 byte],二者都不是RDMAP对应的数据。
    请问,除了在L3中分配的内存
     detMatrix.data = DPC_ObjDet_MemPoolAlloc(L3ramObj, detMatrix.dataSize,DPC_OBJDET_DET_MATRIX_DATABUF_BYTE_ALIGNMENT);
    中可以得到RDMAP的数据外,还能在哪里获取关于RDMAP的数据?或者如何修改detMatrix的初始化,使之可以存放完整的6个subband上的RDMAP数据

    谢谢

  • 是否可以自己定义一个数组变量

    可以。但需注意L3是否有足够的空间分配,EDMA的channel数以及搬运时间的限制

  • 你好

    如上面的回复所说,最后输出的由result->detmatrix导出的RDMAP,可能是由6张submap叠加得到的。我算了一下,如果导出原始的2D FFT结果需要约1.5M的L3空间,资源是不够使用的。

  • 是不是在经过HWA处理后直接由EDMA把处理得到的结果存放到在L3中分配的内存中?

    是的

    没有看到存储doppler FFT结果做对数绝对值,并做RXsum的数据结构

    这些数据没有相应的数据结构,均存放于HWA中对应的mem bank中

    还能在哪里获取关于RDMAP的数据?或者如何修改detMatrix的初始化,使之可以存放完整的6个subband上的RDMAP数据

    受L3空间以及帧周期限制,如果仅做一帧的话,可以考虑直接发送数据或者将数据存入flash。

  • 你好,

    如果你使用的是sdk的ddma demo,你可以参考下面的文档,DDMA Metric Scratch Buf里的数据是几个subband叠加后的结果。

    mmwave_mcuplus_sdk_04_02_00_03/mmwave_mcuplus_sdk_04_02_00_03/ti/datapath/dpc/dpu/dopplerprocDDMA/docs/doxygen/html/index.html

  • 你好,

    请问如果要读取radar cube的数据,在result->radarcube.data中保存的数据为压缩前的数据还是压缩后的数据?或者怎么得到ADC采到的原始数据

  • radar cube中的数据是否为压缩后的数据,需要参考CLI配置时的compressionCfg 选项

  • 你好,

    在DDMA配置下,获取的radar cube是压缩后。且根据user_guide,在使用DDMA时必须使能压缩。我看了一下关于压缩的文档SWRA663, Memory Compression and Decompression Engine for TI mmwave Radar 里面的reference有相关的matlab压缩编码的代码,请问有没有相关的解码的matlab代码

  • 参见 C:\ti\mmwave_industrial_toolbox_4_12_0\tools\memory_compression

  • 你好,

    我看了您说的那个PDF,里面提到的matlab script可以处理awr2944压缩后的radar cube吗,解压缩得到未压缩的数据。

    受L3空间以及帧周期限制,如果仅做一帧的话,可以考虑直接发送数据或者将数据存入flash。

    我尝试在objectdetection.c中的函数DPC_ObjectDetection_execute()测试mmwDemo_flashWrite(),在头文件正确包含的情况下编译出现如下报错。

    我只是在dopplerprochwaDDMA.c中增加了头文件mmwdemo_flash.h,并在函数DPU_DopplerProcHWA_process中调用了flashwrite。

    请问要怎么解决

  • 你好

    文档中提到的用于压缩解压缩的脚本是在IWR6843的SDK里面吗

  • 我尝试在objectdetection.c中的函数DPC_ObjectDetection_execute()测试mmwDemo_flashWrite(),在头文件正确包含的情况下编译出现如下报错。

    建议新问题重新开贴。

    编译错误看起来是没有正确include相关的文件。

  • 你好

    我想要使用的函数是

    mmwDemo_flashWrite(),该函数声明位于文件mmwDemo_flash.h中,我用的当前电脑的绝对路径包含的头文件。
    且在文件夹C:\ti\mmwave_mcuplus_sdk_04_02_00_02\mmwave_mcuplus_sdk_04_02_00_02\ti\datapath\dpc\dpu\dopplerprocDDMA下面可以重新编译生成库
    lib/libdopplerproc_hwa_ddma_awr2944.ae66,作为dopplerprocHWADDMALib的依赖文件之一,另外一个依赖文件是dopplerprochwaDDMA.oe66也就是上面报错中提到的undefined symbol first referenced in file 
    想向您确认一下,C66核是否可以执行向flash写的功能
  • 你好,

    mcu_plus_sdk_awr294x_08_02_00_25\source\drivers\makefile.awr294x.c66.ti-c6000没有包含qspi相关的c代码,所以目前的驱动dsp应该是不支持qspi flash的操作的。

  • 你好

    谢谢你的回复。我总结一下当前遇到的问题。想要获得DDMA模式下的RDMAP,供DDMA校准前后对比使用,但是从result->detMatrix.data中得到的RDMAP是将6个subband叠加过后的RDMAP,无法直观的得到校准的效果。所以想取得相关数据做完整的RDMAP,但是若要取得2D FFT后的数据,所需的L3内存过大,取1D FFT数据得到的是压缩后的数据。请问有什么办法可以获得完整的RDMAP数据,或者是对2D FFT结果做取模log2累加后的数据?

    谢谢

  • 你好,

    如果你使用的是TI的AWR2944EVM,能否购买DCA1000EVM,采集原始数据,来看校准效果?

  • 取1D FFT数据得到的是压缩后的数据

    能否尝试下面的代码进行解压缩?

    dev.ti.com/.../node