0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

适用于TI mmWave sensor的CCS在线调试脚本上手指南

星星科技指导员 来源:TI 作者:Wesley He 2023-03-16 09:20 次阅读

TI mmWave sensor毫米波雷达传感器是高集成度的毫米波雷达传感SOC,将中射频电路,VCO,ADCDSP硬件加速器集成在单颗芯片内,它具有集成度高,成本低,开发简单等优点,在汽车及工业中都有广泛的应用。本文介绍了使用CCS软件的毫米波雷达传感器在线调试的方法及步骤,同时提供了一种基于debug server scripting脚本的自动加载实现方法,方便广大开发者提高开发效率,本文的测试环境如下:

此方法适用器件型号:I/AWR1443, I/AWR1642, I/AWR1843, I/AWR6843

本文测试软件版本:mmWave SDK 3.5.0.4 out-of-box demo, Code Composer Studio Version: 10.2.0.00009

本文测试硬件平台:IWR6843ISK EVM

1. 使用Code Composer Studio (CCS) 集成开发环境(IDE) 对IWR6843进行在线调试的步骤

对于CCS在线调试TI的毫米波雷达芯片而言,都需要遵循以下步骤。

步骤 说明 是否使用脚本
设置EVM为Flashing mode,使用Uniflash软件烧写ccs_debug.bin到板载flash 一次操作
设置EVM为functional mode 一次操作
生成Target Configuration File (CCXML) 一次操作
复位 每次ccs debug都需做
使用JTAG 将CCS与硬件板卡连接 每次ccs debug都需做 可以使用脚本
使用Target Configuration File连接DSP/ARM核心 每次ccs debug都需做 可以使用脚本
分别加载DSP/ARM固件 每次ccs debug都需做 可以使用脚本
运行&debug 每次ccs debug都需做 可以使用脚本
断点设置 每次ccs debug都需做 可以使用脚本

本文针对每次在线调试都需要手动连接及加载BIN的部分,提供一种脚本用于自动加载,节省用户操作的时间,本文涉及的脚本覆盖部分如上表描述。

2. 使用脚本对IWR6843进行在线调试的步骤进行自动加载

2.1 工具介绍

Debug Server Scripting

调试服务器脚本 (Debug Server Scripting) 是调试服务器的一组跨平台 Java API,允许通过 Java 或 第三 方工具编写脚本,例如 JavaScript(通过 Rhino)、Java、Python(通过 Jython)、TCL(通过 Jacl/Tclblend) 等, JavaScript 是 DSS 支持的默认(和首选)脚本语言。调试服务器是 Code Composer Studio (CCS) 的基本调试引擎。 DSS 和 CCS IDE 都可以访问它,可以理解为CCS的一个可执行调试命令的组件,可参考文档 。

Scripting Console

通过 CCS Scripting Console View可支持交互式脚本,Scripting Console中提供了使用示例。 可以从控制台调用 Debug Server Scripting API。 可以从Scripting Console运行完整的独立 Debug Server Scripting JavaScript 文件。在CCS中,点击View-> Scripting Console,即可打开此控制台窗口。

2.2 JavaScript脚本实例

本文创建了一个可供在线调试使用的JavaScript脚本,示例如下,用户使用此脚本可以完成CCS在线调试的自动连接及固件加载。

脚本包含由几个部分:

在您喜欢的文本编辑器中创建一个新文件,并将其保存在ccs 工程目录子文件夹OOB_Handoff中,名为js。这是我们将为本实验创建脚本的文件。

使用importPackage()API导入脚本的相关包

// Import the DSS packages into our namespace to save on typing

importPackage(Packages.com.ti.debug.engine.scripting);

importPackage(Packages.com.ti.ccstudio.scripting.environment);

importPackage(Packages.java.lang);

importPackage(Packages.java.io);

为我们将要使用的各种文件创建一些变量。您需要修改前几个变量以匹配您的环境。要避免出现问题,请使用带有正斜杠的完整路径。

设置文件工作路径及BIN文件路径,修改部分在如下代码示例中高亮。

一般把脚本放置于CCS工程,方便不同工程调试时直接修改。

//*******User must specify WORKSPACE_DIR***********

var WORKSPACE_DIR = "C:/ccs_workspace_v10/IWR6843_OOB_TEST/";

//*******User must specify WORKSPACE_DIR***********

