TI AWR雷达芯片EDMA与ADC Buffer数据传输配置详解

1. 项目概述:雷达数据流中的“搬运工”与“中转站”

在毫米波雷达的信号处理链路里,数据从模拟域被ADC采样,变成数字信号后,其旅程才刚刚开始。这些海量的原始数据(以TI AWR系列芯片为例,每个接收通道每秒可能产生数百兆甚至上亿的采样点)必须被高效、无误地从采集点搬运到处理单元(如DSP)或输出接口。如果让CPU来一个个字节地搬运,它很快就会不堪重负,整个系统的实时性将无从谈起。这时,两个关键的硬件模块就登场了:增强型直接内存访问(EDMA)ADC缓冲器(ADC Buffer)。你可以把它们理解为一个高度自动化的物流系统:ADC Buffer是紧邻工厂(ADC)的临时仓库(乒乓缓冲区),负责暂存刚下线的“原料”(ADC采样数据);而EDMA则是智能无人搬运车(AGV)系统,它根据预设的路线图(参数集),精准地将仓库里的原料打包、运输到下一个加工车间(如CBUFF,再通过LVDS/CSI-2发出去)。

我接触过不少基于AWR芯片的雷达项目,初期调试的难点往往就卡在数据流不通上。明明ADC在正常工作,DSP却收不到数据,或者收到的数据错位、丢失。十有八九,问题出在EDMA和ADC Buffer的配置细节没吃透。这份手册里零散的寄存器描述,恰恰是解开这些谜团的关键钥匙。本文就将以TI AWR雷达芯片为背景,为你深入拆解EDMA如何与ADC Buffer协同工作,构建起一条可靠的高速数据传输通道。无论你是正在调试底层驱动的工程师,还是希望深入理解雷达SoC数据架构的开发者,这些从实际项目中踩坑总结出的细节与原理,都将为你提供直接的参考。

2. EDMA核心机制深度解析:不止于“搬运”

很多人对DMA的理解停留在“代替CPU搬数据”的层面,但对于TI的EDMA,尤其是其与雷达数据流结合的用法,这远远不够。它的精髓在于其参数化多维传输能力,能够以极小的CPU开销,处理雷达信号这种具有天然多维结构(啁啾数 x 采样点数 x 接收通道数)的数据。

2.1 参数集(Parameter Set)与寄存器组:传输的“蓝图”

EDMA的每一次传输都不是简单的“从A地址到B地址复制N个字节”。它由一套完整的参数集(PaRAM Set)定义,这套参数在传输开始前由CPU写入,之后EDMA控制器便据此自主工作。手册中提到的EDMA_TPTC_SACNTRLDEDMA_TPTC_DFOPT等寄存器,正是这些参数在传输控制器(TPTC)中的映射或状态反映。

关键概念:A-CNT, B-CNT, B-IDX这是理解EDMA多维传输的基石。我们以一个典型的雷达数据块为例:假设我们要传输1个啁啾(Chirp)的数据,这个啁啾包含256个采样点(ADC Samples),每个采样点是16位(2字节)的复数(I/Q各16位)。

  • A-CNT(第一维计数):描述最内层、连续传输的元素大小。对于复数采样点,如果我们以uint16_t类型存储,一个复数点(I和Q)就是4个字节。但EDMA的传输单元是字节,因此ACNT通常设置为单个采样点的字节数。在这个例子里,ACNT = 4(I16 + Q16)。
  • B-CNT(第二维计数):描述有多少个这样的“A-CNT数组”需要传输。这里就是一个啁啾内的采样点数BCNT = 256
  • B-IDX(第二维索引):在完成一个A-CNT数组(即一个采样点)的传输后,源地址或目的地址需要跳过的字节数,以指向下一个数组的起点。这用于处理非连续存储的数据。例如,如果数据在内存中是通道交织的(Channel-interleaved),即所有通道的第一个采样点连续存放,然后是所有通道的第二个采样点……那么,从一个采样点切换到下一个采样点时,地址可能需要跳过其他通道的数据,这个偏移量就是B-IDX。

