电子说
TI mmWave sensor毫米波雷达传感器是高集成度的毫米波雷达传感SOC,将中射频电路,VCO,ADC,DSP 和硬件加速器集成在单颗芯片内,它具有集成度高,成本低,开发简单等优点,在汽车及工业中都有广泛的应用。本文介绍了使用CCS软件的毫米波雷达传感器在线调试的方法及步骤,同时提供了一种基于debug server scripting脚本的自动加载实现方法,方便广大开发者提高开发效率,本文的测试环境如下:
对于CCS在线调试TI的毫米波雷达芯片而言,都需要遵循以下步骤,具体的操作步骤,请参考文档:mmWave SDK out-of-box Developer's Guide 和Using CCS Debug for Development
步骤 |
说明 |
是否使用脚本 |
设置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的部分,提供一种脚本用于自动加载,节省用户操作的时间,本文涉及的脚本覆盖部分如上表描述。
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,即可打开此控制台窗口。
本文创建了一个可供在线调试使用的JavaScript脚本,示例如下,用户使用此脚本可以完成CCS在线调试的自动连接及固件加载。
脚本包含由几个部分:
// 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")
A. 以下形成可用追踪级别的子集。顺序为最低到最高(每个级别包含来自它上面的级别的所有消息):
B. 关于更多追踪细节,请参考文档的TraceLevel
// Log everything
script.traceSetConsoleLevel(TraceLevel.ALL);
script.traceSetFileLevel(TraceLevel.ALL);
script.setCurrentDirectory(PROJECT_DIR);
debugServer = script.getServer("DebugServer.1");
//CCXML file
debugServer.setConfig(CCS_TARGET_CONFIGURATION_FILE);
//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.");
//*******Run***********
debugSession_DSS.target.runAsynch();
print("Running DSS core...");
sleep(1000);//sleep 1000ms
debugSession_MSS.target.runAsynch();
print("Running R4F core...");
debugServer.stop();
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...");
在使用JavaScript脚本的过程中,可以在脚本中设置断点,常用的断点设置方法有以下三种。
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);
前置工作既是将ccs_debug.bin烧写到板载QSPI FLASH,使硬件具备可在线调试的基本条件,基本操作步骤如下,亦可参考文档:Using CCS Debug for Development
将上文创建的ccsdebug_scripts_from_workspace.js脚本文件以及CCS TARGET CONFIGURATION FILE 放置于CCS工程路径(如C:\ccs_workspace_v10\IWR6843_OOB_TEST\OOB_Handoff),正确设置ccsdebug_scripts_from_workspace.js脚本文件中需要加载的xer4f文件名和路径、xe674的文件名和路径。
在CCS中,点击View-> Scripting Console,打开Scripting Console窗口,在窗口中输入loadJSFile "C:\ccs_workspace_v10\IWR6843_OOB_TEST\OOB_Handoff\ ccsdebug_scripts_from_workspace.js" 并敲击回车,运行脚本。
脚本运行过程中,会在Scripting Console窗口中输出运行状态的打印信息,成功运行的打印信息如下,即成功运行脚本,并开始调试。
js:> loadJSFile "C:\ccs_workspace_v10\IWR6843_OOB_TEST\OOB_Handoff\ccsdebug_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...
通过脚本加载固件后,程序正确运行,断点陆续停在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)
本文介绍了使用Debug Server Scripting以及JavaScript脚本对毫米波雷达SOC进行调试的步骤及使用方法介绍,用户可以较为方便的使用此脚本节省调试过程中的固件加载等步骤耗费的时间,更高效的对毫米波雷达SOC进行调试。本文覆盖了使用Debug Server Scripting进行在线调试的基本入门介绍,包含了如何创建和运行简单的DSS脚本,以及如何在DSS脚本中设置断点简化调试,用户可参考Debug Server Scripting用户指南获得更多进阶功能的介绍。
https://software-dl.ti.com/ccs/esd/documents/users_guide/sdto_dss_handbook.html#
全部0条评论
快来发表一下你的评论吧 !