var PROJECT_DIR = WORKSPACE_DIR+"OOB_Handoff/";

var R4F_OUT_FILE_PATH = WORKSPACE_DIR+"mmwave_sdk_68xx_dsp_mss/Debug/xwr68xx_mmw_demo_mss.xer4f";

var DSS_OUT_FILE_PATH = WORKSPACE_DIR+"mmwave_sdk_68xx_dsp_dss/Debug/xwr68xx_mmw_demo_dss.xe674";

设置CCS_TARGET_CONFIGURATION_FILE 路径,修改部分在如下代码示例中高亮。

创建并使用适用于用户电脑CCS版本及XDS仿真器版本的target configuration file。

在CCS中,点击File-> New -> Target configuration file 创建,创建完成后的ccxml文件,拷贝到JavaScript脚本所在路径。

var CCS_TARGET_CONFIGURATION_FILE = "IWR6843.ccxml";

获取ScriptingEnvironment对象的句柄

ScriptingEnvironment对象是进入DSS会话的主要入口点,也是创建其他可编写脚本服务器和会话的步骤。

var script = ScriptingEnvironment.instance();

启用和配置日志记录

使用traceBegin()API启用DSS日志记录到logFile变量指定的文件。

DSS日志文件采用XML格式,使用XSLT(XML样式表转换)进行样式设置。我们使用CCS安装路径,脚本示例文件夹中提供的示例xsl文件。要查看样式化的日志文件,建议使用Internet Explorer打开以获得最佳兼容性。有关DSS日志记录的更多详细信息,请参见此处

script.traceBegin("BreakpointsTestLog.xml", "DefaultStylesheet.xsl")

使用traceSetConsoleLevel()和traceSetFileLevel()API设置控制台和日志文件的详细级别。

A. 以下形成可用追踪级别的子集。顺序为最低到最高(每个级别包含来自它上面的级别的所有消息):

TraceLevel.OFF (关闭记录)

TraceLevel.SEVERE (只有来自调试器的非常严重的消息)

TraceLevel.WARNING (从调试器添加警告消息)

TraceLevel.INFO (添加基本消息和C I/O)

TraceLevel.ALL (记录所有内容)

B. 关于更多追踪细节,请参考文档的TraceLevel

// Log everything

script.traceSetConsoleLevel(TraceLevel.ALL);

script.traceSetFileLevel(TraceLevel.ALL);

使用getServer()API建立与调试器的链接(DebugServer.1)

返回的DebugServer对象是调试器的主句柄。此对象用于配置调试器并启动目标的调试会话。

script.setCurrentDirectory(PROJECT_DIR);

debugServer = script.getServer("DebugServer.1");

通过使用setConfig() API将目标配置*.ccxml文件传递给调试服务器,为所需的目标板配置调试器。

DebugSession对象将返回已启动的调试会话的主句柄。可以使用此对象访问针对目标的所有调试操作。

//CCXML file

debugServer.setConfig(CCS_TARGET_CONFIGURATION_FILE);

使用调试会话的目标字段的connect()API连接到目标。

Target类支持目标执行的方法(例如run,halt,restart),步进和连接/断开目标。

分别连接并复位处理器DSS(DSP)、MSS(R4F)核心。

//Open R4F Debug Session

print("Debug session R4F...");

debugSession_MSS = debugServer.openSession("*","Cortex_R4_0");

print("Connecting to R4F Core...");

debugSession_MSS.target.connect();

debugSession_MSS.target.reset();

print("Done.");

//Open C674x Debug Session

print("Debug session C674x...");

debugSession_DSS = debugServer.openSession("*","C674X_0");

print("Connecting to C674x Core...");

debugSession_DSS.target.connect();

debugSession_DSS.target.reset();

print("Done.");

将程序加载至内存中。

Memory类支持内存访问的方法,如save,load,read,write,register access和program loading。

分别加载固件到DSS(DSP)、MSS(R4F)核心。

//*******Load program***********

print("Loading program - C674x...");

debugSession_DSS.memory.loadProgram(DSS_OUT_FILE_PATH);

print("Done.");

print("Loading program - R4F...");

debugSession_MSS.memory.loadProgram(R4F_OUT_FILE_PATH);

print("Done.");

向目标发出命令以运行加载的程序。

