在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一種可以快速將CFG文件參數固化到應用代碼中的實現方式

德州儀器 ? 來源:德州儀器 ? 作者:德州儀器 ? 2022-02-15 13:36 ? 次閱讀

TI mmWave sensor是高集成度的毫米波雷達傳感器SOC,在開發過程中,SDK及TI DEMO均使用靈活的UART接口發送CLI命令進行射頻參數配置及相關算法參數的配置。對于量產及或者有固化參數的產品而言,將參數固化在代碼中會是一項明確的需求。本文介紹一種可以快速將CFG文件參數固化到應用代碼中的實現方式,同時支持原有串口的CLI配置,無需修改SDK驅動層代碼,可方便快捷的完成參數的固化。

本文的測試環境如下:

  • 此方法適用器件型號:I/AWR1443, I/AWR1642, I/AWR1843, I/AWR6843
  • 本文測試軟件版本:mmWave SDK 3.5.0.4
  • 本文測試硬件平臺:IWR6843ISK EVM

1. 運行SDK mmWave sensor demo的流程及對外接口說明

在現有的TI mmWave SDK及TOOLBOX相關的示例代碼中,均使用兩個串口進行參數的配置及數據的獲取,EVM板載的TM4C MCU是一個板載XDS110仿真器仿真器自帶兩路串口,可以直接完成SDK DEMO中的參數配置及數據輸出。在客制化產品中,可以使用外部的2個USB<->UART橋接線纜進行調試,兩個串口的默認使用情況如下:

一種可以快速將CFG文件參數固化到應用代碼中的實現方式

配置命令口:Application/User Uart: Configuration port 115200bps: UART_RX/TX port <-> USB-UART cable <-> PC

數據口:Auxilliary Data Port: Data port 921600bps: MSS_LOGGER-> USB-UART cable -> PC

mmWave sensor的啟動配置流程

2. 修改CLI參數以調整mmWave sensor 的配置參數

以SDK內的Out of Box demo為例,將BIN文件(比如:.\mmwave_sdk_\packages\ti\demo\xwr68xx\mmw\xwr68xx_mmw_demo.bin)燒寫至板卡后,啟動后,需要通過GUI下發CFG配置(比如:.\mmwave_sdk_\packages\ti\demo\xwr68xx\mmw\profiles\profile_2d.cfg),成功將配置加載后,IWR6843雷達芯片及開始射頻發波及目標探測的工作。CFG文件各項配置具體信息在mmWave SDK user’s guide中有詳細描述(文檔路徑:.\mmwave_sdk_\docs\mmwave_sdk_user_guide.pdf),通過CLI參數的配置,可靈活修改雷達的RF參數及信號處理的參數,方便調試工作的進行。

對于Toolbox內的demo,則需要同時參考SDK user’s Guide 及toolbox內的demo guide,其配置文件有SDK通用的部分,也有屬于此demo獨有的配置命令,包含SDK參數、目標檢測層的參數、追蹤器層的參數,示例如下(.\mmwave_industrial_toolbox_4_9_0\labs\people_counting\68xx_3D_people_counting\chirp_configs\AOP_6m_default.cfg):

% SDK Parameters

% See the SDK user's guide for more information

% "C:\ti\mmwave_sdk_[VER]\docs\mmwave_sdk_user_guide.pdf"

sensorStop

flushCfg

dfeDataOutputMode 1

channelCfg 15 7 0

adcCfg 2 1

adcbufCfg -1 0 1 1 1

lowPower 0 0

% Detection Layer Parameters

% See the Detection Layer Tuning Guide for more information

% "C:\ti\mmwave_industrial_toolbox_[VER]\labs\people_counting\docs\3D_people_counting_detection_layer_tuning_guide.pdf"

profileCfg 0 60.75 30.00 25.00 59.10 394758 0 54.71 1 96 2950.00 2 1 36

chirpCfg 0 0 0 0 0 0 0 1

chirpCfg 1 1 0 0 0 0 0 2

chirpCfg 2 2 0 0 0 0 0 4

frameCfg 0 2 96 0 55.00 1 0

dynamicRACfarCfg -1 4 4 2 2 8 12 4 8 5.00 8.00 0.40 1 1

staticRACfarCfg -1 6 2 2 2 8 8 6 4 8.00 15.00 0.30 0 0

