本文主要是介绍AM273X毫米波演示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
介绍
毫米波演示展示了 AM273X SOC 使用毫米波 SDK(软件开发工具包)中的驱动程序的一些功能。它允许用户指定chirp配置文件并实时显示检测到的对象和其他信息。
以下是此演示功能的高级描述:
- 能够通过 UART 端口上的命令行界面 (CLI) 或通过 TI Gallery 应用程序 - 毫米波演示展示台 - 指定所需的线性调频配置文件,该应用程序允许用户通过 UART 输入端口提供各种配置文件配置,并实时显示来自另一个 UART 端口的流式检测输出,如上图所示。
- 演示目录中提供了一些示例配置文件配置,可以直接与CLI一起使用,也可以通过以下目录下的毫米波演示展示台使用:
mmw/profiles
- 进行1D、2D、CFAR、方位角和俯仰角处理,实时流出检测对象的速度和三个空间坐标(x,y,z)。该演示还可以配置为仅执行 2D 检测(速度和 x,y 坐标)。
- 除了物体检测之外,还有各种显示选项,如多普勒距离热图。
局限性
- 由于 UART 速度限制 (< 1 Mbps),帧时间受到更多限制。例如,对于 256 点FFT 距离和 16 点 FFT 多普勒的方位角和多普勒热图,传输大约需要 200 毫秒。
- 对于大多数电路板,已经观察到几厘米的范围偏差。用户可以使用距离偏置(仅在TDM中支持)和Rx通道增益/相位测量和补偿中描述的校准程序来估计其电路板上的距离偏差并进行校正。
系统执行流程
毫米波演示在 R5F (MSS) 和 DSP(DSS) 上运行。下图显示了系统执行流程:
软件任务
该演示包含以下(FreeRTOS)任务:
MSS
- MmwDemo_initTask。此任务由 main 创建/启动,是一次性活动任务,其主要功能是初始化驱动程序 (<driver>_init)、MMWave 模块 (MMWave_init)、DPM 模块 (DPM_init)、打开 UART 和其他驱动程序 (SPI) ,并创建/启动以下任务(CLI_task通过调用 CLI_open 间接启动)。
- CLI_task。此命令行界面任务提供了一个简化的“shell”界面,允许通过毫米波接口 (MMWave_config) 配置 BSS。它解析输入 CLI 配置命令,如 chirp 配置文件和 GUI 配置。解析传感器启动 CLI 命令时,将执行与启动传感器和开始处理数据路径相关的所有操作。解析传感器停止 CLI 命令时,将执行与停止传感器和停止数据路径处理相关的所有操作
- MmwDemo_mmWaveCtrlTask。此任务用于为毫米波控件提供执行上下文,它在无限循环中调用MMWave_execute API。
- mmwDemo_mssDPMTask。此任务用于为 DPM(数据路径管理器)执行提供执行上下文,它在无限循环中调用。没有向 DPM 注册的 DPC。
- mmwDemo_mssUartDataExportTask。此任务用于导出 UART 上的数据。此任务在无限循环中挂起 UartExportSemHandle,当当前帧处理和前一帧的 uart 传输完成时,将发布该任务。
DSS
- MmwDemo_initTask。此任务由 main 创建/启动,是一次性活动任务,其主要功能是初始化驱动程序 (<driver>_init) 、DPM 模块 (DPM_init) 、数据路径相关驱动程序 (EDMA、HWA、CSI) 以及创建/启动以下任务。
- MmwDemo_DPC_ObjectDetection_dpmTask。此任务用于为 DPM(数据路径管理器)执行提供执行上下文,它在无限循环中调用DPM_execute API。在此上下文中,将发生所有已注册的对象检测 DPC(数据路径链)API,如配置、控制和执行。在此任务中。当 DPC 的执行 API 生成检测到的对象和其他结果时,它们会报告给 MSS,在那里它们被传输出 UART 端口,以便使用可视化工具进行显示。
- MmwDemo_DPC_ObjectDetection_csirxTask。此任务配置 CSI 并等待来自前端的数据。必须注意的是,在转到 DPM 配置和同步之前,必须执行 CSI 配置,这是使用阻塞信号量实现的。
- MmwDemo_DPC_ObjectDetection_FrameTrigTask。此任务用于发送已收到帧启动触发器的消息,这是处理链启动的信号。这个任务基本上是一个无限循环,等待信号量。当进入 CSI 帧开始回调函数时,将发布信号量。因此,任务通过 DPM 发送帧启动触发器,从而导致处理链的启动。
数据路径
顶层数据路径处理链
顶层数据路径时序-TDM
顶层数据路径时序-DDM
数据路径处理包括将ADC样本作为输入,并生成检测到的对象(点云和其他信息),以便从UART端口传送到PC。使用 DPM 注册的对象检测 DPC 实现算法处理。从以下基于要使用的处理链的 doxygen 文档中可以看出 DPC 中处理的详细信息: ti/datapath/dpc/objectdetection/objdethwa/docs/doxygen/html/index.html
或
ti/datapath/dpc/objectdetection/objdethwaDDMA/docs/doxygen/html/index.html
移相器(DDM)
可以检查 ti/datapath/dpc/objectdetection/objdethwaDDMA/docs/doxygen/html/index.html,了解为什么在DDMA处理链中需要相移以及它们的值是多少。demo/utils/rf_parserDDMA.c 中的MmwDemo_RFParserPhaseShiftOrder 按相移值的递增顺序排列天线(如果所有天线都已启用) 例如,值 {0,1,2} 表示特定chirp的相移按以下数量级排列 - tx0ChirpPhase > tx1ChirpPhase > tx2ChirpPhase 即使用户不打算使用所有 tx 天线, 应假设所有 Tx 都已启用,则应对序号进行编程。未启用的相移值将由代码配置为 0。
请注意,在DDMA情况下,仰角天线应始终位于该阵列的末尾。基本上,必须确保相移(方位角)<相移(仰角)。因此,{0, 2, 1} 配置为 MmwDemo_RFParserPhaseShiftOrder (AM273X),因为 Tx0、Tx2 是方位角天线,而 Tx1 是仰角天线。要了解 AM273X 的天线配置,请参阅 SDK 中的 ti/board 文件夹。
DDMA优化
为了减少DDMA链的处理时间,主要进行以下优化:
- HWA/DMA/DSP 并行化。
- EDMA 轮询而不是中断。
- 在 EDMA 中使用线性传输而不是转置传输。
- 使用下一帧并行化 AoA 处理。
- 并行化 UART 数据发送下一帧。
- 方位角bin的数量从 48 个减少到 32 个。
- 禁用距离 CFAR / Sum TX。
- 在 DSP 中使用 IDMA 进行传输。
- 优化 AoA 处理的 DSP 代码。
- DDMA解调DSP代码优化。
在下一帧中并行化 AoA 处理和 UART 数据传输
如图所示,AoA 使用 DSP,而 1D 处理完全在 HWA 上完成,因此两者都可以并行化。同样,UART TX 完全在 R5F 上运行,因此它可以与 HWA 和 DSP 上的进程并行化。因此,在并行处理优化后,当前帧的 AoA 处理和 UART 传输可以与下一帧的 1D 和 2D 处理并行运行。
发送到主机的输出信息
输出数据包
带有检测信息的输出数据包通过UART每帧发送出去。每个数据包由报头MmwDemo_output_message_header_t和包含各种数据信息的 TLV 项目数组成,这些数据信息的类型以 MmwDemo_output_message_type_e 枚举。类型的数值可以在 mmw_output.h 中找到。每个 TLV 项目都包含类型、长度 (MmwDemo_output_message_tl_t) 和有效载荷信息。输出数据包的结构如下图所示。由于数据包的长度取决于检测到的对象的数量,因此它可能因帧而异。数据包的末尾是填充的,因此总数据包长度始终是 32 字节的倍数。
发送到 UART 的输出数据包结构
检测到的对象列表
类型:(MMWDEMO_OUTPUT_MSG_DETECTED_POINTS)
长度:(检测到的物体数)x(DPIF_PointCloudCartesian_t的大小)
值:检测到的对象的数组。每个检测到的对象的信息都与结构体DPIF_PointCloudCartesian_t一致。当检测到的对象数为零时,不会发送此 TLV 项目。子帧/帧中可检测到的最大对象数为 DPC_OBJDET_MAX_NUM_OBJECTS。
x、y 和 z 轴相对于传感器的方向如下图所示。
坐标几何图形
整个检测到的物体TLV结构如下图所示。
检测到的对象 TLV
距离配置文件
类型:(MMWDEMO_OUTPUT_MSG_RANGE_PROFILE)
长度:(距离FFT尺寸)x(uint16_t尺寸)
值:0th 多普勒处的剖面点数组(静止物体)。这些点表示以 Q9 格式表示的接收天线的 log2 幅度之和。
底噪配置文件(仅在 TDM 演示中发送)
类型:(MMWDEMO_OUTPUT_MSG_NOISE_PROFILE)
长度:(距离FFT尺寸)x(uint16_t尺寸)
值:这与距离配置文件的格式相同,但配置文件位于最大多普勒bin(最大速度对象)处。一般来说,对于静止场景,在最大速度下不会有物体或杂波,因此在这种速度下的距离分布代表接收机的底噪。
方位角静态热图(仅在 TDM 演示中发送)
类型:(MMWDEMO_OUTPUT_MSG_AZIMUT_STATIC_HEAT_MAP)
长度:(距离 FFT 尺寸)x(虚拟天线数量)(cmplx16ImRe_t_尺寸)
值:数组 DPU_AoAProcHWA_HW_Resources::azimuthStaticHeatMap。天线数据是复数符号,虚数第一和实数第二按以下顺序排列:
Imag(ant 0, range 0), Real(ant 0, range 0),...,Imag(ant N-1, range 0),Real(ant N-1, range 0)
...
Imag(ant 0, range R-1), Real(ant 0, range R-1),...,Imag(ant N-1, range R-1),Real(ant N-1, range R-1)
基于这些数据,静态方位角热图由主机上运行的 GUI 构建。
统计
类型:(MMWDEMO_OUTPUT_MSG_STATS )
长度:(MmwDemo_output_message_stats_t的尺寸)
值:根据MmwDemo_output_message_stats_t计时信息。请参阅下面与统计数据相关的时间图。
处理时序
注意:
1.不计算 MmwDemo_output_message_stats_t::interChirpProcessingMargin(始终设置为 0)。这是因为 1D 处理中没有 CPU 参与(仅涉及 HWA 和 EDMA),并且在处理开始(chirp事件)和 HWA-EDMA 计算结束时,如果不在每次chirp时通知 CPU,就不可能知道chirp处理中有多少裕量。在一维处理过程中,CPU 有意保持空闲状态,因为实际应用程序可能会利用这段时间执行一些后处理算法。
2.虽然报告的 MmwDemo_output_message_stats_t::interFrameProcessingTime 将属于当前子帧/帧,但 MmwDemo_output_message_stats_t::interFrameProcessingMargin 和 MmwDemo_output_message_stats_t::transmitOutputTime 将属于前一个子帧(与当前子帧的 MmwDemo_output_message_header_t::subFrameNumber 相同)或前一帧。
3.MmwDemo_output_message_stats_t::interFrameProcessingMargin 不包括 UART 传输时间(以 MmwDemo_output_message_stats_t::transmitOutputTime 的形式提供)。这样做是有意为之的,以告知用户真正的帧间处理余量,而不受 UART 等慢速传输的影响,这种传输时间可能会明显更长,例如在流出热图等调试信息时。此外,在实际的产品部署中,可能会使用更高速的接口(例如LVDS)来代替UART。用户可以使用统计信息计算包含传输开销的余量(例如,确定特定演示配置允许的最大帧速率),因为它们还包含 UART 传输时间。
CLI 命令“guMonitor”指定将在输出数据包中发送哪个 TLV 元素。CLI 命令的参数存储在结构MmwDemo_GuiMonSel_t中。
检测到的对象的侧面信息(仅在TDM演示中发送)
类型:(MMWDEMO_OUTPUT_MSG_DETECTED_POINTS_SIDE_INFO)
长度:(检测到的物体数量)x(DPIF_PointCloudSideInfo_t的大小)
值:检测到的对象端信息的数组。每个检测到的对象的侧面信息与结构 DPIF_PointCloudSideInfo_t) 一致。当检测到的对象数为零时,不会发送此 TLV 项目。
温度统计
类型:(MMWDEMO_OUTPUT_MSG_TEMPERATURE_STATS)
长度:(MmwDemo_temperatureStats_t的尺寸)
值:从雷达前端获取的详细温度报告的结构。MmwDemo_temperatureStats_t::tempReportValid 设置为返回 rlRfGetTemperatureReport 的值。如果 MmwDemo_temperatureStats_t::tempReportValid 为 0,则 MmwDemo_temperatureStats_t::temperatureReport 中的值有效,否则应忽略它们。此 TLV 与统计信息中描述的统计信息 TLV 一起发送。
距离偏置(仅在TDM中支持)和Rx通道增益/相位测量和补偿
由于电路板上天线布局的缺陷,SOC中的RF延迟等,需要校准传感器以补偿距离估计中的偏差以及接收信道增益和相位缺陷。下图说明了校准程序。
校准程序梯形图
校准过程包括以下步骤:
1.在视轴处设置一个强目标,如角反射器,距离 X 米(不建议 X 小于 50 厘米)。
2.在 .../profiles/profile_calibration.cfg 的配置文件中设置以下命令,以反映位置 X,如下所示: 其中 D(以米为单位)是 X 周围搜索峰值的窗口距离。搜索窗口的目的是让测试环境不受过度限制,例如,可能无法清除所有可能比用于校准的反射器更强的反射器。建议窗口大小至少相当于几个距离bin的距离。校准配置文件 (profile_calibration.cfg) 的一个量程bin约为 5 cm。第一个参数“1”用于启用测量。必须使用规定的配置文件 (.cfg),否则校准可能无法按预期工作(此配置文件确保所有发射和接收天线都接合以及校准所需的其他功能)。
measureRangeBiasAndRxChanPhase 1 X D
3.使用配置文件启动传感器。
4.在配置文件中,测量是启用的,因此DPC将配置为执行测量,并在其结果结构(DPC_ObjectDetection_ExecuteResult_t::compRxChanBiasMeasurement)中生成测量结果(TDM中的DPU_AoAProc_compRxChannelBiasCfg_t和DDM中的Measure_compRxChannelBiasCfg_t),测量结果在CLI端口(MmwDemo_measurementResultOutput)上以以下格式写出:
TDM: compRangeBiasAndRxChanPhase <rangeBias> <Re(0,0)> <Im(0,0)> <Re(0,1)> <Im(0,1)> ... <Re(0,R-1)> <Im(0,R-1)> <Re(1,0)> <Im(1,0)> ... <Re(T-1,R-1)> <Im(T-1,R-1)>
DDM: compRxChanPhase <Im(0,0)> <Re0,0)> <Im(0,1)> <Re(0,1)> ... <Im(0,R-1)> <Re(0,R-1)> <Im(1,0)> <Re(1,0)> ... <Im(T-1,R-1)> <Re(T-1,R-1)>
其中TX天线的顺序是,方位角TX天线之后是仰角TX天线。
有关 DPC 如何执行测量的详细信息,请参阅 DPC 文档。
现在可以将 CLI 上打印出来的命令复制并粘贴到任何配置文件中,以便进行更正。此配置将传递给 DPC,以便在角度计算期间应用补偿,详细信息可在 DPC 文档中查看。如果不需要补偿,则应给出以下命令: Above 将距离偏差设置为 0,将相位系数设置为单位,以便没有校正。请注意,这两个命令必须始终在任何配置文件中给出,通常,当校正命令为所需命令时,测量通信将被禁用。建议仅在基于帧的chirp (dfeDataOutput=1) 模式下使用 measureRangeBiasAndRxChanPhase 命令。
TDM: 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 1 0 1 0 1 0 1 0
DDM: antennaCalibParams 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 1 0 1 0 1 0 1
通过LVDS流式传输数据
LVDS流功能支持通过LVDS接口流传输硬件数据(ADC数据)和/或用户特定的软件数据。流式传输主要由 CBUFF 和 EDMA 外设完成,CPU 干预最少。流是通过 MmwDemo_LvdsStreamCfg_t CLI 命令配置的,该命令允许控制 HSI 报头、启用/禁用硬件和软件数据以及硬件数据的数据格式选择。请注意,目前仅支持不带 HSI 标头的硬件数据。硬件数据的数据格式选项包括:
- MMW_DEMO_LVDS_STREAM_CFG_DATAFMT_DISABLED
- MMW_DEMO_LVDS_STREAM_CFG_DATAFMT_ADC
当硬件数据LVDS流启用时,ADC数据将在每个线性调频事件中按chirp流传输。
1.对于硬件数据,chirp间持续时间应足以流出所需的数据量。例如,如果硬件数据格式为 ADC,并且启用了 HSI 报头(注意:此演示中未启用 HSI 报头发送),则每个chirp生成的数据总量为:
(numAdcSamples * numRxChannels * 4(复数样本大小)+ 52 [sizeof(HSIDataCardHeader_t) + sizeof(HSISDKHeader_t)] ) 四舍五入为 256 [=sizeof(HSIHeader_t)] 字节的倍数。
在配置文件配置中,us为单位的chirp时间 Tc = 空闲时间 + 斜坡结束时间。对于每个通道最大为 B Mbps 的 n 通道 LVDS,每个chirp可以发送的最大字节数 = Tc * n * B / 8,应大于每个chirp生成的数据总量,即Tc * n * B / 8 >= round-up(numAdcSamples * numRxChannels * 4 + 52, 256)。
例如,如果 n = 2,B = 600 Mbps,空闲时间 = 7 us,斜坡结束时间 = 44 us,numAdcSamples = 512,numRxChannels = 4,则违反了 7650 >= 8448,因此此配置将不起作用。如果在上面的例子中空闲时间加倍,那么我们有 8700 > 8448,所以这个配置将起作用。
2.要在硬件或软件数据包中传输的数据总量必须大于 CBUFF 要求的最小值,即 64 字节或 32 个 CBUFF 单元(这是 CBUFF 驱动程序实现中的定义CBUFF_MIN_TRANSFER_SIZE_CBUFF_UNITS)。如果违反此阈值条件,CBUFF 驱动程序将在配置过程中返回错误,演示将生成致命异常。启用 HSI 报头时,确保总传输大小至少为 256 字节,满足最小值。如果禁用 HSI 标头,则对于硬件会话,这意味着 numAdcSamples * numRxChannels * 4 >= 64。尽管 mmwavelink 允许最小 ADC 样本数为 2,但 numAdcSamples >= 64 支持该演示。因此,仅硬件情况不需要启用 HSI 标头。
实施说明
1.LVDS 实现主要存在于 mmw_lvds_stream.h 和 mmw_lvds_stream.c 中,调用在 mss_main.c 中。此外,HSI时钟初始化是在传感器首次启动时使用MmwDemo_mssSetHsiClk完成的。另请参阅@MmwDemo_BoardInit函数,了解与HSI时钟相关的寄存器配置。
2.CBUFF/LVDS 的 EDMA 通道资源与其他 EDMA 资源分配一起位于全局资源文件(mmw_res.h,请参阅硬件资源分配)中。用户数据标头和两个用户有效负载在 CBUFF 驱动程序中配置为三个用户缓冲区。因此,EDMA 的 SW 分配提供了三组 EDMA 资源,如 MmwDemo_LVDSStream_EDMAInit 的 SW 部分 (swSessionEDMAChannelTable[.]) 所示。
3.尽管 CBUFF 驱动程序配置为两个会话(HW和SW),但任何时候都只能有一个会话处于活动状态。因此,根据LVDS CLI配置以及是否高级帧,可以根据需要激活/停用硬件和软件会话。
4.CBUFF 会话 (HW/SW) 配置-创建和删除取决于首次配置后是否需要重新配置。
对于硬件会话,在子帧切换期间进行重新配置,以便为下一个子帧重新配置,但是当没有高级帧(子帧数 = 1)时,硬件配置不需要更改,因此不需要重新创建硬件会话。
5.当前版本不支持基于 SW 触发器的流式处理。
下图显示了LVDS流的时序图(该图不按比例缩放,因为实际持续时间会因配置而异)。注意:当前版本的演示不支持软件流式处理。
LVDS时序图
通过以太网流式传输数据
此演示支持使用 TCP 协议和 LwIP 堆栈通过以太网传输检测到的对象数据的简单用例。数据传输使用基于客户端-服务器的架构完成,EVM 充当客户端,PC 充当服务器。此实用程序是 TCPECHO 应用程序的修改示例,该应用程序作为 PDK 中 LwIP 的一部分提供包。有关连接和使用的详细信息,请参阅MMWAVE SDK用户指南。
实施说明
1.enet 流式处理实用程序是文件 enet_cpswconfighandler.c、enet_stream.c enet_tcpclient.c 和 tcpserver.py 文件的一部分。
2.enet_stream.c 中的 enetTask 是初始化所有组件和任务的主要任务,并通过 DHCP 为设备分配 IP 地址。
3.将 IP 分配给设备后,用户可以运行服务器应用程序 tcpserver.py 并等待连接建立。
4.命令 queryLocalIp 可以通过 CLI 返回本地 IP(EVM 获取的 IP 地址)。有关详细信息,请参阅用户指南。
5.用户将使用 CLI 通过 enetStreamCfg 命令发送本地 IP。有关详细信息,请参阅用户指南。完成此配置后,将发布信号量 EnetCfgDoneSemHandle,并建立连接(请参阅 tcpclient.c)。
6.用户将能够看到在 tcpserver.py 控制台上打印的对象数据。
7.请注意,通信端口已预先配置为“7”。
8.必须注意的是,LwIP 堆栈需要 650 kB 的额外内存 (L3 RAM),并且必须注意确保演示 L3 要求不会导致 L3 内存使用率高于可用内存。
如何绕过 CLI
重新实现文件 mmw_cli.c,如下所示:
1.MmwDemo_CLIInit应该只创建一个带有输入 taskPriority 的任务。假设该任务称为“MmwDemo_sensorConfig_task”。
2.不需要所有其他功能
3.按如下方式实现MmwDemo_sensorConfig_task:
- 填写 gMmwMssMCB.cfg.openCfg
- 填写 gMmwMssMCB.cfg.ctrlCfg
- 使用 MMWave_addProfile 和 MMWave_addChirp 函数添加配置文件和chirp
- 调用 MmwDemo_CfgUpdate 在 mmw_mss.h 中存储 CLI 配置 (MMWDEMO_xxx_OFFSET 的偏移量)
- 填写 gMmwMssMCB.objDetCommonCfg.preStartCommonCfg
- 调用MmwDemo_openSensor
- 调用MmwDemo_configSensor
- 调用MmwDemo_startSensor(可以使用辅助函数MmwDemo_isAllCfgInPendingState来了解是否提供了所有动态配置)
4.用户还可以使用 CLI 库中的 CLI_BYPASS API 直接绕过通过 UART 发送的 CLI 命令。
硬件资源分配
目标检测 DPC 需要配置 DPU 的硬件资源(HWA、EDMA)。尽管目前只需要为系统中的这一个且唯一的 DPC 分配硬件资源,但资源分区显示为演示的所有权。这是为了说明在多个 DPC 和/或演示自己的处理(即 DPC 后处理)之间分配资源的一般情况。此分区可以在 mmw_res.h 文件中看到。此文件作为编译器命令行定义传递
"--define=APP_RESOURCE_FILE="<ti/demo/am273x/mmw/mmw_resDDM.h>"
或
"--define=APP_RESOURCE_FILE="<ti/demo/am273x/mmw/mmw_resTDM.h>"
在构建演示应用程序时,在 mmw_mss.mak 和 mmw_dss.mak 中构建 DPC 源,并在需要时在目标检测 DPC 源中声明
#include APP_RESOURCE_FILE
设计说明
由于 DPM 本地队列大小的限制,对于某些 DPM 函数(如 DPM_start、DPM_stop 和某些通过 DPM_ioctl 的 DPC 控制),信号量用于在调用任务和函数MmwDemo_DPC_ObjectDetection_reportFxn之间同步。这样就不会因为 DPM 本地队列用完而导致 DPM 崩溃。下图演示了阻塞 DPM_ioctl() 函数调用的示例调用流。还显示了非阻塞DPM_ioctl以进行比较。
DPM_ioctl调用流
对于同一DPM_Report,MSS 和 DSS 上都有 DPM 报告功能。但是,不能保证两个内核之间的顺序。
内存使用情况
有关内存使用情况的信息,请参阅演示文件夹中的相应 .map 文件。
关于错误代码的说明
当演示遇到错误情况时,将生成错误代码并打印出来。错误代码被定义为负 interger。它来自以下类别:
- 驱动
- 控制模块
- 数据处理链
- 数据处理单元
- 演示
错误代码定义为(模块错误代码库 - 特定于模块的错误代码)。上述模块的基本错误代码可以在 mmwave_error.h中找到,DPC 和 DPU 的基本错误代码可以在 dp_error.h 中找到
特定于模块的错误代码在模块的头文件中指定。例子:
- UART 驱动程序错误代码在 uart.h 中定义
- DPC 错误代码在演示中使用的 DPC 中定义
毫米波模块错误代码
毫米波模块的错误代码按以下方式编码:
位(31::16) | 位(15::2) | 位 (1::0) |
毫米波误差 | 子系统错误 | 错误级别 |
- 毫米波误差在 mmwave.h 中定义
- 子系统错误是从子系统返回的,例如mmwavelink和邮箱驱动程序。
- 错误级别称为 WARNING level 和 ERROR 级别。
- mmWave 公开了一个 API - MMWave_decodeError(),可在演示中用于解码错误代码
这篇关于AM273X毫米波演示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!