Run()在目标停止之前不会返回控制。直到目标到达程序结束,将返回控制。

运行DSS(DSP)、MSS(R4F)核心。

//*******Run***********

debugSession_DSS.target.runAsynch();

print("Running DSS core...");

sleep(1000);//sleep 1000ms

debugSession_MSS.target.runAsynch();

print("Running R4F core...");

使用调试服务器的stop()API关闭调试器。

此调用既关闭调试会话又关闭调试服务器(基本上终止调试器)

debugServer.stop();

结束日志文件追踪并使用脚本环境的traceEnd() API禁用日志记录。

建议您正确关闭日志文件。

scriptEnv.traceEnd();

脚本全文如下,用户可拷贝并保存为ccsdebug_scripts_from_workspace.js文件。

// Import the DSS packages into our namespace to save on typing

importPackage(Packages.com.ti.debug.engine.scripting);

importPackage(Packages.com.ti.ccstudio.scripting.environment);

importPackage(Packages.java.lang);

importPackage(Packages.java.io);

//*******User must specify WORKSPACE_DIR***********

var WORKSPACE_DIR = "C:/ccs_workspace_v10/IWR6843_OOB_TEST/";

//*******User must specify WORKSPACE_DIR***********

var PROJECT_DIR = WORKSPACE_DIR+"OOB_Handoff/";

var R4F_OUT_FILE_PATH = WORKSPACE_DIR+"mmwave_sdk_68xx_dsp_mss/Debug/xwr68xx_mmw_demo_mss.xer4f";

var DSS_OUT_FILE_PATH = WORKSPACE_DIR+"mmwave_sdk_68xx_dsp_dss/Debug/xwr68xx_mmw_demo_dss.xe674";

var CCS_TARGET_CONFIGURATION_FILE = "IWR6843.ccxml";

var script = ScriptingEnvironment.instance();

script.traceBegin("BreakpointsTestLog.xml", "DefaultStylesheet.xsl")

// Log everything

script.traceSetConsoleLevel(TraceLevel.ALL);

script.traceSetFileLevel(TraceLevel.ALL);

print("Starting Debug session...");

script.setCurrentDirectory(PROJECT_DIR);

debugServer = script.getServer("DebugServer.1");

//CCXML file

debugServer.setConfig(CCS_TARGET_CONFIGURATION_FILE);

//*******connect and reset the core***********

//Open R4F Debug Session

print("Debug session R4F...");

debugSession_MSS = debugServer.openSession("*","Cortex_R4_0");

print("Connecting to R4F Core...");

debugSession_MSS.target.connect();

debugSession_MSS.target.reset();

print("Done.");

//Open C674x Debug Session

print("Debug session C674x...");

debugSession_DSS = debugServer.openSession("*","C674X_0");

print("Connecting to C674x Core...");

debugSession_DSS.target.connect();

debugSession_DSS.target.reset();

print("Done.");

//*******Load program***********

print("Loading program - C674x...");

debugSession_DSS.memory.loadProgram(DSS_OUT_FILE_PATH);

print("Done.");

print("Loading program - R4F...");

debugSession_MSS.memory.loadProgram(R4F_OUT_FILE_PATH);

print("Done.");

/**

* Delay for a number of milliseconds

*/

function sleep(delay)

{

var start = new Date().getTime();

while (new Date().getTime() < start + delay);

}

//*******Run***********

debugSession_DSS.target.runAsynch();

print("Running DSS core...");

sleep(1000);//sleep 1000ms

//*******Breakpoint test***********

//var bp1 = debugSession_MSS.breakpoint.add("0x100") // breakpoint with address

var breakpoint_address = debugSession_MSS.symbol.getAddress("MmwDemo_initTask") // Query for address of label "MmwDemo_initTask"

var bp1 = debugSession_MSS.breakpoint.add(breakpoint_address) // set breakpoint based on the address "MmwDemo_initTask"

debugSession_MSS.breakpoint.add("mss_main.c", 4208);

debugSession_MSS.target.runAsynch();

print("Running R4F core...");

2.3 断点的设置方法

在使用JavaScript脚本的过程中,可以在脚本中设置断点,常用的断点设置方法有以下三种。

使用地址设置断点:在0x100地址设置断点

var bp1 = debugSession_MSS.breakpoint.add("0x100") // breakpoint with address