手册中EDMA_TPTC_SACNTRLD寄存器的ACNTRLD字段,其作用就是保存ACNT的初始值。当EDMA完成一个ACNT数组(即ACNT递减到0)的传输后,会用这个重载值自动重置ACNT计数器,以开始传输下一个数组(下一个采样点)。这是实现自动化、循环传输的关键。

2.2 源激活集与目的FIFO集:双缓冲的硬件实现

细看手册,你会发现寄存器分为SA(Source Active,源激活集)和DF(Destination FIFO,目的FIFO集)两类。这揭示了EDMA控制器内部的一个高级特性:双缓冲(Ping-Pong)或流水线操作

  • 源激活集(SA Set):这组寄存器(如EDMA_TPTC_SASRCBREF)管理着读取侧的传输状态。SASRCBREF寄存器保存着当前正在读取的数组的起始地址参考值。当完成一个B-CNT数组(即一个完整的二维数据块)传输后,EDMA会利用SBIDX(源B索引)来计算下一个数据块的起始地址。SACNTRLD则用于在每一个A-CNT数组传输完成后重载ACNT计数器。
  • 目的FIFO集(DF Set):这组寄存器(如EDMA_TPTC_DFDST,EDMA_TPTC_DFCNT)管理着写入侧的传输状态,特别是当目的端是一个FIFO或类似固定地址的硬件外设(如CBUFF的写入端口)时。DFDST保存当前写入地址,DFCNT记录剩余的A-CNT和B-CNT。DFBIDX寄存器同时包含了SBIDXDBIDX,因为对于FIFO目的模式,源地址仍然需要根据数据块结构进行跳变,而目的地址可能是在FIFO内回绕(Wrap)。

为什么需要区分?在雷达数据流中,源(ADC Buffer)的数据布局是固定的、多维的。而目的端(如CBUFF)可能期望接收一种重新打包或连续的数据流。SA集负责按源数据结构“拆包”,DF集负责按目的端要求“装包”或直接写入。这种分离提供了极大的灵活性。例如,你可以从非连续存储的ADC Buffer中读取数据,然后以连续的流形式写入CBUFF的FIFO。

2.3 关键寄存器EDMA_TPTC_DFOPT:传输行为的指挥棒

这个寄存器是配置传输行为的核心。我们重点关注几个字段:

  • SAM/DAM(源/目的地址模式)
    • 0 (INCR)递增模式。每传输一个元素(由FWID定义宽度,通常等于总线宽度或元素大小),地址自动增加。这是最常见的内存到内存传输模式。
    • 1 (FIFO)FIFO模式。地址在达到一个边界(由FWID定义,例如FIFO的深度)后回绕到起始地址。这是与CBUFF等硬件FIFO接口配合的关键。当DAM设置为FIFO时,意味着EDMA将数据写入一个固定地址(FIFO的写入端口),而内部写指针由硬件管理,地址在FIFO深度内回绕。这要求FWID必须正确配置为FIFO的宽度(例如,CBUFF是128位接口,可能对应特定的FWID值)。
  • TCC/TCINTEN(传输完成代码与中断使能)TCC是一个6位代码,关联到一个特定的事件标志。当一次传输(可能是一个完整的二维块传输)完成时,如果TCINTEN使能,EDMA会触发一个中断,并且相应TCC代码对应的事件标志会被置位。这个机制用于链式触发(Chaining):一个EDMA通道的完成事件可以自动触发另一个通道的启动,从而实现复杂的、多阶段的数据搬运流水线,完全无需CPU介入。这在雷达帧-啁啾-采样点的多级数据传输中至关重要。
  • PRI(传输优先级):在多个EDMA通道同时请求时,决定仲裁顺序。高优先级的数据流(如雷达原始数据)应设置更高优先级,以确保实时性。

