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,想要对DDMA模式下的phase shifter进行校准,准备先输出做完empty band解调之后的RDMAP,但是我发现在DDMA的objectdetection.c中subfrmObj->dpucfg->
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)。
你好
我不知道配置什么参数或调用什么函数开启内存压缩,但是在objectdetection.c中调用的
我通过在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],
谢谢
你好
如上面的回复所说,最后输出的由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采到的原始数据
你好,
在DDMA配置下,获取的radar cube是压缩后。且根据user_guide,在使用DDMA时必须使能压缩。我看了一下关于压缩的文档SWRA663, Memory Compression and Decompression Engine for TI mmwave Radar 里面的reference有相关的matlab压缩编码的代码,请问有没有相关的解码的matlab代码
你好,
我看了您说的那个PDF,里面提到的matlab script可以处理awr2944压缩后的radar cube吗,解压缩得到未压缩的数据。
受L3空间以及帧周期限制,如果仅做一帧的话,可以考虑直接发送数据或者将数据存入flash。
我尝试在objectdetection.c中的函数DPC_ObjectDetection_execute()测试mmwDemo_flashWrite(),在头文件正确包含的情况下编译出现如下报错。
我只是在dopplerprochwaDDMA.c中增加了头文件mmwdemo_flash.h,并在函数DPU_DopplerProcHWA_process中调用了flashwrite。
请问要怎么解决
我尝试在objectdetection.c中的函数DPC_ObjectDetection_execute()测试mmwDemo_flashWrite(),在头文件正确包含的情况下编译出现如下报错。
建议新问题重新开贴。
编译错误看起来是没有正确include相关的文件。
你好
我想要使用的函数是
你好,
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累加后的数据?
谢谢