使用函数名设置断点:在MmwDemo_initTask函数调用处设置断点

var breakpoint_address = debugSession_MSS.symbol.getAddress("MmwDemo_initTask") // Query for address of label "MmwDemo_initTask"

var bp1 = debugSession_MSS.breakpoint.add(breakpoint_address) // set breakpoint based on the address "MmwDemo_initTask"

使用行号设置断点:在c文件,4208行设置断点

debugSession_MSS.breakpoint.add("mss_main.c", 4208);

3. 测试及输出

3.1 前置工作

前置工作既是将ccs_debug.bin烧写到板载QSPI FLASH,使硬件具备可在线调试的基本条件,基本操作步骤如下,亦可参考文档:Using CCS Debug for Development

设置EVM为Flashing mode,使用Uniflash软件烧写bin到板载flash

设置EVM为functional mode,并复位一次

生成适用于当前硬件芯片及仿真器的Target Configuration File (CCXML)

3.2 JavaScript脚本使用方法

将上文创建的ccsdebug_scripts_from_workspace.js脚本文件以及CCS TARGET CONFIGURATION FILE 放置于CCS工程路径(如C:ccs_workspace_v10IWR6843_OOB_TESTOOB_Handoff),正确设置ccsdebug_scripts_from_workspace.js脚本文件中需要加载的xer4f文件名和路径、xe674的文件名和路径。

在CCS中,点击View-> Scripting Console,打开Scripting Console窗口,在窗口中输入loadJSFile "C:ccs_workspace_v10IWR6843_OOB_TESTOOB_Handoff ccsdebug_scripts_from_workspace.js" 并敲击回车,运行脚本。

脚本运行过程中,会在Scripting Console窗口中输出运行状态的打印信息,成功运行的打印信息如下,即成功运行脚本,并开始调试。

js:> loadJSFile "C:ccs_workspace_v10IWR6843_OOB_TESTOOB_Handoffccsdebug_scripts_from_workspace.js"

Starting Debug session...

Debug session R4F...

Connecting to R4F Core...

Done.

Debug session C674x...

Connecting to C674x Core...

Done.

Loading program - C674x...

Done.

Loading program - R4F...

Done.

Running DSS core...

Running R4F core...

3.3 CCS调试

通过脚本加载固件后,程序正确运行,断点陆续停在MmwDemo_initTask函数调用位置及mss_main.c文件->4208行位置。SDK3.5 out-of-box demo成功运行后的打印信息如下:

[Cortex_R4_0] Debug: Launched the Initialization Task

Debug: mmWave Control Initialization was successful

Debug: mmWave Control Synchronization was successful

[C674X_0] Debug: DPM Module Sync is done

[Cortex_R4_0] Debug: CLI is operational

Debug: Sending rlRfSetLdoBypassConfig with 0 0 0

============ Heap Memory Stats ============

Size Used Free DPCUsed

System Heap(TCMB) 32768 27896 4872 2048

L3 786432 131072 655360

localRam(TCMB) 4096 512 3584

============ Heap Memory Stats ============

Size Used Free DPCUsed

System Heap(L2) 32768 16112 16656 0

L3 786432 8192 778240

localRam(L2) 50176 15016 35160

localRam(L1) 16384 5632 10752

Starting Sensor (issuing MMWave_start)

4. 总结

本文介绍了使用Debug Server Scripting以及JavaScript脚本对毫米波雷达SOC进行调试的步骤及使用方法介绍,用户可以较为方便的使用此脚本节省调试过程中的固件加载等步骤耗费的时间,更高效的对毫米波雷达SOC进行调试。本文覆盖了使用Debug Server Scripting进行在线调试的基本入门介绍,包含了如何创建和运行简单的DSS脚本,以及如何在DSS脚本中设置断点简化调试,用户可参考Debug Server Scripting用户指南获得更多进阶功能的介绍。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2526

    文章

    48093

    浏览量

    740062
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7682

    浏览量

    344361
  • 毫米波雷达
    +关注

    关注

    105

    文章

    951

    浏览量

    63298