实操心得:在配置EDMA从ADC Buffer向CBUFF传输时,DAM通常需要设置为FIFO模式,因为CBUFF的写入端口本质上是一个硬件FIFO接口。错误地设置为INCR模式会导致数据写入错误的地址,进而引发总线错误或数据丢失。FWID的值必须参考芯片手册中关于CBUFF接口宽度的具体描述,通常与数据总线宽度(如128位)对齐。

3. ADC Buffer:雷达数据的乒乓“驿站”

ADC Buffer是雷达数据链路上的第一个数字“驿站”。它的核心设计目标是匹配ADC的持续输出速率后端处理或传输模块的突发读取速率之间的差异,并提供一个稳定的数据源给EDMA。

3.1 乒乓缓冲(Ping-Pong Buffer)机制

手册明确指出,ADC Buffer是片上内存,被组织为乒乓缓冲结构。这意味着它有两块大小相同的内存区域:Ping和Pong。

  1. 写入阶段:当ADC(或DFE数字前端)持续产生数据时,它首先写入Ping缓冲区。
  2. 切换与读取:当Ping缓冲区写满(达到预设的采样点数或啁啾数)时,硬件会自动切换Ping_Pong_Sel信号,ADC开始向Pong缓冲区写入新数据
  3. 并行操作:与此同时,EDMA可以被触发(例如通过DSS_CHIRP_AVAIL_IRQ中断),开始从已经写满的Ping缓冲区读取数据并搬运至CBUFF。
  4. 循环往复:当Pong缓冲区写满时,再次切换回Ping缓冲区写入,EDMA则从Pong缓冲区读取。

这种机制完美解决了数据生产(ADC)和消费(EDMA)的速度匹配问题,实现了零等待的连续数据流,是实时系统的经典设计。

3.2 数据写入模式:单啁啾、多啁啾与连续模式

ADC Buffer的配置非常灵活,适应不同的雷达工作模式:

  • 单啁啾模式(Single-Chirp Mode):这是最常用的模式。每个啁啾的数据写满一个Ping或Pong缓冲区后,立即产生Chirp Available中断,触发EDMA搬运该缓冲区的数据。如图13-3所示,中断和Ping/Pong选择信号在每个啁啾边界同步切换。此模式适用于需要逐啁啾处理的场景
  • 多啁啾模式(Multi-Chirp Mode):如图13-4所示,多个啁啾的数据被存储在同一个Ping或Pong缓冲区后,才产生一次中断并切换缓冲区。ADCBUFNUMCHRPPINGADCBUFNUMCHRPPONG寄存器分别配置Ping和Pong缓冲区容纳的啁啾数。此模式可以减少中断频率,适用于批处理或后端处理吞吐量较低的场景
  • 连续模式(Continuous Mode):在此模式下,ADC输出一个单频连续波(Tone)。ADCBUFSAMPCNT寄存器配置每个缓冲区容纳的采样点数(而非啁啾数)。写满指定采样点数后切换缓冲区并产生中断。此模式主要用于芯片测试和校准,而非正常的雷达测距测速。

注意事项:手册中特别用NOTE强调,Ping和Pong缓冲区的相关配置寄存器(如ADCBUFNUMCHRPPINGADCBUFNUMCHRPPONG)必须被编程为相同的值,以确保乒乓缓冲逻辑正确工作。这是一个常见的配置错误点,如果两者设置不同,会导致缓冲区大小不一致,可能引发数据覆盖或指针错乱。

3.3 数据格式:交织与非交织