dynamicRangeAngleCfg -1 0.75 0.0010 1 0

dynamic2DAngleCfg -1 1.5 0.0300 1 0 1 0.30 0.85 8.00

staticRangeAngleCfg -1 0 8 8

antGeometry0 -1 -1 0 0 -3 -3 -2 -2 -1 -1 0 0

antGeometry1 -1 0 -1 0 -3 -2 -3 -2 -3 -2 -3 -2

antPhaseRot 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

fovCfg -1 70.0 20.0

compRangeBiasAndRxChanPhase 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

% Tracker Layer Parameters

% See the Tracking Layer Tuning Guide for more information

% "C:\ti\mmwave_industrial_toolbox_[VER]\labs\people_counting\docs\3D_people_counting_tracker_layer_tuning_guide.pdf"

staticBoundaryBox -3 3 0.5 7.5 0 3

boundaryBox -4 4 0 8 0 3

sensorPosition 2 0 15

gatingParam 3 2 2 2 4

stateParam 3 3 12 500 5 6000

allocationParam 20 100 0.1 20 0.5 20

maxAcceleration 0.1 0.1 0.1

trackingCfg 1 2 800 30 46 96 55

presenceBoundaryBox -3 3 0.5 7.5 0 3

sensorStart

3. 固化CLI參數以實現芯片上電后自動加載配置

