TI的mmWave的软件架构非常复杂,附加价值很高。要想搞懂,得先死磕官方的mmWave SDK user guide。这篇文章的意义就在于让你可以快速读懂这篇UG。

UG分为6个部分:

  1. 开箱体验;
  2. 系统概况;
  3. 开搞;
  4. 如何开搞;
  5. 深度开发;
  6. 附录。

第1部分就是我们上一篇示例工程文章中提到的要准备的东西。

第2部分说SDK这个开发包分为Suite和Demo两大部分。Suite中包含了以下这些内容:

至于每个里有什么内容,起什么功能,UG这里没有给出解释。不过把本系列文章看完你就知道了。第2部分还给出了几个名词的解释:

第3部分上来先告诉你,demo工程放在了mmwave_sdk_03_03_00_03\packages\ti\demo这个路径下面,整个软件的详细说明文档(包括demo的说明文档)为mmwave_sdk_ 03_03_00_03\docs路径下的mmwave_sdk_module_documentation.html,这个文档写的非常详尽,非常好!所有关于软件架构、软件设计、驱动、算法库的详细说明都在这里面。

然后在demo工程路径下找到xwr16xx_mmw_demo.bin文件烧写到Flash中,这个在我们上一篇文章中描述过。下面是连接示例,没有DCA1000开发板(用于抓取原始回波数据)也可以。

接下来配置上位机mmWave Demo Visualizer发送配置文件,接收目标信息。当然也对DCA1000配套的上位机的使用方法进行了详细说明。

最后,也是第3部分占篇幅最多的内容:.cfg的格式说明。要配置雷达前端就要通过mmWave Link。而.cfg就是上位机发送的配置文件。mmWave Link的说明文档可以从mmwave_sdk_module_documentation.html中打开。需要配置的参数如下图所示(不局限于下图)。

第4部分先详细讲解了怎么连接串口、怎么烧写擦除Flash、如何连接JTAG调试DSP。然后说明了几个.bat文件,感觉没什么用。。。

第5部分进行深度开发,这部分才是重点。下面详细介绍。

=====================华丽的分割线=================================================

目录

5.1  软件系统部署

5.2  典型的FMCW雷达处理链

5.3  RF control path and data path

5.3.1  RF control path

5.3.2  Data path

5.3.2.1  DPC与DPM在一个核里

5.3.2.2  DPC与DPM不在一个核里


5.1  软件系统部署

一个典型的毫米波雷达应用一般都有以下操作:

  1. 通过mmWave Link来控制和监视RF前端;
  2. 通过标准总线与外部通信;
  3. 使用DSP进行雷达信号与信息处理。

软件系统架构分为3层,如下图所示。最下面灰色的是芯片内的硬件层;往上是驱动层(包括硬件驱动、操作系统、信号处理算法模块、连接链路等);再往上是API层(包括API接口、数据传输管理、EDMA、数据处理算法模块(DPU)等);最上面一层是系统应用层(包括计算结果传输、远端配置等)。

图5.1  软件架构

对软件各层进行部署(把软件架构拍扁放到一张图里),可以看出大致的数据流向,如下图所示。绿色箭头表示控制路径,红色箭头表示数据路径。蓝色的块是mmWave SDK组件,黄色的块是自定义应用程序代码。

5.2  典型的FMCW雷达处理链

典型的毫米波雷达处理接收到来自RF前端的ADC数据后,开始进行距离和多普勒FFT,然后使用CFAR进行非相参检测(这里感觉图中写错了,如果是非相参的空间维FFT怎么做,后续看代码确认),最后利用空间维FFT估计角度。得到点云数据后可以使用更高层次的算法对点云数据进行后处理,如聚类、跟踪、分类,以表示真实世界的目标。

将上图中的处理流程放到软件架构中,如下图所示。图中DPM、Higher Processing Chain在ARM中实现;Detection Processing Chain在DSP或硬件加速ASIC中实现;RF control既可以在ARM也可以在DSP中,还可以ARM、DSP一起控。

Detection Processing Chain这部分是主要的雷达信号与数据处理过程,我们把这部分展开,如下图所示。这里的内容需要结合代码来看,在下一篇文章中再介绍。本文先把UG过一遍。

5.3  RF control path and data path

5.3.1  RF control path

看上面这个图,要像剥洋葱,从外面一层层剥进去。

由ARM或DSP单独控制RF前端步骤大致分为3步:init、config、start。下面的这些图是梯形图,纵轴是时间,横轴是各个软件模块。

  • Init

  • Config

  • Start

DSP和ARM联合控制RF前端感觉没有应用场景,还很麻烦,这里就跳过了。

5.3.2  Data path

我们把雷达数据的主处理流程单独摘出来看,其层次结构如下图所示,主要位于整个软件架构(图5.1)的第二层(API层)。

DPM为应用程序提供了一个简化的API结构,同时隐藏了任务间和处理器间通信的复杂性。从下面的图中可以看出,应用程序只需要调用各种DPM APls来控制处理链(在下面的梯形图中的“蓝色”中看到的函数调用),并在报告回调中对这些APls的结果进行重新操作。数DPCs也通过DPM向应用程序提供了一个标准化的API结构,并使用DPUs封装了数据流的实现,同时提供了简单的基于IOCTL的接口来配置和触发数据流。

将此处理流程层次实现时,有3种不同的部署。这其实是一个多核间部署的问题。

  1. DPC与DPM在一个核里;
  2. DPC与DPM不在一个核里,DPC在DSP中,DPM在ARM中;
  3. DPC分布在两个核里;

以上这三种情况,都可以通过DPM来控制DPC。

部署问题说完,还有初始化问题,软件的运行顺序如下:

  1. mmWave初始化、DPM初始化;
  2. mmWave配置、DPM通过IOCTL接口配置DPC;
  3. DPM启动;
  4. mmWave启动;
  5. mmWave停止;
  6. DPM停止;