雷达通常有多个接收通道(RX0, RX1, RX2, RX3)。这些通道的数据如何排列在ADC Buffer中,直接影响后续EDMA搬运的效率和DSP处理的方便性。ADC Buffer支持两种格式:

  • 交织格式(Interleaved):以“采样点”为优先单位。对于所有使能的通道,第N个采样点的所有通道数据连续存放,然后是第N+1个采样点的所有通道数据。例如,对于4通道复数模式,内存布局为:RX0_I(0), RX0_Q(0), RX1_I(0), RX1_Q(0), RX2_I(0), RX2_Q(0), RX3_I(0), RX3_Q(0), RX0_I(1), RX0_Q(1)...。这种格式有利于进行基于采样点的跨通道处理(如波束成形),因为一次可以获取所有通道的同一个采样点。
  • 非交织格式(Non-Interleaved):以“通道”为优先单位。单个通道的所有采样点连续存放,然后是下一个通道的所有采样点。如表13-3所示,RX0的所有采样点(如Sample0-7)存放在一个连续区域,接着是RX1的所有采样点,以此类推。这种格式有利于进行单通道的时域或频域处理(如FFT),因为一个通道的数据在内存中是连续的。

配置选择:通过ADCBUFCFG1.ADCBUFWRITEMODE位选择。选择哪种格式取决于你的信号处理算法。如果你的算法是先对每个通道单独做FFT(距离维),那么非交织格式更优,因为数据局部性好。如果你的算法是先做波束成形(跨通道处理),那么交织格式可能更合适。EDMA的BIDX参数需要根据你选择的格式来正确计算,以确保它能正确地跳跃到下一个数据块的起始地址。

3.4 硬件在环(HIL)与测试模式

手册还提到了两个重要的辅助功能:

  • 硬件在环(HIL):此功能允许绕过真实的ADC/DFE数据,通过DMM(数据管理模块)接口直接向ADC Buffer写入数据。通过设置DSS_REG.DMMSWINT1.DMMADCBUFWREN使能,并操作DMMADCBUFPINPONSEL来手动切换Ping/Pong缓冲区。这在系统仿真、算法验证和故障注入测试中极其有用,你可以在没有真实雷达回波的情况下,向处理链注入已知的测试数据流。
  • 测试模式:ADC Buffer内置测试模式生成器,可以产生斜坡(Ramp)测试数据。通过配置TESTPATTERNVLDCFG等寄存器,并配合ADC Buffer的连续模式,可以验证从ADC Buffer到最终LVDS输出的整个数据通路是否完好。这是硬件自检和初期软件调试的利器

4. 从ADC Buffer到高速接口:CBUFF的桥梁作用与EDMA配置实战

理解了EDMA和ADC Buffer各自的工作原理后,我们现在将它们串联起来,并引入关键角色——通用缓冲控制器(CBUFF),来看一个完整的数据流出厂流水线。

4.1 数据流全景与CBUFF的角色

如图14-1所示,CBUFF是整个高速接口(HSI)数据流的核心调度器。它本身是一个带有FIFO的从设备,EDMA向它写入数据。CBUFF负责将来自不同源(ADC Buffer、啁啾质量数据、安全监控数据等)的数据,按照LVDS帧或CSI-2数据包的格式进行打包,并管理发送时序。

CBUFF的核心价值

  1. 流量整形与缓冲:EDMA的写入速率和LVDS/CSI-2的串行输出速率可能不匹配。CBUFF内部的FIFO起到了缓冲作用,并通过流控机制(如反压)来管理EDMA的写入,防止数据丢失。
  2. 数据打包与格式化:支持将多个EDMA传输的数据(可能来自不同的物理内存区域)链接(Linklist)成一个完整的数据包进行发送。
  3. 协议封装:对于CSI-2,CBUFF会自动生成VSYNC、HSYNC等同步短包以及长包数据头。对于LVDS,它会生成包含CRC的帧结构。
  4. 自动序列控制:CBUFF有一个内置状态机,可以由硬件事件(DSS_FRAME_START_IRQ帧开始中断和DSS_CHIRP_AVAIL_IRQ啁啾可用中断)自动触发整个传输序列,实现“无人值守”的数据流。

4.2 EDMA传输参数配置实战

