ZHCT892 January   2025 AWR2944

 

  1.   1
  2.   2
    1.     一、软硬件准备
    2.     二、使用CCS工程进行在线调试
    3.     三、使用makefile编译的代码进行在线调试
    4.     四、调试SBL
    5.     五、附录
    6.     参考资料:

本文内容基于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一样的结果。)

二、使用CCS工程进行在线调试

1. 烧录SBL和程序镜像

SBL(Secondary Boot Loader, 次级引导程序加载器)通常负责初始化硬件组件、内存以及其他系统资源。只有在这些资源和硬件初始化完成后,应用代码才能正常运行和调试。SBL程序正确执行并加载应用程序(awr2944_ccsdebug.appimage),SBL程序运行结束后将进入应用程序,应用程序会进行循环等待,确保各个核处于一个确认的状态,使调试器能顺利连接上各个核。更多关于awr2944_ccsdebug.appimage的介绍请参考附录4.awr2944_ccsdebug.appimage。用户可以使用UniFlash将镜像文件烧录至AWR2944 EVM的Flash中。具体步骤如下:

  1. 打开UniFlash界面入下图所示。点击Start按钮后,进入烧写界面,也可以通过选择device(AWR2944)进入烧写界面。
  2. 输入烧写文件和配置串口点击SBL Image侧栏的Browse,选择C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\tools\awr294x\sbl_qspi.release.tiimage,如下图①所示。

    点击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,如下图③所示。

  3. 烧写Flash,点击Load Image将镜像文件烧写至Flash。

UniFlash的Console出现[SUCCESS] Program Load completed successfully表示烧录成功。

2. 将工程文件导入CCS并编译

  1. 打开CCS,点击左上角File->Import
  2. 展开C/C++ Folder,双击CCS Project
  3. 点击Browser

    从路径C:\ti\radar_toolbox_2_20_00_05\source\ti\examples\Out_Of_Box_Demo\src\awr294x打开相应的文件夹,选择相应的工程文件。

  4. 导入工程后,可以在CCS看到DSS和MSS两个工程,如下图所示。
  5. 先对dss工程进行ReBuild Project,再对mss工程进行ReBuild Project。

3. 连接XDS110调试器

  1. 找到右侧栏的Target Configurations。如果不存在Target Configurations,请到上侧菜单栏点击View -> Target Configurations。

    点击out_of_box_2944_mss/targetConfigs,选择AWR2944.ccxml,右键,选择Launch Selected Configuration。

    其中ccxml文件是一个目标配置文件(Target Configuration File),它定义了调试会话所需的各种设置用以简化调试配置过程和提高灵活性。目标配置文件已经支持了大多数TI的器件,在使用目标配置文件时只需要选择正确的设备以及采用的调试工具即可,其他需要配置的参数将自动生成。更多关于ccxml的解释请参考附录3.目标配置文件。

  2. 选择Cortex_R5_0,右键,点击Connect Target连接R5_0核。在连接核之前,请确认将EVM的SOP模式切换成001(function mode),然后按下复位键或者重新上电。

    点击CPU Reset的下拉栏,选择CPU Reset

  3. 选择C66xx_DSP,右键,选择Connect Target

    选择CPU Reset对C66xx核进行reset。

4. 加载应用程序到AWR2944 RAM

  1. 先点击选中R5_0核,然后选择菜单栏的Run->Load->Load Program。
  2. 点击Browse,选择文件R5F的可执行文件,例如C:\Users\Username\workspace_v12\out_of_box_2944_mss\Debug\ out_of_box_2944_mss.xer5f,点击OK。代码会自动运行到main函数。
  3. 同理,点击选中C66xx核,选择菜单栏的Run->Load->Load Program

    点击Browse,选择文件C:\Users\Username\workspace_v12\out_of_box_2944_dss\Debug\ out_of_box_2944_dss.xe66,点击OK。

  4. 然后就可以通过菜单栏对代码进行调试操作,菜单栏基本的调试功能组件如下图所示。

三、使用makefile编译的代码进行在线调试

除了将程序工程导入CCS 集成开发环境下进行编译,SDK的程序还可以使用Makefile进行编译,本节以mmwave_mcuplus_sdk_04_06_01_02的mmw demo为例,介绍使用Makefile进行代码编译后如何使用CCS集成开发环境进行在线调试。

1. 使用Makefile对mmw demo进行编译。

编译的详细过程,请参考附录5.使用Makefile进行编译。

2. 烧写镜像文件

