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
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 汽车
    +关注

    关注

    15

    文章

    4043

    浏览量

    40609
  • AWR1443
    +关注

    关注

    0

    文章

    3

    浏览量

    2458
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    固化烘箱物联网数据台解决方案

    到MES系统实现集中管理。对此,数之能提供高效可靠的物联网解决方案。 现场固化烘箱主要通过西门子PLC、台达PLC等控制器进行控制,通过实现PLC数据采集数之能数据
    的头像 发表于 11-24 16:43 363次阅读
    <b class='flag-5'>固化</b>烘箱物联网数据<b class='flag-5'>中</b>台解决方案

    Labview 解析dxf文件并显示<

    Labview软件开发过程,大家会遇到导入dxf文件的需要,今天开个帖子,聊聊如何解析和显示dxf文件,同时用图表来显示。 首先来介绍下dxf, 简单来说他就是图形文件
    发表于 11-14 22:45

    代蜂鸟E203移植普通Artix7核心板IDE的cfg配置文件修改

    XC7A100T的核心板; 在调整好PL蜂鸟SoC的工程后(注释部分无效代码,适配对应时钟,修正引脚约束等),本文中不做展开。然后打开NucleiStudio,新建工程,找到工程cfg
    发表于 10-29 06:45

    芯来e203移植开发分享(二)——仿真文件简述与itcm固化程序

    运行时我们可以同观察pc值,来判断程序运行具体哪步,这也是之后重要的debug地方。 程序固化 既然tb的主要功能是固化程序,那么我们
    发表于 10-27 06:04

    突破阴影区固化难题:UV+湿气双重固化三防漆CA6001技术解析与应用指南

    本文深入探讨了UV三防漆在复杂结构PCBA应用面临的阴影区固化挑战,并重点介绍了一种创新的UV与湿气双重固化体系(CA6001)。文章将详细解析其技术原理、关键性能
    的头像 发表于 10-20 17:57 1275次阅读
    突破阴影区<b class='flag-5'>固化</b>难题:UV+湿气双重<b class='flag-5'>固化</b>三防漆CA6001技术解析与应用指南

    三防漆的固化方式

    三防漆从黏稠液体变成PCB板上的“防护铠甲”,关键在于固化过程。这种转变并非简单的“变干”,而是通过不同的化学或物理机制实现的,常见固化方式可分为三大类,适配不同场景需求。1.常温自干
    的头像 发表于 07-24 15:58 606次阅读
    三防漆的<b class='flag-5'>固化</b><b class='flag-5'>方式</b>

    STM32IDE如何设定代码ITCM运行?

    近期使用STM32MUX生成STM32IDE的代码(MCU是STM32H743),目前希望可以将部分代码定位ITCM运行,加快处理速度,
    发表于 06-24 06:45

    openocd的.cfg文件如何写?

    各位大佬们,最近想学习下openocd的.cfg文件如何写,各位大佬们,有什么入门学习的教程吗?
    发表于 03-07 09:33

    云存储控电脑,云存储控电脑如何实现文件同步?

    云电脑,作为一种新兴的计算方式,正逐渐改变着人们的数字生活体验。当你打开云电脑的那刻,仿佛进入了个全新的数字世界。简洁美观的操作界面,流畅便捷的操作体验,让你无需再为本地电脑的卡顿
    的头像 发表于 02-10 11:19 913次阅读
    云存储<b class='flag-5'>中</b>控电脑,云存储<b class='flag-5'>中</b>控电脑如何<b class='flag-5'>实现</b><b class='flag-5'>文件</b>同步?

    代码平台:快速搭建与优化MES系统,提升生产效率

    、低代码平台概述 低代码平台是一种可视化的软件高效开发平台,它通过抽象和最小化手工编码的方式,为开发和部署定制化应用提速。低
    的头像 发表于 01-23 09:37 586次阅读
    低<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 1903次阅读
    UV光<b class='flag-5'>固化</b>:<b class='flag-5'>一</b>项高效环保的<b class='flag-5'>固化</b>技术

    UVLED光固化机:固化行业的革新力量

    快速发展的固化行业,UVLED光固化机以其独特的优势与特点,正逐步成为众多企业的首选设备。今天,就让我们起深入探讨UVLED光
    的头像 发表于 12-24 13:24 1164次阅读
    UVLED光<b class='flag-5'>固化</b>机:<b class='flag-5'>固化</b>行业的革新力量

    文搞懂软核的固化、启动和MultiBoot实现

    这也是《FPGA实现串口升级及MultiBoot》系列篇文章,作为个专题单独出来说明。 本篇文章分为三个主题:固化、启动和Multi
    的头像 发表于 12-07 11:23 2909次阅读
    <b class='flag-5'>一</b>文搞懂软核的<b class='flag-5'>固化</b>、启动和MultiBoot<b class='flag-5'>实现</b>