固化配置參數有幾種操作方式,如SDK文檔描述(file:///C:/ti/mmwave_sdk_03_05_00_04/packages/ti/demo/xwr68xx/mmw/docs/doxygen/html/index.html#bypassCLI),用戶可以將CFG文件中每一條都使用對應的函數調用替換。這種方式比較底層,代碼的改動量較大,但是可以節省一部分代碼空間。實現方法可參考Toolbox中提供的一個hard-coded chirp configurations的參考示例代碼,位于:.\mmwave_industrial_toolbox_4_9_0\labs\out_of_box_demo\68xx_mmwave_sdk_hcc

本文所介紹的CLI參數固化方式將保留原有的CLI串口調試的接口,同時將現有的CFG參數以CLI的格式配置進去,可視化程度高,實現更為簡單,實現方式如下。

  • 在c 增加頭文件

#include

  • 在c中增加外部結構體的定義。

extern CLI_MCB gCLI;

  • 在c中,增加如下外部函數定義。

extern void MmwDemo_Bypass_CLI (void);

  • 在c的"void MmwDemo_initTask(UArg arg0, UArg arg1)"函數中,在CLI_OPEN之后,調用” MmwDemo_Bypass_CLI”函數。

MmwDemo_Bypass_CLI();

  • 在C中增加如下配置命令及代碼。

#define CLI_BYPASS 1

#define MAX_RADAR_CMD 30

uint8_t* radarCmdString[MAX_RADAR_CMD] =

{

{"sensorStop\r\n"},

{"flushCfg\r\n"},

{"dfeDataOutputMode 1\r\n"},

{"channelCfg 15 5 0\r\n"},

{"adcCfg 2 1\r\n"},

{"adcbufCfg -1 0 1 1 1\r\n"},

{"lowPower 0 0\r\n"},

{"profileCfg 0 60 7 3 24 0 0 166 1 256 12500 0 0 158\r\n"},

{"chirpCfg 0 0 0 0 0 0 0 1\r\n"},

{"chirpCfg 1 1 0 0 0 0 0 4\r\n"},

{"frameCfg 0 1 32 0 100 1 0\r\n"},

{"guiMonitor -1 1 1 1 0 0 1\r\n"},

{"cfarCfg -1 0 2 8 4 3 0 15.0 0\r\n"},

{"cfarCfg -1 1 0 4 2 3 1 15.0 0\r\n"},

{"multiObjBeamForming -1 1 0.5\r\n"},

{"calibDcRangeSig -1 0 -5 8 256\r\n"},

{"clutterRemoval -1 0\r\n"},

{"compRangeBiasAndRxChanPhase 0.0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\r\n"},

{"measureRangeBiasAndRxChanPhase 0 1. 0.2\r\n"},

{"aoaFovCfg -1 -90 90 -90 90\r\n"},

{"cfarFovCfg -1 0 0.25 9.0\r\n"},

{"cfarFovCfg -1 1 -20.16 20.16\r\n"},

{"extendedMaxVelocity -1 0\r\n"},

{"CQRxSatMonitor 0 3 4 63 0\r\n"},

{"CQSigImgMonitor 0 127 4\r\n"},

{"analogMonitor 0 0\r\n"},

{"lvdsStreamCfg -1 0 0 0\r\n"},

{"bpmCfg -1 0 0 0\r\n"},

{"calibData 0 0 0\r\n"},

{"sensorStart\r\n"}

};

static int32_t CLI_ByPassApi(CLI_Cfg* ptrCLICfg)

{

//uint8_t cmdString[128];

char* tokenizedArgs[CLI_MAX_ARGS];

char* ptrCLICommand;

char delimitter[] = " \r\n";

uint32_t argIndex;

CLI_CmdTableEntry* ptrCLICommandEntry;

int32_t cliStatus;

uint32_t index, idx;

uint16_t numCLICommands = 0U;

/* Sanity Check: Validate the arguments */

if (ptrCLICfg == NULL)

return -1;

/* Cycle through and determine the number of supported CLI commands: */

for (index = 0; index < CLI_MAX_CMD; index++)

{

/* Do we have a valid entry? */

if (ptrCLICfg->tableEntry[index].cmd == NULL)

{

/* NO: This is the last entry */

break;

}

else

{

/* YES: Increment the number of CLI commands */

numCLICommands = numCLICommands + 1;

}

}

/* Execute All Radar Commands */

for (idx = 0; idx < MAX_RADAR_CMD; idx++)

{

/* Reset all the tokenized arguments: */

memset ((void *)&tokenizedArgs, 0, sizeof(tokenizedArgs));

argIndex = 0;

ptrCLICommand = (char*)radarCmdString[idx];

/* Set the CLI status: */

cliStatus = -1;

/* The command has been entered we now tokenize the command message */

while (1)

{

/* Tokenize the arguments: */

tokenizedArgs[argIndex] = strtok(ptrCLICommand, delimitter);

if (tokenizedArgs[argIndex] == NULL)

break;

/* Increment the argument index: */

argIndex++;

if (argIndex >= CLI_MAX_ARGS)

break;

/* Reset the command string */

ptrCLICommand = NULL;

}

/* Were we able to tokenize the CLI command? */

if (argIndex == 0)

continue;

/* Cycle through all the registered CLI commands: */

for (index = 0; index < numCLICommands; index++)

{

ptrCLICommandEntry = &ptrCLICfg->tableEntry[index];

/* Do we have a match? */

if (strcmp(ptrCLICommandEntry->cmd, tokenizedArgs[0]) == 0)

{

/* YES: Pass this to the CLI registered function */

cliStatus = ptrCLICommandEntry->cmdHandlerFxn (argIndex, tokenizedArgs);

if (cliStatus == 0)

{

CLI_write ("Done\n");

}

else

{

CLI_write ("Error %d\n", cliStatus);

}

break;

}

}

/* Did we get a matching CLI command? */

if (index == numCLICommands)

{

/* NO matching command found. Is the mmWave extension enabled? */

if (ptrCLICfg->enableMMWaveExtension == 1U)

{

/* Yes: Pass this to the mmWave extension handler */

cliStatus = CLI_MMWaveExtensionHandler (argIndex, tokenizedArgs);

}

/* Was the CLI command found? */

if (cliStatus == -1)

{

/* No: The command was still not found */

CLI_write ("'%s' is not recognized as a CLI command\n", tokenizedArgs[0]);

}

}

}

return 0;

}

void MmwDemo_Bypass_CLI (void)

{

if (CLI_ByPassApi(&gCLI.cfg) != 0)

{

System_printf ("Error: Unable to CLI_ByPassApi\n");

return;

}

return;

}

4. 運行測試例程

將上述代碼集成進測試程序后,mmWave sensor成功配置。將此BIN文件燒寫到EVM板卡中,可以實現上電自動配置參數及運行的功能,代碼上電自動運行功能添加成功。

CCS debug運行模式下,CCS控制臺打印信息如下:

[Cortex_R4_0] **********************************************

Debug: Launching the MMW Demo on MSS

**********************************************

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 28016 4752 2048

L3 786432 262144 524288

localRam(TCMB) 4096 512 3584

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

Size Used Free DPCUsed

System Heap(L2) 32768 16112 16656 0

L3 786432 16384 770048

localRam(L2) 50176 15272 34904

localRam(L1) 16384 5728 10656

Starting Sensor (issuing MMWave_start)

直接燒寫BIN文件到EVM板卡,串口打印信息如下:

******************************************

xWR68xx MMW Demo 03.05.00.04

******************************************

mmwDemo:/>Ignored: Sensor is already stopped

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Done

Debug: Init Calibration Status = 0x1ffe

Done

mmwDemo:/>

5. 附加說明

在部分的demo(比如3D people counting demo)中,會出現堆棧溢出導致上電后,initTask中,bypasscli配置失敗的情況,此時只需要需要適當增加此task的stacksize為4*1024,即可完成參數的配置。

/* Initialize the Task Parameters. */

Task_Params_init(&taskParams);

taskParams.stackSize = 4*1024;

gMmwMssMCB.taskHandles.initTask = Task_create(MmwDemo_initTask, &taskParams, NULL);

6. 參考資料

  • IWR6843、IWR6443 單芯片 60GHz 至 64GHz 毫米波傳感器 數據表 (Rev. D)
  • mmWave SDK: mmWave Software Development Kit http://www.ti.com/tool/mmwave-sdk
  • mmWave SDK User’s Guide: C:\ti\mmwave_sdk_03_05_00_04\docs\mmwave_sdk_user_guide.pdf
  • mmWave SDK Out of Box Demo - XWR68XX: C:/ti/mmwave_sdk_03_05_00_04/packages/ti/demo/xwr68xx/mmw/docs/doxygen/html/index.html
  • mmWave SDK Out of Box Demo - 68xx Hard-Coded Config Version User's Guide: C:/ti/mmwave_industrial_toolbox_4_9_0/labs/out_of_box_demo/68xx_mmwave_sdk_hcc/docs/mmWave_sdk_68xx_hcc_user_guide.html
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 汽車
    +關注

    關注

    14

    文章

    3810

    瀏覽量

    39314
  • AWR1443
    +關注

    關注

    0

    文章

    3

    瀏覽量

    2378
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    openocd的.cfg文件如何寫?

    各位大佬們,最近想學習下openocd的.cfg文件如何寫,各位大佬們,有什么入門學習的教程嗎?
    發表于 03-07 09:33

    代碼平臺:快速搭建與優化MES系統,提升生產效率

    、低代碼平臺概述 低代碼平臺是一種可視化的軟件高效開發平臺,它通過抽象和最小化手工編碼的方式,為開發和部署定制化應用提速。低
    的頭像 發表于 01-23 09:37 ?325次閱讀
    低<b class='flag-5'>代碼</b>平臺:<b class='flag-5'>快速</b>搭建與優化MES系統,提升生產效率

    導電線路修補福音:低溫燒結銀漿AS9120P,低溫快速固化低阻值

    的不斷進步,對于顯示屏制造材料的要求也日益嚴苛,尤其是在導電線路的修補領域,尋求一種既能高效作業又能確保高質量連接的解決方案成為了業界共同的目標。SHAREX善仁新材推出的AS9120P低溫銀漿,正是針對這
    發表于 01-22 15:24

    ? SLA立體光固化成型:實現3D打印領域高精度數字模型實體化的先鋒技術

    發明。自創造以來,便以優異的快速成型特征和高精度表現,成為了實現復雜數字模型實體化的關鍵技術。它不僅突破了制造業的傳統模具模式,還能在加速將設計概念轉變成實際產品的同時,保持產品表
    發表于 01-09 18:57

    UV光固化項高效環保的固化技術

    !UV光固化,顧名思義,就是利用紫外線(UV)光照射來進行固化的過程。這種固化方式的核心在于,紫外線能夠與特定的化學物質發生反應,從而引發
    的頭像 發表于 12-24 13:30 ?1156次閱讀
    UV光<b class='flag-5'>固化</b>:<b class='flag-5'>一</b>項高效環保的<b class='flag-5'>固化</b>技術

    UVLED光固化機:固化行業的革新力量

    快速發展的固化行業,UVLED光固化機以其獨特的優勢與特點,正逐步成為眾多企業的首選設備。今天,就讓我們起深入探討UVLED光
    的頭像 發表于 12-24 13:24 ?777次閱讀
    UVLED光<b class='flag-5'>固化</b>機:<b class='flag-5'>固化</b>行業的革新力量

    文搞懂軟核的固化、啟動和MultiBoot實現

    這也是《FPGA實現串口升級及MultiBoot》系列篇文章,作為個專題單獨出來說明。 本篇文章分為三個主題:固化、啟動和Multi
    的頭像 發表于 12-07 11:23 ?1870次閱讀
    <b class='flag-5'>一</b>文搞懂軟核的<b class='flag-5'>固化</b>、啟動和MultiBoot<b class='flag-5'>實現</b>

    ?玻璃行業:汞燈與UVLED固化機的選擇之爭

    在玻璃行業固化技術是項至關重要的工藝環節。隨著科技的進步,固化設備也在不斷升級換代,其中汞燈和UVLED固化機成為兩
    的頭像 發表于 11-08 11:16 ?489次閱讀
    ?玻璃行業:汞燈與UVLED<b class='flag-5'>固化</b>機的選擇之爭

    ?影響UVLED固化速率的多種因素

    UVLED固化技術作為一種快速固化的手段,在眾多行業中發揮著重要作用,如印刷、涂料、電子等。然而,UVLED固化速率并非
    的頭像 發表于 11-08 10:54 ?731次閱讀
    ?影響UVLED<b class='flag-5'>固化</b>速率的多種因素

    運行tas5086gui軟件后要實現低音要加載cfg文件嗎?

    請問運行tas5086gui軟件后要實現低音 要加載cfg文件嗎?能告訴我步驟嗎 ?pdf文件不怎么能看懂。謝謝了!!
    發表于 11-06 06:43

    hex可以轉成源代碼

    可以通過以下幾種方法嘗試獲取源代碼的近似形式: 反匯編 : 使用反匯編工具可以將Hex文件的機器碼轉換回匯編語言。匯編語言是
    的頭像 發表于 09-02 10:41 ?2127次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件獲取
    的頭像 發表于 09-02 10:37 ?4616次閱讀

    變流電路的換流方式有哪四

    變流電路是一種一種形式的電能轉換為另一種形式的電能的電路,廣泛應用于電力電子領域。在變流電路,換流方式
    的頭像 發表于 08-14 11:08 ?4857次閱讀

    PDF文件批量打印源代碼

    壓縮包包含可批量打印PDF文件的Python代碼可以借助PYcharm工具執行,實現多PDF文件
    發表于 08-08 14:26 ?0次下載

    一種在HLS插入HDL代碼方式

    很多人都比較反感用C/C++開發(HLS)FPGA,大家第拒絕的理由就是耗費資源太多。但是HLS也有自己的優點,除了快速構建算法外,還有個就是接口的生成,尤其對于AXI類接口,按照標準語法就
    的頭像 發表于 07-16 18:01 ?1382次閱讀
    <b class='flag-5'>一種</b>在HLS<b class='flag-5'>中</b>插入HDL<b class='flag-5'>代碼</b>的<b class='flag-5'>方式</b>
    主站蜘蛛池模板: 国产性片在线观看 | 久久精品94精品久久精品 | 中国又粗又大又爽的毛片 | 欧美zoozzooz性欧美 | 亚洲网站免费看 | 毛片在线播 | 精品一区二区在线观看 | 色六月婷婷 | 欧美日韩免费大片 | 性欧美17一18sex性高清 | 天天摸天天操天天干 | 1024 在线观看视频免费 | 亚洲精品一卡2卡3卡三卡四卡 | 黄色网址有那些 | 久久久久久久久久免免费精品 | 国产精品久久久久久久久齐齐 | 91成人免费观看 | 老熟女一级毛片 | 搜索黄色录像 | 久操视频在线观看 | 欧美97色 | 视频在线一区二区 | 天天操网站 | 人人做人人爽国产视 | 男人你懂的在线观看视频 | 日本一区二区不卡在线 | 亚洲综合亚洲综合网成人 | 午夜影院0606| 国产精品污视频 | 99pao强力打造免费高清色 | 狠狠色噜噜狠狠狠狠奇米777 | 国产小视频在线观看www | 国产亚洲精品aa在线观看 | 国产精品久久久亚洲456 | 97影院理论片在线观看 | 亚洲高清日韩精品第一区 | 欲色网站| 91极品视频在线观看 | 天天摸日日碰天天看免费 | 中文字幕va一区二区三区 | 99热色 |