假设一个典型场景:将ADC Buffer(Ping缓冲区)中一个啁啾的、非交织格式的、4通道复数数据,通过EDMA搬运到CBUFF。

步骤1:确定数据布局与尺寸

  • 模式:单啁啾模式,非交织格式,4通道复数。
  • 每个采样点:复数(I/Q),假设各16位,共4字节。
  • 每个通道采样点数(ACNT维度):N = 256(假设)。
  • 通道数(BCNT维度):C = 4
  • 因此,一个啁啾总数据量 =C * N * 4字节 = 4 * 256 * 4 = 4096字节
  • 在非交织格式下,内存布局为:Ch0_Sample0, Ch0_Sample1, ..., Ch0_Sample255, Ch1_Sample0, ..., Ch3_Sample255。每个通道的数据是连续的。

步骤2:配置EDMA参数集(PaRAM)我们需要配置一个EDMA通道来完成这次传输。关键参数计算如下:

  • 源地址(SRC):ADC Buffer Ping区的起始地址(从芯片内存映射表获取)。
  • 目的地址(DST):CBUFF的从端口写入地址。注意:DAM应设置为FIFO模式,因为CBUFF是FIFO接口。
  • ACNT单个通道内,连续传输的字节数。由于是非交织格式,一个通道的所有采样点是连续存放的。所以ACNT = N * 4字节 = 256 * 4 = 1024字节。这里ACNT代表“一个数组”的大小,在这个上下文中,一个“数组”就是一个通道的所有数据。
  • BCNT:需要传输的“数组”个数。这里就是通道数,BCNT = C = 4
  • SRC BIDX:源B索引。在完成一个数组(一个通道的1024字节)传输后,源地址需要跳转到下一个通道数据的起始点。由于是非交织,通道数据是首尾相接的,所以跳转量就是上一个通道数据的大小。SRC_BIDX = ACNT = 1024字节
  • DST BIDX:目的B索引。由于目的端是CBUFF的FIFO,我们期望所有通道的数据被连续地写入FIFO,形成一个大的数据块。因此,在完成一个通道数据的写入后,目的地址不应跳跃(在FIFO模式下,地址是回绕的,但数据是连续压入的)。所以DST_BIDX = 0。实际上,在DAM=FIFO模式下,DBIDX可能被忽略或必须为0。
  • 传输模式SAM设置为INCR(源内存地址递增),DAM设置为FIFO
  • 链接与中断:设置TCC为一个特定事件码,并可能使能传输完成中断(TCINTEN),或者将该事件链接到触发CBUFF开始发送数据的硬件请求(DSS_CBUFF_DMA_REQ_x)。

步骤3:理解EDMA_TPTC_DFCNTEDMA_TPTC_SACNTRLD的运作

  • 传输开始时,DFCNT寄存器中的ACNTBCNT会被加载为编程值(1024和4)。
  • 每向CBUFF写入一个字节(或一个总线宽度的数据),DFCNT.ACNT递减。
  • DFCNT.ACNT减到0时,表示一个通道的数据传输完毕。此时,DFCNT.BCNT减1,并且ACNT会从DFCNTRLD寄存器(它保存了初始的ACNT=1024)中重载,以开始传输下一个通道的数据。同时,源地址会根据SRC_BIDX(1024)增加,指向下一个通道的起始地址。
  • DFCNT.BCNT也减到0时,整个传输完成,触发TCC事件。

通过这样的配置,EDMA就能自动地将非交织格式的4通道数据,从分散的存储区域(虽然在物理上是连续的,但从逻辑上是4个块)搬运到CBUFF,并组织成连续的数据流。

4.3 CBUFF Linklist配置:组装复杂数据包

一个LVDS帧或CSI-2数据包可能包含多种数据。例如,一个雷达帧的数据包可能包含:

  1. 帧头(软件定义的同步字或时间戳)。
  2. 啁啾1的ADC数据(来自ADC Buffer)。
  3. 啁啾1的质量数据(来自CQ Memory)。
  4. 啁啾2的ADC数据。
  5. 啁啾2的质量数据。
  6. ... 帧尾(CRC等)。

