TI mmWave sensor毫米波雷達傳感器是高集成度的毫米波雷達傳感SOC,將中射頻電路,VCO,ADC,DSP 和硬件加速器集成在單顆芯片內,它具有集成度高,成本低,開發簡單等優點,在汽車及工業中都有廣泛的應用。本文介紹了使用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用戶指南獲得更多進階功能的介紹。
審核編輯:郭婷
-
傳感器
+關注
關注
2548文章
50664瀏覽量
751941 -
dsp
+關注
關注
552文章
7962瀏覽量
348252 -
毫米波雷達
+關注
關注
106文章
1029瀏覽量
64237
發布評論請先 登錄
相關推薦
評論