ZHCT892 January 2025 AWR2944
本文内容基于AWR2944 EVM,以mmw Demo为例,介绍如何上手AWR2944的在线调试。
1. 硬件准备
EVM板: XWR2944EVM REV.D (https://www.ti.com/tool/AWR2944EVM)
如下图所示,使用DC-12V直流电源(电流容量>2.5A),连接EVM板为整板供电,使用Micro USB线连接EVM与主机的USB口。
将EVM的SOP模式设置成101(Flashing mode),如下图所示。按下Reset按键或者EVM重新上下电进行重置。
关于SOP模式更多的介绍请参考附录1.SOP模式。
2. 软件准备
SDK版本 MMWAVE-MCUPLUS-SDK Version : 4.6.1.2 https://www.ti.com.cn/tool/cn/download/MMWAVE-MCUPLUS-SDK
雷达工具箱版本 Radar_Toolbox Version : 2_20_00_05 https://www.ti.com.cn/tool/cn/download/RADAR-TOOLBOX/2.20.00.05
查看文件C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mcu_plus_sdk_awr294x_09_02_00_15\README_FIRST_AWR294X.html的Introduction下的Directory Structure确定软件版本。
注意,SDK版本可能不同请根据自身实际安装的SDK版本进入对应路径。
根据Directory Structure小节提供的信息,检查软件环境是否安装成功,软件版本需要匹配。
(注:README_FIRST_AWR294X提供的CCS版本为1270,本文使用CCS1271,经验证CCS1271在本文的操作中能够产生与CCS1270一样的结果。)
1. 烧录SBL和程序镜像
SBL(Secondary Boot Loader, 次级引导程序加载器)通常负责初始化硬件组件、内存以及其他系统资源。只有在这些资源和硬件初始化完成后,应用代码才能正常运行和调试。SBL程序正确执行并加载应用程序(awr2944_ccsdebug.appimage),SBL程序运行结束后将进入应用程序,应用程序会进行循环等待,确保各个核处于一个确认的状态,使调试器能顺利连接上各个核。更多关于awr2944_ccsdebug.appimage的介绍请参考附录4.awr2944_ccsdebug.appimage。用户可以使用UniFlash将镜像文件烧录至AWR2944 EVM的Flash中。具体步骤如下:
点击APP Image侧栏的Browse,选择C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\ti\utils\ccsdebug\awr2944_ccsdebug.appimage,如下图②所示
在电脑的资源管理器里查看AWR2944EVM的COM口(User UART),输入正确的COM Port,如下图③所示。
UniFlash的Console出现[SUCCESS] Program Load completed successfully表示烧录成功。
2. 将工程文件导入CCS并编译
从路径C:\ti\radar_toolbox_2_20_00_05\source\ti\examples\Out_Of_Box_Demo\src\awr294x打开相应的文件夹,选择相应的工程文件。
3. 连接XDS110调试器
点击out_of_box_2944_mss/targetConfigs,选择AWR2944.ccxml,右键,选择Launch Selected Configuration。
其中ccxml文件是一个目标配置文件(Target Configuration File),它定义了调试会话所需的各种设置用以简化调试配置过程和提高灵活性。目标配置文件已经支持了大多数TI的器件,在使用目标配置文件时只需要选择正确的设备以及采用的调试工具即可,其他需要配置的参数将自动生成。更多关于ccxml的解释请参考附录3.目标配置文件。
点击CPU Reset的下拉栏,选择CPU Reset
选择CPU Reset对C66xx核进行reset。
4. 加载应用程序到AWR2944 RAM
点击Browse,选择文件C:\Users\Username\workspace_v12\out_of_box_2944_dss\Debug\ out_of_box_2944_dss.xe66,点击OK。
除了将程序工程导入CCS 集成开发环境下进行编译,SDK的程序还可以使用Makefile进行编译,本节以mmwave_mcuplus_sdk_04_06_01_02的mmw demo为例,介绍使用Makefile进行代码编译后如何使用CCS集成开发环境进行在线调试。
1. 使用Makefile对mmw demo进行编译。
编译的详细过程,请参考附录5.使用Makefile进行编译。
2. 烧写镜像文件
使用UniFlash将awr2944_ccsdebug.appimage和sbl_qspi.release.tiimage烧写到AWR2944EVM的Flash。
3. 创建新的目标配置文件(.ccxml)并启动。
可以为新建的目标配置文件重命名,也可以直接点击Finish
4. 连接ARM/C66xx核
连接R5_0核,点击CPU Reset,连接C66xx核,点击CPU reset。
5. 加载应用程序二进制文件
6. 选择R5_0/C66xx核进行调试。
在加载相应可执行文件后,跳转至main()函数,对程序进行在线调试。
SBL的调试和上面提到的方法不同,调试SBL需要将SBL烧写到Flash后调试。SBL由RBL加载并运行,上电后将立即执行。为了可以停在SBL开始的位置,需要在SBL程序起始位置加入循环空转函数,在连接上调试器后使用调试器访问并修改循环条件,使其退出循环空转并执行SBL代码。
1. 导入sbl_qspi工程并修改
2. 烧录镜像
选择C:\Users\Username\workspace_v12\sbl_qspi_awr294x-evm_r5fss0-0_nortos_ti-arm-clang\Debug\sbl_qspi_awr294x-evm_r5fss0-0_nortos_ti-arm-clang.tiimage作为SBL Image。
选择C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\ti\utils\ccsdebug\awr2944_ccsdebug.appimage作为APP Image。
将两个镜像程序通过UniFlash烧录至AWR2944EVM的Flash上。
3. 加载符号表
AWR2944 EVM的SOP设置为001模式后上电。在CCS里点击SBL工程里的AWR2944.ccxml文件,右键选择Launch Selected Configuration。
选择R5_0核,右键选择Connect Target。
在CCS菜单里点击Run->Load->Load Symbols,选择C:\Users\Username\workspace_v12\sbl_qspi_awr294x-evm_r5fss0-0_nortos_ti-arm-clang\Debug下的sbl_qspi_awr294x-evm_r5fss0-0_nortos_ti-arm-clang.out,下载SBL的符号表。
符号表下载后,用户可以看到PC指针停在了之前添加的while循环内。
4. 跳出循环,调试SBL
修改Variables里的变量loop的值为0,使得程序跳出while(looop),loop_forever函数退出。
接下来就可以单步运行以调试SBL程序了。
1. SOP模式
AWR2944上电后首先运行的是芯片ROM里固化的RBL。RBL负责器件的初始化(Power, clock和 连接外设)与SOP模式的检查,SOP模式决定后续RBL的操作模式,具体如下图所示:
模式2开发模式(Development mode):在该模式下不执行后续的启动程序,可以用于mmWave Studio的连接使用。
模式4功能模式(function mode):RBL使用QSPI接口从串行Flash加载SBL。它会尝试读取串行Flash的第一个镜像(位于偏移量0x0处),也就是SBL存放的地址。一旦SBL被成功加载到RAM中,RBL将执行跳转,将控制权转交给SBL。如果失败,RBL还会最多尝试加载3个不同Flash偏移的镜像。
模式5烧写模式(Flashing Mode):RBL等待通过UART接口接收数据。RBL开始在UART端口上发送PING信号(字符"C"),表明它正在等待外部主机(例如电脑)发送镜像文件。外部主机通过UART使用XMODEM协议将Flash Writer镜像写入AWR2944 RAM中,随后Flash Writer执行后等待主机端将镜像文件通过串口下载。Flash Writer在设备的RAM(通常是MSS L2 内存)中接收并暂存镜像文件。接收完成后,Flash Writer将接收到的镜像(例如SBL和应用程序镜像)写入Flash中。
对于AWR2944可以使用UniFlash这个软件将需要写入的镜像文件烧录到Flash中,UniFlash提供一个GUI界面,可以简单方便的操作。除此之外,还可以使用SDK中提供的Python脚本程序进行Flash程序烧录。脚本程序在mmwave_mcuplus_sdk_04_06_01_02\mcu_plus_sdk_awr294x_09_02_00_15\tools\boot文件夹里。
2. SBL的功能
SBL是一段存在于串行Flash中的程序,不同于RBL,SBL可以由用户修改,这提供了极大的灵活性。当芯片SOP=001并且Flash上预先烧写好SBL,上电后RBL会加载SBL到芯片内存里并运行。SBL的功能主要有一下几点:
3. 目标配置文件:
目标配置文件(Target Configuration File)主要有如下功能:
目标配置文件提供了一个直观的图形界面用户选择与配置,也可以通过直接查看源码的方式进行配置
4. awr2944_ccsdebug.appimage:
awr2944_ccsdebug.appimage的功能是为CCS在线调试提供合适的连接环境。在CCS在线调试过程中,需要使用Load Program操作将可执行二进制文件加载至芯片的RAM中。因此,用户在CCS在线调试过程中,实际执行的代码是通过Load操作加载的可执行二进制文件,而不是烧录在串行Flash中的用户镜像文件。但这并不意味着,不需要烧录用户镜像文件,这是因为在设备的SOP模式为function mode时,在芯片上电后将立即执行RBL->SBL->用户程序,其中SBL将对用户程序(appimage)进行解析,如果串行Flash中没有一个正确格式的用户镜像文件存在,将导致SBL将程序运行状态设置为Failed,进而退出程序,使得SBL中的初始化代码无法完整执行。使用awr2944_ccsdebug.appimage的一个重要原因是,awr2944_ccsdebug.appimage不仅包含了R5F的程序,还包含C66xx核的镜像,SBL对C66xx核进行正确初始化使得调试器能够连接C66xx核。若烧录的用户镜像中不包含C66xx核心的镜像,用户则无法连接C66xx核。除此之外,SBL的另一个重要功能是加载BSS Firmware/Patch到R4F核心,使得用户在加载ARM与C66xx核的代码后后能够正确的使用射频功能。
综上,为了可以在CCS里正确连上ARM和C66xx核,并且配置射频模块,用户需要烧录一个对ARM核和C66xx核正确初始化后不断循环等待,并且包含射频固件的具有正确用户镜像格式的镜像文件,即awr2944_ccsdebug.appimage,以满足启动的需求,使得SBL程序顺利执行并等待用户通过CCS Load Program操作将真正需要调试的程序加载进来。
5. 使用Makefile进行编译
CCS中自带gmake,进入路径C:\ti\ccs1271\ccs\utils\bin,可以看到文件夹下有一个gmake.exe文件。在windows搜索框中输入“env”,点击编辑系统环境变量,点击环境变量。
在系统环境变量Path中添加路径。
打开cmd命令行窗口,键入gmake --version确认环境变量已经正确添加。
进入路径
C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\scripts\windows。编辑文件setenv.mak,将MMWAVE_SDK_DEVICE修改成awr2944。
编辑文件setenv.bat,将MMWAVE SDK DEVICE修改成awr2944。
打开命令行窗口,使用cd命令,将路径切换至该路径下,也就是C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\scripts\windows。键入,setenv.bat,回车,再键入checkenv.bat,确保命令行没有报错说明操作成功。
不要关掉命令行窗口,如果关闭了命令行窗口则需要再次到路径下键入setenv.bat并运行。使用命令行切换路径,cd C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\ti\demo\awr294x\mmw
在该路径下,使用命令输入gmake all,按下回车并等待编译完成。如果是第一次编译,先运行gmake clean,再运行gmake all。