使用UniFlash将awr2944_ccsdebug.appimagesbl_qspi.release.tiimage烧写到AWR2944EVM的Flash。

3. 创建新的目标配置文件(.ccxml)并启动。

  1. 打开CCS,选择Target Configurations->User Defined,右键,选择New Target Configuration。

    可以为新建的目标配置文件重命名,也可以直接点击Finish

  2. 在Connection栏选择XDS110 USB Debug Probe
  3. Board or Device选择AWR2944
  4. 选择Save保存设置
  5. 在Target Configurations栏对新建的目标配置文件文件右键,选择Launch Selected Configuration.

4. 连接ARM/C66xx核

连接R5_0核,点击CPU Reset,连接C66xx核,点击CPU reset。

5. 加载应用程序二进制文件

  1. 选择R5_0,使用Load Program,选择C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\ti\demo\awr294x\mmw下的awr2944_mmw_demo_mssDDM.xer5f,选择OK。
  2. 选择C66xx,使用Load Program,选择C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mmwave_mcuplus_sdk_04_06_01_02\ti\demo\awr294x\mmw下的awr2944_mmw_demo_dssDDM.xe66,选择OK。

6. 选择R5_0/C66xx核进行调试。

在加载相应可执行文件后,跳转至main()函数,对程序进行在线调试。

四、调试SBL

SBL的调试和上面提到的方法不同,调试SBL需要将SBL烧写到Flash后调试。SBL由RBL加载并运行,上电后将立即执行。为了可以停在SBL开始的位置,需要在SBL程序起始位置加入循环空转函数,在连接上调试器后使用调试器访问并修改循环条件,使其退出循环空转并执行SBL代码。

1. 导入sbl_qspi工程并修改

  1. 在CCS里点击菜单File->Import,在路径C:\ti\mmwave_mcuplus_sdk_04_06_01_02\mcu_plus_sdk_awr294x_09_02_00_15\examples\drivers\boot\sbl_qspi\awr294x-evm下选择sbl_qspi_awr294x-evm_r5fss0-0_nortos_ti-arm-clang工程,导入AWR2944的sbl qspi工程。
  2. 打开main.c,在main()函数的起始位置添加loop_forever,注意loop_forever已经被定义。
  3. 保存代码,并进行Rebuild.

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的功能主要有一下几点:

  1. 系统初始化:SBL 在启动后,首先执行一系列系统初始化操作。这些操作通常包括配置系统时钟、初始化内存控制器和其他硬件子系统,以确保AWR2944处于一个稳定的状态,准备好执行下一步的操作。
  2. 加载应用程序镜像:SBL的一个核心功能是从Flash加载用户的应用程序镜像。这个镜像通常是一个多核应用程序镜像(Appimage),它包含了多个用于不同处理器核(R5F、C66,射频子系统的R4)的二进制文件。SBL 解析这个多核应用程序镜像,识别其中每个核的专用镜像文件,并将这些文件加载到对应的处理器核的内存中。SBL需要一个正确的应用程序镜像,因为在SBL的程序中会对各个核应用程序镜像的状态进行检查,如果这个处理器核的应用程序镜像不存在,或者格式错误,将导致这个核程序运行的状态(status)被设定为Failed,这会跳过后续的启动该处理器核的操作,使得这个处理器核无法被正确加载并运行。
  3. 启动处理器核:SBL在将每个处理器核的镜像文件加载到相应内存位置后,设置每个核的入口点(Entry Point)并启动这些核,使它们开始执行各自的应用程序。设备的各个处理器核启动顺序为:RSS_R4,C66SS0,R5FSS_1。最后RF5SS_0会加载自身对应的镜像到内存,一旦镜像加载完成,程序执行必要的复位操作,使得R5FSS_0开始执行自应用程序。
  4. 在线升级/烧写应用程序镜像:SBL支持通过UART、CAN-FD、以太网等多种接口进行在线升级。SBL在运行时可以通过这些接口接收新的应用程序镜像,并将其烧写到AWR2944外部的闪存中。

3. 目标配置文件:

目标配置文件(Target Configuration File)主要有如下功能:

  1. 指定你正在使用的目标处理器或MCU的型号和系列
  2. 文件配置了所使用的调试器类型及厂商(例如XDS110, XDS560等)
  3. 定义了调试连接的参数,如时钟速率、接口类型等。

目标配置文件提供了一个直观的图形界面用户选择与配置,也可以通过直接查看源码的方式进行配置

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。