作者:Chris Meng
毫米波的软件包mmWave SDK里有很多驱动的测试代码,包括外设驱动,mmWave link驱动等。例如\packages\ti\control\mmwavelink\test\xwr68xx目录下的测试代码。这些测试代码都需要编译生成MSS或者DSS的可以执行文件,然后通过CCS下载到板子上运行。但如果TI的毫米波评估板或者客户的板子上没有JTAG口/仿真器,那就不能方便的使用这些测试代码了。本文就是基于这个问题,尝试把MSS的测试代码直接烧写到QSPI flash上运行,并且通过GPIO点灯的状态来反映测试情况,来解决没有JTAG/仿真器情况下的测试问题。
本文运行环境,硬件:AWR6843ISK revC;软件:mmwave_sdk_03_04_00_03。
首先需要在命令行下编译出测试需要的mss可执行文件。
以xWR6843的Link test为例,用户可以在测试代码里面添加GPIO点灯的功能,来反映测试状态。例如可以根据自己的需求在某个测试通过后点亮LED灯,从而获知测试的结果。下面是本文尝试修改点灯的相关代码。实现的功能是上电后关闭LED,表示测试开始。最后mmwavelink测试全部结束后,灯会再次亮起。本文利用的是AWR6843ISK上的D7 LED,使用GPIO_2来控制灯的点亮和关闭,如图1所示。
图1 测试使用的AWR6843ISK revC上的LED
1. 修改测试文件
C:\ti\mmwave_sdk_03_04_00_03\packages\ti\control\mmwavelink\test\xwr68xx\ main_mss.c
a. 在文件开始的位置添加包含GPIO驱动的头文件相关代码:
#include <ti/drivers/gpio/gpio.h>
b. 在MmwaveLink_initTask()函数开始位置添加GPIO初始化和关闭LED的代码。
GPIO_init();
Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINK13_PADAZ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);
Pinmux_Set_FuncSel(SOC_XWR68XX_PINK13_PADAZ, SOC_XWR68XX_PINK13_PADAZ_GPIO_2);
GPIO_setConfig(SOC_XWR68XX_GPIO_2, GPIO_CFG_OUTPUT);
GPIO_write(SOC_XWR68XX_GPIO_2, 0U);
c. 在MmwaveLink_initTask()函数结尾位置添加GPIO点亮LED灯的代码。
GPIO_write(SOC_XWR68XX_GPIO_2, 1U);
2. 修改mssTest.mak,在编译器连接时添加GPIO库和include路径(标黄相关代码)。
MMWAVE_MSS_UNIT_TEST_STD_LIBS = $(R4F_COMMON_STD_LIB) \
-llibpinmux_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibcrc_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibmailbox_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibtestlogger_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibadcbuf_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibedma_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibmmwavelink_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \
-llibgpio_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)
MMWAVE_MSS_UNIT_TEST_LOC_LIBS = $(R4F_COMMON_LOC_LIB) \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/pinmux/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/adcbuf/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/crc/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/mailbox/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/utils/testlogger/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/edma/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwavelink/lib \
-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/gpio/lib
3. 单独编译测试代码(不编译相关库)。
a. 首先需要设置好编译的环境变量,方法和编译mmw demo时候的环境变量设置方法一致。具体请参考C:\ti\mmwave_sdk_03_04_00_03\docs\ mmwave_sdk_user_guide.pdf的设置环境变量章节的内容(4. 5. 2. Setting up build environment)。基本流程如下:
- 修改C:\ti\mmwave_sdk_03_04_00_03\packages\scripts\windows\setenv.bat,例如:set MMWAVE_SDK_DEVICE=awr68xx。
- 在DOS命令行窗口切换到setenv.bat所在目录,并且运行setenv.bat。
b. 然后在同一个窗口下使用命令切换到link test目录,例如:
cd C:\ti\mmwave_sdk_03_04_00_03\packages\ti\control\mmwavelink 并执行下面的代码。
gmake mssTestClean
gmake mssTest
c. 编译结束后,会在C:\ti\mmwave_sdk_03_04_00_03\packages\ti\control\mmwavelink\test\xwr68xx目录下生成更新的可执行文件:xwr68xx_link_mss.xer4f。
接下来是生成可以烧写到QSPI flash的bin文件。
1.首先复制MSS可执行xwr68xx_link_mss.xer4f文件到C:\ti\mmwave_sdk_03_04_00_03\packages\scripts\ImageCreator目录。
2.然后复制BSS firmware C:\ti\mmwave_sdk_03_04_00_03\firmware\radarss\ xwr6xxx_radarss_rprc.bin到同一目录。
3.接下来将编译脚本image_create_mss_only.bat也复制到相同目录。image_create_mss_only.bat编译脚本的具体内容如下:
cd out2rprc
out2rprc.exe ..\%1 ..\mss_rprc.bin
cd ..\
cd multicore_image_generator
MulticoreImageGen.exe LE 37 0x02000006 ..\metaImage.bin 0x35510000 ..\mss_rprc.bin 0xB5510000 ..\xwr6xxx_radarss_rprc.bin
cd ..\
cd crc_multicore_image
crc_multicore_image.exe ..\metaImage.bin 0
cd ..\
cd append_bin_crc
gen_bincrc32.exe ..\metaImage.bin
cd ..\
4.接下来在DOS命令行窗口切换到ImageCreator这个目录
cd C:\ti\mmwave_sdk_03_04_00_03\packages\scripts\ImageCreator
然后运行下面的命令:
image_create_mss_only.bat xwr68xx_link_mss.xer4f
5.运行结束后会在同一个目录下生成metaImage.bin,用于QSPI flash烧写。
最后使用UniFlash将metaImage.bin烧录到IWR6843板子上的QSPI Flash上,然后运行。
这个mmwavelink测试代码的运行时间较长,大概在20s以内会看到LED灯点亮。
总结:
本方法也同样适用于其他测试例程以及其他毫米波芯片。如果更换毫米波芯片,请注意复制正确的bss firmware到ImageCreator目录,并修改image_create_mss_only.bat里面bss firmware的文件名。
参考资料:
https://e2e.ti.com/support/sensors/f/1023/t/626793