MMWAVE SDK deep dive(1)

System Deployment

一个典型的mmWave应用程序会执行以下操作:

  1. 通过mmwave Link控制和监控射频前端
  2. 通过标准外设进行外部信息的传输
  3. 使用DSP对雷达数据进行处理

典型的mmWave传感器客户部署如下图所示:

  1. MSS和DSP-SS的应用程序代码从与mmWave device(通过QSPI)连接的设备的串行闪存中下载
  2. 从远程的实体进行高水平的控制
  3. (检测到物体时)发送低速数据到远程的设备
  4. 可选的高速数据通过LVDS从设备中发出

在这里插入图片描述
上面的部署可以使用mmWave SDK和ti组件分层实现,如下图:
在这里插入图片描述

Typical mmWave Radar Processing Chain

在这里插入图片描述
上面的这个图是一个典型的mmWave雷达数据处理流程,从mmWave前端接收到ADC数据,然后执行距离和多普勒FFT,然后使用CFAR进行非相干的检测,最后,使用三维快速傅里叶变换进行角度的估计,并且被检测到的点代表着点云,这些点云数据通过使用更高层次的算法对点云数据处理,如聚类、跟踪、分类,以表示真实的世界。

使用mmWave SDK,对于以HWA或DSP为处理节点的设备,会出现如下图所示:在下图中,绿色箭头代表控制链路,红色箭头代表数据链路,蓝色的块是mmWave SDK组件,黄色的块是自定义应用程序代码。软件流/调用的层次结构通过嵌入框显示。根据更高算法的复杂性和它们的内存/mips的消耗,它们技能在mmWave设备的内部实现,也可以完全在外部处理器上实现
在这里插入图片描述

不同的设备提供不同的处理节点来实现mmWave处理,在xWR14xx有HWA引擎,xWR16xx有DSP C674x核心,xWR68xx和xWR18xx有HWA+DSP(C674x)。对于就具有多个处理节点的设备,mmWave检测处理链可以根据性能和可伸缩性的需要利用它们,下面是一个检测处理链的例子,它使用各种数据处理单元(DPUs)执行典型的mmWave处理直到点云。在mmWave设备存储器中,mmWave数据表示在不同的DPUs之间形成一个接口层。每个DPU可以使用HWA或DSP处理节点独立实现—选择是有usecase或处理节点在给定mmWave设备上的可用性驱动
在这里插入图片描述

Typical Programming Sequence

上述的处理链可以被分成两个不同的块:射频控制电路和数据路径

RF Control Path

上面处理链中的控制路径有下面的块表示:
在这里插入图片描述
下面的一组图显示了设置典型控制路径(init、config、start)的应用程序编程序列

Single RF Control(MSSRADARSS or DSSRADARSS)

在下面的这个应用中,RF控制路径在主子系统(Cortex-R4F)或DSP子系统(C674x)上运行,应用程序可以在隔离模式下简单地调用SDK中的mmwave api来实现大部分功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Co-operative RF control((MSS+DSS)<->RADARRSS)

在这种情况下,控制路径可以在“合作”模式下运行,其中RF控制API可以被任意一个域互换调换(但是需要维护API的序列)。这样的部署可以由MSS启动RF init和配置,并且在数据路径配置完成后由DSS启动。在下面的图中,控制路径完全运行在MSS上,MSS负责正确的配置雷达(RF)和DSS(数据处理)。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Data Path

mmwave检测处理可以分为以下几层应用代码,控制/管理层来操作数据处理元素,处理链将各个模块捆绑起来创建数据流,以及底层的数据处理模块和接口
在这里插入图片描述mmWave设备提供了一些选项,说明如何使用设备内的各种控制/处理节点来实现数据处理层。为了简化跨这些部署类型的编程,data path manager(DPM)为应用程序提供了一个简化的API结构,同时隐藏了任务间和处理器间通信的复杂性。从下面的图中可以看出,应用程序只需要调用各种DPM api来控制处理链(在下面的梯形图中"蓝色"中的函数调用),并在报告回调中对这些api的结果进行重新操作。数据处理链(DPCs)也通过DPM向应用程序提供了一个标准化的API结构,并使用数据处理单元(DPUs)封装了数据流的实现,同时提供了简单的基于IOCTL接口来配置和触发数据流。基于usecase和mmWave设备硬件功能,应用程序可以从以下部署中进行选择:

  1. DPC与控制核心运行在同一核上,应用程序可以在本地模式下的DPM对DPC进行控制
  2. DPC运行在与控制核心不同的另一个核上,应用程序可以通过DPM远程控制DPC
  3. DPC被一分为二,应用程序可以通过分布式的DPM方式对DPC进行控制

下面的梯形图显示了init的流程,配置两种不同形式(一种是在本地内核上启动,另一种是在远程内核上启动),启动触发器,线性调频脉冲/帧事件和停止触发器。MSS和DSS的职责的选择显示为一个可能的示例–它们的角色可以根据应用程序的需要交换,这些梯形图没有显示相应的MMWAVE/RF控制调用,以显示RF控制和数据通路控制之间的独立性,尽管如此,对于这两种形式的控件,典型的应用程序将遵循以下流程:

  1. mmWave init和DPM init(顺序无关)
  2. 用于DPC配置的mmWave配置和DPM IOCTL(顺序无关)
  3. DMP启动然后mmWave启动(注意,这是推荐的,因为在mmWave启动的实时帧/线性调频脉冲H/W事件发生之前,DPC应该处于启动状态)
  4. mmWave停止,然后DPM停止(注意,这是推荐的,因为DPC应该在实时帧/线性调频脉冲H/W事件由于mmWave停止而停止后停止)

Data processing flow with local domain control

在此部署中,运行实际数据处理链(DPC)的核心(MSS或DSS)也控制它。应用程序调用DPM api来进行init,调用数据处理IOCTL来进行配置、启动和停止。DPM使用应用程序注册的报告回调函数从DPC报告状态。应用程序为运行的DPM/DPC提供了一个执行上下文(任务)。DPC在这个执行上下文中向应用程序提供处理结果(点云、跟踪对象等)
在这里插入图片描述
在这里插入图片描述

Data processing flow with remote domain control

在这个部署中,数据处理链运行在一个选定的数据核心上,而它的控件存在于另一个核心上。控制核心和数据核心的应用代码调用DPM api来进行初始化和同步。控制核心调用数据处理IOCTL进行配置、启动和停止api。在数据核上接收H/W事件。DMP在控制核和数据核上使用应用程序注册的报告回调函数从DPC报告状态。DPC将处理结果(点云、跟踪对象等)返回到数据核心应用代码中,数据核心应用代码可以使用DPM发送结果API将结果发送到控制核心。
在这里插入图片描述
在这里插入图片描述

Distributed Data processing flow and control

在此部署中,数据处理链与控件一起在多个核之间拆分。两个核心上的应用程序代码都调用DPM api来进行初始化核同步。任何一个核心都可以调用数据处理IOCTL来进行配置、启动和停止api。在两个核上,DPM使用应用程序注册的报告回调函数从DPC报告状态。运行在一个核上的DPC的部分结果可以使用DPM relay result API传递到运行在其他核上的DPC上。DPC可以将最终的处理结果(点云、跟踪的对象等)返回到同一个核心的应用程序代码中,然后使用DPM发送结果API将结果发送到运行在其他核心上的应用程序中。下面的梯形图显示了将DPC拆分为两个核的许多方法中的一种。
在这里插入图片描述
在这里插入图片描述

参考资料:

  1. 《MMWAVE SDK User Guide》