TI MMWAVE 开箱即用(OOB)例程中单个chirp参数设置过大无法运行的问题解决

发布时间:2023-12-23 09:00:56

前言

由于之前的工作中需要同时用到TI的雷达和其他参考设备,为了方便同步启动雷达和参考设备,不得不放弃使用MMWAVE STUDIO软件,因为我需要采集原始数据,因此必须搭配DCA1000使用。为了实现这一目的,我结合网上的大神提供的方法总结了一个方法。其主要是利用TI的开箱即用例程结合TI提供的DCA1000EVM CLI软件实现的。但是在前一段时间师妹想要采集数据,于是我根据她的参数配置用同样的方法采集数据时发现雷达并不能正常工作。于是我通过不断修改参数发现了雷达启动失败的原因:一个chirp的数据量 s i z e size size过大导致的,即 s i z e = 采样点 × t x × l o o p s size = 采样点 \times {tx} \times {loops} size=采样点×tx×loops。这一点也在TI论坛:Number of chirp loop per frame中得到了验证,只不过我这里测试的大小可以达到48KB,而非它提到的32KB,可能和SDK的版本有关吧。这里提一下导致失败的参数设置。

% ***************************************************************
% Created for SDK ver:03.06
% Created using Visualizer ver:3.6.0.0
% Frequency:60
% Platform:xWR68xx_AOP
% Scene Classifier:best_range_res
% Azimuth Resolution(deg):30 + 30
% Range Resolution(m):0.044
% Maximum unambiguous Range(m):9.02
% Maximum Radial Velocity(m/s):1
% Radial velocity resolution(m/s):0.13
% Frame Duration(msec):100
% RF calibration data:None
% Range Detection Threshold (dB):15
% Doppler Detection Threshold (dB):15
% Range Peak Grouping:enabled
% Doppler Peak Grouping:enabled
% Static clutter removal:disabled
% Angle of Arrival FoV: Full FoV
% Range FoV: Full FoV
% Doppler FoV: Full FoV
% ***************************************************************
sensorStop
flushCfg
dfeDataOutputMode 1
channelCfg 15 7 0
adcCfg 2 1
adcbufCfg -1 0 1 1 1
profileCfg 0 60 7 6 57 0 0 69.994 1 256 6000 0 0 48
chirpCfg 0 0 0 0 0 0 0 1
chirpCfg 1 1 0 0 0 0 0 2
chirpCfg 2 2 0 0 0 0 0 4
frameCfg 0 2 64 500 40 1 0
lowPower 0 0
guiMonitor -1 1 1 0 0 0 0
cfarCfg -1 0 2 8 4 3 0 15 1
cfarCfg -1 1 0 4 2 3 1 15 1
multiObjBeamForming -1 1 0.5
clutterRemoval -1 0
calibDcRangeSig -1 0 -5 8 256
extendedMaxVelocity -1 0
lvdsStreamCfg -1 0 1 0
compRangeBiasAndRxChanPhase 0.0 1 0 -1 0 1 0 -1 0 1 0 -1 0 1 0 -1 0 1 0 -1 0 1 0 -1 0
measureRangeBiasAndRxChanPhase 0 1.5 0.2
CQRxSatMonitor 0 3 5 121 0
CQSigImgMonitor 0 127 4
analogMonitor 0 0
aoaFovCfg -1 -90 90 -90 90
cfarFovCfg -1 0 0 8.92
cfarFovCfg -1 1 -1 1.00
calibData 0 0 0
sensorStart

可以看到采样点为256,loops为64,tx为3。虽然将参数设置小一点可以避免问题,当我把loops设置到48及以下或者减小采样点数时雷达都能正常工作,但是这样子距离分辨率或者速度分辨率就会下降,再加上我比较绛,我一定要把这个问题给解决了,不然总感觉哪里不对劲。通过分析我大概判断问题肯定出在了OOB提供的例程中。