CBUFF的Linklist功能(图14-3)就是为了处理这种复杂情况。你可以配置多个Linklist条目(Entry),每个条目指向一个EDMA通道。当CBUFF被触发发送一个数据包时,它会按照Linklist的顺序,依次触发对应的EDMA通道进行数据传输,并将这些数据无缝地拼接成一个大的、连续的数据包发送出去。

配置流程

  1. 为帧头、每个啁啾的ADC数据、每个啁啾的质量数据分别配置独立的EDMA通道和参数集。
  2. 在CBUFF的Linklist配置表中,按顺序填入这些EDMA通道的标识符(如通道号或触发号)。
  3. 配置CBUFF的序列控制:例如,将CFG_CHIRPS_PER_FRAME设置为每帧的啁啾数。
  4. 使能硬件触发:将CBUFF的启动与DSS_FRAME_START_IRQDSS_CHIRP_AVAIL_IRQ关联。

这样,当一帧开始时,CBUFF状态机启动,发送帧头(Linklist条目0),然后等待第一个啁啾可用中断。中断到来后,依次触发搬运啁啾1 ADC数据和质量数据的EDMA通道(Linklist条目1和2),数据自动拼接并发送。如此循环,直至完成一帧所有啁啾的发送。

5. 调试技巧与常见问题排查

在实际项目中,配置这套数据流时难免会遇到问题。以下是一些基于经验的排查思路和技巧:

5.1 数据流不通的排查清单

现象可能原因排查步骤与解决方法
EDMA根本不启动1. EDMA通道未使能。
2. 触发源(Trigger Source)配置错误。
3. 事件被屏蔽(EER寄存器)。
4. 参数集(PaRAM)链接错误或地址无效。
1. 检查ER(使能寄存器)对应位。
2. 核对TRIGGER寄存器映射,确认触发源(如DSS_CHIRP_AVAIL_IRQ)是否正确绑定到EDMA通道。
3. 检查EER(事件使能寄存器)和ECR(事件清除寄存器),确保事件未被误清除或屏蔽。
4. 使用调试器查看PaRAM表内容,确认源/目的地址、CNT、BIDX值是否合理,特别是地址是否在可访问的内存空间。
EDMA启动但传输不完整或数据错乱1.ACNT/BCNT计算错误。
2.BIDX设置错误,导致地址跳变不对。
3. 源/目的地址模式(SAM/DAM)配置错误,特别是目的端为FIFO时未设FIFO模式。
4. FIFO宽度(FWID)配置与硬件接口不匹配。
5. 数据传输与消费速度不匹配,导致FIFO溢出或下溢。
1. 重新计算数据尺寸。牢记ACNT最内层连续传输的字节数
2. 根据数据在内存中的布局(交织/非交织)精确计算BIDX。画出内存布局图辅助计算。
3.重点检查EDMA_TPTC_DFOPT寄存器的DAM,向CBUFF等硬件FIFO写必须设为FIFO
4. 查阅芯片数据手册,确认CBUFF等外设的接口位宽,正确设置FWID
5. 检查CBUFF的FIFO状态位或中断,看是否有溢出错误。调整EDMA传输的优先级或速率。
ADC Buffer中断已产生,但CBUFF未发送数据1. CBUFF未使能或模式选择(LVDS/CSI-2)错误。
2. CBUFF的硬件触发(DSS_CHIRP_AVAIL_IRQ)未正确映射或使能。
3. CBUFF Linklist配置为空或错误。
4. CBUFF等待EDMA的数据,但对应的EDMA请求DSS_CBUFF_DMA_REQ_x未正确连接。
1. 检查CONFIG_REG_0.CFG_ENCFG_1LVDS_0CSI
2. 检查CONFIG_REG_0中软件触发是否误使能,覆盖了硬件触发。确认硬件事件路由正确。
3. 检查CBUFF的Linklist寄存器数组,确认条目数量和非空。
4. 核对EDMA参数集中设置的TCC码,是否与CBUFF Linklist条目中配置的DMA请求号匹配。
数据能发送,但内容错误(如通道数据错位)1. ADC Buffer的数据格式(交织/非交织)配置与EDMA参数不匹配。
2. ADC Buffer的通道使能位(RXxEN)与EDMA搬运的数据量不匹配。
3. 数据格式(实数/复数,I/Q交换)配置错误。
1.这是最常见的问题之一。确保ADCBUFCFG1.ADCBUFWRITEMODE与EDMA参数集中ACNTBIDX的计算基于同一种格式假设。
2. 如果只使能了2个RX通道,但EDMA按4通道搬运,就会读到无效数据。确保BCNT与使能的通道数一致。
3. 检查ADCBUFCFG1.ADCBUFREALONLYMODEADCBUFIQSWAP,确保与后端处理期望的格式一致。
LVDS/CSI-2输出有数据但CRC错误或同步丢失1. CBUFF数据打包格式(DATA16/14/12)与实际数据位宽不匹配。
2. CBUFF Linklist中各个数据块的长度总和与配置的数据包长度不符。
3. 时钟或时序配置问题。
1. 确认ADC数据是12/14/16位,并相应设置CBUFF的DATAx格式。
2. 检查每个EDMA通道传输的字节数之和,是否等于CBUFF为LVDS帧/CSI-2长包配置的载荷长度。
3. 检查HSI相关时钟源、分频器配置,确保其符合接口规范要求的速率。