5.3.2.1  DPC与DPM在一个核里

mmWave(即RF前端控制)的流程不在下图中展示,5.3.1节已介绍过。下面的图单独摘出了Data path的软件流程。

5.3.2.2  DPC与DPM不在一个核里

比较发现,不在一个核中时,多了IPC1链路,多了同步的一个步骤。DPC分布在不同的核中的情况比较鸡肋(应当是有硬件加速时才会考虑)也比较复杂,这里就略过了。

注1:IPC(Inter-Process Communication,进程间通信)。

本次就先更新到这里,下一篇软件架构的文章直接从5.4开始。

《TI单芯片毫米波雷达软件架构研究(二)》在专栏 “TI单芯片毫米波雷达代码走读” 中。

TI单芯片毫米波雷达软件架构研究(一)相关推荐

  1. TI单芯片毫米波雷达1642代码走读(〇)——总纲

    前言 近年来,自动驾驶行业发展如火如荼,雷达技术也逐渐从军工封闭圈走向了开放的市场. 毫米波雷达具有全天候探测能力,特别是在雨雪雾天气以及夜间都能可靠工作,并且探测距离相对其他车载传感器非常远,对运动 ...

  2. TI单芯片毫米波雷达代码走读(二十五)—— 角度维(3D)处理流程

    专栏目录链接: TI单芯片毫米波雷达1642代码走读(〇)--总纲 我们从今天开始进入近的篇章--3D处理 毫米波雷达信号处理的3个维度: 第一维度:距离 第二维度:多普勒 第三维度:角度 第二维度知 ...

  3. TI单芯片毫米波雷达代码走读(十五)—— 多普勒维(2D)处理之雷达参数与MATLAB仿真

    我们进入2D处理之前有几个雷达参数要知道,先回顾一下<TI单芯片毫米波雷达代码走读(八)-- 距离维(1D)处理之雷达参数>,由于2D处理要检测动目标,我们把配置参数重新修改如下图所示: ...

  4. TI单芯片毫米波雷达xWR1642开箱例程

    1. 准备工作 今天我们来运行一个开箱例程,需要准备的东西有: 开发板.电源(3A以上).电脑.数据线: 上位机界面:mmWave Demo Visualizar上位机界面(网页版或.exe),用于接 ...

  5. TI单芯片毫米波雷达代码走读(八)—— 距离维(1D)处理之雷达参数

    今天我们通过"mmWave_Demo_Visualizer 3.1.0"上位机发送的.cfg文件来介绍1D处理时需要关心的几个雷达参数.按上一篇文章最后的步骤,我们生成了.cfg文 ...

  6. TI单芯片毫米波雷达代码走读(十一)—— 距离维(1D)处理之直流去除

    chirp内处理void MmwDemo_interChirpProcessing()函数最后有这样两行代码: if(obj->cliCfg->calibDcRangeSigCfg.ena ...

  7. TI单芯片毫米波雷达代码走读(十)—— 距离维(1D)FFT

    上一期我们用MATLAB对加窗后的距离维数据进行了FFT处理看到了目标和目标距离,这一期我们看看C代码是如何做FFT的,回顾一下1D处理的函数代码: /*** @b Description* @n* ...

  8. TI单芯片毫米波雷达代码走读(十三)—— 多普勒维(2D)处理之核心函数

    今天我们来看看2D处理的核心函数:void MmwDemo_interFrameProcessing(MmwDemo_DSS_DataPathObj *obj),代码如下,先大致浏览一下. /*** ...

  9. TI单芯片毫米波雷达代码走读(六)—— 距离维(1D)处理 C代码实现之加窗处理

    上一篇文章,我们拿MATLAB走了一遍1D处理的流程,这一期我们来看看C代码如何实现的,首先回顾一下void MmwDemo_interChirpProcessing()函数,代码如下: /*** @ ...

最新文章

  1. 我在大学主修计算机 英语,托福雅思英语: 我在大学主修计算机
  2. Linuxmint 美化之路
  3. mybatis-01
  4. poj1836——dp,最长上升子序列(lis)
  5. 怎么用itunes来打开手机软件
  6. BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )
  7. 备考OCJP认证知识点总结(四)
  8. 日历2021年日历表|2021年日历表打印版 Excel版
  9. H5点击复制按钮复制文本
  10. LabWindows/CVI与Matlab混合编程的一种实现方法
  11. 软件相貌测试准确吗,测另一半的相貌超准软件 提前了解对象的外貌
  12. 女生干前端开发个人思考
  13. 谷歌账号Gmail邮箱修改密码提示需要手机设备验证码如何处理
  14. 2018工业互联网峰会在京召开
  15. Java实现银行卡号校验
  16. excel怎么设置打印区域_如何设置打印预览,Excel打印功能介绍
  17. 安卓最牛教材!2021大厂Android面试经历,吐血整理
  18. Python制作的赛车小游戏源代码,逆行飙车
  19. 猜数字游戏C++代码
  20. Windows PC上创建大数据职业技能竞赛实验环境之七--疑难问题

热门文章

  1. 语义化HTML:ul、ol和dl
  2. mysql中查找出生日期_如何在MySQL中根据出生日期记录显示日期名称?
  3. 查询各学生的年龄-- 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
  4. Docker_学习笔记
  5. 数据运营-计算留存率和转化率(漏斗分析Python)
  6. Android 发送彩信
  7. 纯css制作遮罩层特效
  8. “网红”白鸦创立6年的有赞,为何不敌同样诞生于微信生态3年的拼多多?
  9. 事关ChatGPT账号封禁的强烈忠告
  10. Verilog 综合练习 电子钟的实现