因此上述方法与使用MMWAVE STUDIO采集原始数据一定存在某些不可描述的区别,MMWAVE STUDIO是TI开发的一款专门采集原始数据的软件,其实现底层原理我不太清楚,但是该软件的数据处理是off line的,也就是采集完数据之后我们可以点击PostProc得到各种处理完的数据,然而OOB的demo是一边采集数据一边处理数据的,所以这也限制了其一个chirp数据的数据量,如果过大,会导致上一帧数据还没处理完数据下一帧的数据又传过来了。如下图所示,其展示了OOB demo中的DPC处理流程,我们发现数据处理都是在两帧数据之间完成的,因此猜测是源码中限制了该内存的大小,即上面提到的一个chirp的数据量不能超过该内存大小。另外,还要注意loops不能设置过大,正如先前文章提到的,要保证activeramp duty cycle小于等于50%,我猜测是因为这样才能留下足够的时间进行数据处理。这部分可以参考描述毫米波雷达芯片结构框架解析
在这里插入图片描述
好了,经过上述分析,大概有两种解决方案:1.自己实现一个类似于mmwave studio的软件,当然对于我这样只会Ctrl C+V的人无疑比杀了我还难受。2.老老实实看一下OOB Demo的源码,看看能不能只通过简单的Ctrl C+V解决问题。

准备工作

硬件:IWR6843AOP,安卓usb数据线
软件:Code Composer Studio(我用的10.0的版本),UniFlash,mmwave_industrial_toolbox_4_11_0,mmwave_sdk_03_05_00_04 或者 mmwave_sdk_03_06_00_00-LTS。

Code Composer Studio

导入工程以及相关配置

1.首先打开CCS,workspace自己随便搞一个。
在这里插入图片描述
2.导入OOB Demo的工程,该工程在mmwave_industrial_toolbox_4_11_0中,如下图所示。
在这里插入图片描述

3.其他的配置参数都放在下面了。

3.1 Properties → \rightarrow Resources → \rightarrow Linked Resources
在这里插入图片描述
这里sdk3.5或者3.6都ok应该。
3.2.1 Properties → \rightarrow General → \rightarrow Project
在这里插入图片描述
3.2.2 Properties → \rightarrow General → \rightarrow Products
在这里插入图片描述
下面的XDCtools settings改成跟我一样即可。

3.3.1 Properties → \rightarrow Build → \rightarrow Steps
在这里插入图片描述
这里原来工程的Pre-build steps有一句删除原来bin文件的指令,由于它使用的是linux下的rm -f指令,因此后面编译会有问题,干脆直接删了。
Post-build steps:

${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/out2rprc/out2rprc.exe xwr64xxAOP_mmw_mss.xer4f xwr64xxAOP_mmw_demo_mss.tmp
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/multicore_image_generator/MulticoreImageGen.exe LE 37 0x00000006 xwr64xxAOP_mmw_demo.bin 0x35510000 xwr64xxAOP_mmw_demo_mss.tmp 0xb5510000 ${COM_TI_MMWAVE_SDK_INSTALL_DIR}/firmware/radarss/xwr6xxx_radarss_rprc.bin
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/crc_multicore_image/crc_multicore_image.exe xwr64xxAOP_mmw_demo.bin xwr64xxAOP_mmw_demo.tmp
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/append_bin_crc/gen_bincrc32.exe ?xwr64xxAOP_mmw_demo.bin

3.3.2 Properties → \rightarrow Build → \rightarrow XDCtools → \rightarrow Advanced Options
在这里插入图片描述
下面的Addtion compiler options 改成 "–enum_type=int "

3.4.1 Properties → \rightarrow Build → \rightarrow ARM Compiler → \rightarrow Processor Options
在这里插入图片描述
3.4.2 Properties → \rightarrow Build → \rightarrow ARM Compiler → \rightarrow Include Options
在这里插入图片描述
3.4.3 Properties → \rightarrow Build → \rightarrow ARM Compiler → \rightarrow Predefined Symbols
在这里插入图片描述
这里存放的是一些预定义的变量名,贴一下方便复制。

${COM_TI_BIOS_SYMBOLS}
${COM_TI_MMWAVE_SDK_SYMBOLS}
SOC_XWR68XX
SUBSYS_MSS
DOWNLOAD_FROM_CCS
MMWAVE_L3RAM_NUM_BANK=6
MMWAVE_SHMEM_TCMA_NUM_BANK=0
MMWAVE_SHMEM_TCMB_NUM_BANK=0
MMWAVE_SHMEM_BANK_SIZE=0x20000
OBJDET_NO_RANGE
ISK
DebugP_ASSERT_ENABLED
_LITTLE_ENDIAN
DebugP_LOG_ENABLED
XWR68XX_AOP_ANTENNA_PATTERN
USE_2D_AOA_DPU
APP_RESOURCE_FILE=‘<‘ti/demo/xwr64xx/mmw/mmw_res.h’>’

3.5 Properties → \rightarrow Build → \rightarrow ARM Linker → \rightarrow File Search Path
在这里插入图片描述
Include library file or command file as input

${COM_TI_BIOS_LIBRARIES}
${COM_TI_MMWAVE_SDK_LIBRARIES}
libosal_xwr68xx.aer4f
libesm_xwr68xx.aer4f
libtestlogger_xwr68xx.aer4f
libgpio_xwr68xx.aer4f
libsoc_xwr68xx.aer4f
libpinmux_xwr68xx.aer4f
libcrc_xwr68xx.aer4f
libuart_xwr68xx.aer4f
libmailbox_xwr68xx.aer4f
libmmwavelink_xwr68xx.aer4f
libmmwave_xwr68xx.aer4f
libadcbuf_xwr68xx.aer4f
libdma_xwr68xx.aer4f
libedma_xwr68xx.aer4f
libcli_xwr68xx.aer4f
libhwa_xwr68xx.aer4f
libdpm_xwr68xx.aer4f
libmathutils.aer4f
libcbuff_xwr68xx.aer4f
libhsiheader_xwr68xx.aer4f
libaoa2dproc_hwa_xwr68xx.aer4f
libdopplerproc_hwa_xwr68xx.aer4f
librangeproc_hwa_xwr68xx.aer4f
libdpedma_hwa_xwr68xx.aer4f
libqspi_xwr68xx.aer4f
libstaticclutterproc_xwr68xx.aer4f
libcfarcaproc_hwa_xwr68xx.aer4f
libqspiflash_xwr68xx.aer4f
rtsv7R4_T_le_v3D16_eabi.lib
libc.a

library search path
${COM_TI_BIOS_LIBRARY_PATH}
${COM_TI_MMWAVE_SDK_LIBRARY_PATH}
${MMWAVE_SDK_DIR}/packages/ti/control/mmwave/lib
${MMWAVE_SDK_DIR}/packages/ti/control/mmwavelink/lib
${MMWAVE_SDK_DIR}/packages/ti/control/dpm/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/adcbuf/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/crc/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/dma/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/edma/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/esm/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/gpio/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/hwa/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/mailbox/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/osal/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/qspiflash/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/pinmux/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/soc/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/uart/lib
${MMWAVE_SDK_DIR}/packages/ti/utils/cli/lib
${MMWAVE_SDK_DIR}/packages/ti/utils/mathutils/lib
${MMWAVE_SDK_DIR}/packages/ti/datapath/dpu/rangeproc/lib
${MMWAVE_SDK_DIR}/packages/ti/datapath/dpedma/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/cbuff/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/datapath/dpc/dpu/dopplerproc/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/datapath/dpc/dpu/cfarcaproc/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/datapath/dpc/dpu/aoa2dproc/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/datapath/dpc/dpu/staticclutterproc/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/datapath/dpu/rangeproc/lib
${MMWAVE_SDK_DIR}/packages/ti/utils/hsiheader/lib
${MMWAVE_SDK_DIR}/packages/ti/drivers/qspi/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/datapath/dpedma/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/utils/hsiheader/lib
${MMWAVE_SDK_DIR}/packages/ti/utils/libsleep/lib
${MMWAVE_SDK_DIR}/packages/ti/utils/testlogger/lib
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/ti/drivers/cbuff/lib
${SYSCONFIG_TOOL_LIBRARY_PATH}
${CG_TOOL_ROOT}/lib
${CG_TOOL_ROOT}/include

3.6 Properties → \rightarrow Build → \rightarrow ARM Linker → \rightarrow Advanced Options → \rightarrow Command File Preprocessing
在这里插入图片描述

MMWAVE_L3RAM_NUM_BANK=6
MMWAVE_SHMEM_TCMA_NUM_BANK=0
MMWAVE_SHMEM_TCMB_NUM_BANK=0
MMWAVE_SHMEM_BANK_SIZE=0x20000

最后点击Apply and Close.

此时如果直接编译会报如下错
在这里插入图片描述
在群里问了大佬,最终发现是工程下缺少了一个c文件mmwdemo_flash.c,直接复制进去就好了,该文件在sdk的目录下。
在这里插入图片描述

最终的工程项目目录我贴个图
在这里插入图片描述
其中xwr6843_r4f.cmd的内容如下
在这里插入图片描述
与原来的有点区别,主要是MEMORY那里,改成我这个就不会报错了。

此外,为了避免不必要的错误,我又把main.c的MmwDemo_dataPathConfig函数中涉及判断errCode的所有地方都给注释了,类似下图。
在这里插入图片描述

由于我之前没怎么解除CCS,因此好多东西都从网上找了一些参考学了一下基本操作,这里贴一下参考链接
到目前为止,终于编译通过了,虽然有几个警告,但是并不重要,因为我也不知道怎么改。
在这里插入图片描述
编译好的bin文件放在Debug文件夹里。在这里插入图片描述

修改代码

为了达到我的目的,看了好几天代码,也想过放弃,但是好在老天有眼,我突然发现了main.c里面的一个参数,如下图
在这里插入图片描述
这个好像就是我上面提到的那个内存啊,他的大小不就是SOC_L3ARM_SIZE嘛,因此我点了进去,发现这个参数sys_common_xwr68xx.h里面,可以看到它的大小是MMWAVE_L3RAM_NUM_BANK * MMWAVE_SHMEM_BANK_SIZE,这两个参数的值在上面已经设置过了。然后有感觉这个SOC_L3ARM_SIZE好像有点似曾相识,也就是在上面提到的xwr6843_r4f.cmd文件里有个参数为L3_RAM。
在这里插入图片描述

好嘛,幸福来得太突然,二话不说,直接将两个地方同时乘上2,给他扩个两倍的内存。
在这里插入图片描述

在这里插入图片描述

再编译一下,没报错通过了。

UniFlash 烧录和测试

接下来用UniFlash烧录一下bin文件,这里就不详细介绍烧录流程了。
然后打开mmWave_Demo_Visualizer,在Plot界面点击一下LOAD CONFIG FROM PC AND SEND,加载一下本地的cfg参数文件。
在这里插入图片描述
可以看到Consle Messages输出的信息,可以看到采样点为256,tx为3,loops为3。
在这里插入图片描述

然后到激动人心的时候了,Plots界面终于有图像了,其中Chirps per frame = 192,就是 64 × 3 64\times3 64×3,没啥问题。
在这里插入图片描述
而且图像的实时性也没有收到太大影响,非常流畅,我估摸着其实我的参数大小还是能满足DCP正常工作的,只是源码中设置的比较小而已,嘿嘿。

安装到DCA1000上测试

为了验证可以使用之前的方法采集原始数据,我将iwr6843aop安装到了DCA1000上,利用代码采集了一下原始数据,发现采集的数据其实没啥问题,但是有一个小bug,就是利用socket通信读取网口原始数据的时候速度下降了一半,比如我采集20s的数据,实际代码读取完需要话40s左右的时间,这个问题还不是很清楚为啥。但是这个问题在我将参数设置小一点就不存在了,即我将loops设置为32。
在这里插入图片描述
我也猜测是不是由于前面把L3的内存扩大一倍导致的,于是我又将内存扩大了1.5倍试了一下,还是一样的问题。
先不管了,至少能采集数据了,就是多耗费了一倍的时间,如果有大佬知道,欢迎告知!!!!!!

为了避免大家CCS踩坑,我直接把我编译好的bin文件放这儿了,但是仅限于iwr6843aop雷达。
链接:https://pan.baidu.com/s/1uV492AcAgOGjHEV9qtq25g?pwd=1234
提取码:1234

文章来源:https://blog.csdn.net/wangshuxuan121/article/details/134140944
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。