收藏 人收藏

    评论

    相关推荐

    ModelSim快速上手指南

    ModelSim快速上手指南
    发表于 08-16 17:14

    资料推荐:nRF51822上手指南

    nRF51822上手指南
    发表于 06-12 13:48

    请问哪位大神可以分享一下适用于AM1808的用户指南吗?

    .com/index.php/Flash_v1.3_User_Guide)适用于AM1808吗?或者它只是AM37xx 和OMAP35xx系列的用户指南
    发表于 06-07 07:49

    如何适用于Linux的Wrapper Xilinx脚本

    将#!/ bin / sh更改为#!/ bin / bash,如第3点所示。我认为如果你改变所需的东西,这个脚本适用于任何Linux版本的任何Xilinx版本/套件,但我想会有例外。欢迎提出建议
    发表于 11-21 14:25

    使用CCS软件的毫米波雷达传感器在线调试的方法及步骤

    及工业中都有广泛的应用。本文介绍了使用CCS软件的毫米波雷达传感器在线调试的方法及步骤,同时提供了一种基于debug server scripting脚本的自动加载实现方法,方便广大开
    发表于 11-03 07:36

    ModelSim快速上手指南

    ModelSim快速上手指南 快速上手四部曲:建立Project、引進HDL Files、Compile、模擬(Simulate/Loading and Run)
    发表于 05-08 17:29 0次下载

    适用于MPLAB® X IDE的MPLAB REAL ICE™在线仿真器用户指南

    适用于MPLAB® X IDE的MPLAB REAL ICE™在线仿真器用户指南
    发表于 05-25 17:29 33次下载

    适用于TI mmWave sensorCCS在线调试脚本教程

    集成度高,成本低,开发简单等优点,在汽车及工业中都有广泛的应用。本文介绍了使用CCS软件的毫米波雷达传感器在线调试的方法及步骤,同时提供了一种基于debug server scripting
    的头像 发表于 06-30 17:01 3025次阅读

    适用于TI mmWave sensor单芯片SOC平台的连续波点频模式设置方法

    适用于TI mmWave sensor单芯片SOC平台的连续波点频模式设置方法
    发表于 10-28 11:59 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>TI</b> <b class='flag-5'>mmWave</b> <b class='flag-5'>sensor</b>单芯片SOC平台的连续波点频模式设置方法

    适用于TI mmWave sensorCCS在线调试脚本上手指南

    适用于TI mmWave sensorCCS在线调试
    发表于 10-28 11:59 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>TI</b> <b class='flag-5'>mmWave</b> <b class='flag-5'>sensor</b>的<b class='flag-5'>CCS</b><b class='flag-5'>在线</b><b class='flag-5'>调试</b><b class='flag-5'>脚本</b><b class='flag-5'>上手指南</b>

    适用于TI mmWave sensor平台的配置随启动加载的方式

    适用于TI mmWave sensor平台的配置随启动加载的方式
    发表于 10-28 11:59 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>TI</b> <b class='flag-5'>mmWave</b> <b class='flag-5'>sensor</b>平台的配置随启动加载的方式

    RT-Thread文档_Nordic BSP 上手指南

    RT-Thread文档_Nordic BSP 上手指南
    发表于 02-22 18:26 7次下载
    RT-Thread文档_Nordic BSP <b class='flag-5'>上手指南</b>

    RT-Thread文档_其他开发板 上手指南

    RT-Thread文档_其他开发板 上手指南
    发表于 02-22 18:27 0次下载
    RT-Thread文档_其他开发板 <b class='flag-5'>上手指南</b>

    适用于TI mmWave sensor单芯片SOC平台的连续波点频模式设置方法

    TI mmWave sensor是高集成度的毫米波雷达传感器SOC,在开发过程中,SDK及TI DEMO均使用灵活的UART接口发送CLI命令进行射频参数配置及相关算法参数的配置。对于
    的头像 发表于 03-15 10:45 1340次阅读
    <b class='flag-5'>适用于</b><b class='flag-5'>TI</b> <b class='flag-5'>mmWave</b> <b class='flag-5'>sensor</b>单芯片SOC平台的连续波点频模式设置方法

    适用于MPLAB X IDE的MPLAB REAL ICE在线仿真器用户指南

    电子发烧友网站提供《适用于MPLAB X IDE的MPLAB REAL ICE在线仿真器用户指南.pdf》资料免费下载
    发表于 09-25 14:46 1次下载
    <b class='flag-5'>适用于</b>MPLAB X IDE的MPLAB REAL ICE<b class='flag-5'>在线</b>仿真器用户<b class='flag-5'>指南</b>