5.2 实用调试技巧

  1. 从简单开始:先用测试模式(Test Pattern Generator)向ADC Buffer灌入已知的、简单的数据(如递增的斜坡),配置EDMA将其搬运到一块简单的内存(如L3 RAM),而不是CBUFF。用调试器查看目标内存的数据是否正确。这可以隔离ADC Buffer和EDMA的问题。
  2. 利用EDMA完成中断:在初期调试时,使能EDMA传输完成中断。在中断服务程序里设置标志或打印信息,确认每次传输确实完成了。同时,可以读取EDMA_TPTC_DFCNT等寄存器,确认ACNTBCNT是否已归零。
  3. 内存查看器是你的朋友:熟练使用CCS或其它调试工具的内存查看器(Memory Browser)。直接查看ADC Buffer物理地址的内容,验证数据是否按预期写入。查看CBUFF的FIFO状态寄存器或目的内存区域,验证数据是否被正确搬运。
  4. 分步验证CBUFF:先配置CBUFF以软件触发模式工作,手动触发一次传输,看LVDS/CSI-2是否有输出。然后再切换到硬件触发模式,并与EDMA联动。
  5. 关注ECC与安全错误:手册中提到ADC Buffer和CBUFF都有ECC功能。如果使能了ECC,在读取数据时发生多位错误可能会触发安全错误中断(如DSS_CBUFF_ECC_FATAL_ERR)。在调试阶段,可以考虑暂时禁用ECC,或者仔细检查内存访问的地址对齐(许多ECC要求特定的对齐方式)。

配置TI AWR雷达芯片的EDMA与ADC Buffer数据传输,是一个对细节要求极高的过程。它要求工程师不仅理解每个寄存器的位定义,更要透彻理解数据在整个链路上的流动形态。从ADC采样的那一刻起,数据经过Buffer的暂存、EDMA的精心搬运、CBUFF的格式化打包,最终通过高速接口送出,每一个环节的配置都必须严丝合缝。这份手册提供的寄存器描述是地图,而真正的路线需要你根据实际的数据结构和系统需求来规划。希望这篇深入的解析,能帮你理清思路,少走弯路,构建起稳定高效的雷达数据高速公路。