4. 雷达前端配置与原始ADC数据获取

在S32R雷达信号处理链路中,真正决定“能看到什么”的并不是后面的FFT或CFAR,而是前端MMIC的配置与原始ADC数据的获取方式。本节围绕TEF810X这类77GHz FMCW收发前端,说明如何通过SPI完成寄存器配置、如何设计chirp参数与帧结构、如何设置采样率,并在S32R上通过DMA把ADC数据稳定搬运到内存,为后续距离/速度处理提供干净的输入。

一、SPI配置MMIC:从复位到进入工作模式

TEF810X内部有大量寄存器,覆盖PLL、发射通道、接收通道、ADC、时钟与测试模式。S32R通过SPI(通常为SPI0或LPSPI实例)访问这些寄存器。工程上一般把配置拆成三段:上电与复位序列、静态寄存器表、动态chirp配置。静态表在初始化时一次性写入,动态部分在每帧开始前或chirp切换时更新。

SPI访问的基本单元是“地址+数据”。TEF810X常见为16位地址、16位数据,读写由最高位区分。下面是一段典型的寄存器写入封装(示意,非实测):

/* 向TEF810X写一个16位寄存器 */
void TEF810X_WriteReg(uint16_t addr, uint16_t data)
{
    uint32_t frame = ((uint32_t)(addr & 0x7FFF) << 16) | (data & 0xFFFF);
    LPSPI_WriteBlocking(SPI0, (uint8_t*)&frame, 4);  /* 大端发送 */
}

/* 初始化关键步骤(顺序示意) */
TEF810X_WriteReg(0x0000, 0x0001);   /* 软复位 */
DelayUs(100);
TEF810X_WriteReg(0x0010, 0x0003);   /* 使能内部LDO与参考时钟 */
TEF810X_WriteReg(0x0020, 0x0011);   /* 配置PLL参考分频 */
TEF810X_WriteReg(0x0030, 0x0007);   /* 使能TX0/TX1 */
TEF810X_WriteReg(0x0040, 0x000F);   /* 使能RX0~RX3 */
TEF810X_WriteReg(0x0050, 0x0002);   /* ADC采样率相关分频 */

实际调试时,第一步不是急着发chirp,而是读回寄存器确认SPI链路正常。若读回值与写入值不一致,优先检查片选极性、时钟相位(CPOL/CPHA)、字节序和供电。TEF810X的SPI在复位后需要等待内部LDO稳定,过早写入会被忽略,因此复位后建议延时100µs以上再继续。

二、chirp参数设计:斜率、带宽与时长

FMCW的核心是线性调频。一个chirp由起始频率f0、斜率S、带宽B和有效时长Tc决定,满足B = S × Tc。距离分辨率由带宽决定:ΔR = c / (2B)。例如B = 1GHz时,ΔR ≈ 0.15m。最大不模糊距离由采样率决定,而最大不模糊速度由chirp重复周期Tc和波长决定。

在TEF810X中,斜率通过PLL的步进与时间参数配置。常见做法是设置频率步进Δf和步进时间Δt,则S = Δf / Δt。例如Δf = 100MHz、Δt = 10µs,则S = 10MHz/µs,Tc = 100µs时B = 1GHz。这些参数需要与ADC采样率匹配:采样率fs必须大于等于B对应的中频带宽,否则会混叠。

设计顺序建议:先由距离分辨率确定B,再由最大距离确定fs,最后由速度范围确定Tc与chirp数量。三者互相约束,不能独立设定。

三、采样率与帧结构设置

ADC采样率决定了每个chirp的采样点数N。若fs = 10MHz、Tc = 100µs,则N = 1000点。帧结构通常包含:chirp数Nc、每chirp采样点数N、帧周期Tf。例如Nc = 64、N = 256、Tf = 10ms,则一帧数据量为64×256×2字节(16位ADC)×4接收通道 = 128KB。这个量级直接决定DMA搬运和内存布局。

帧结构还涉及空闲时间与chirp间间隔。若chirp之间没有足够空闲,PLL来不及稳定,会导致相位噪声恶化。工程上常在chirp间插入几微秒的settle时间,并在帧间留出处理时间。S32R的eDMA可以在帧开始时被触发,把ADC结果从MMIC的并行/串行接口搬到雷达专用SRAM。

四、S32R上的ADC采集与DMA搬运

S32R通常通过LPSPI接收或并行ADC接口获取数据。以SPI接收为例,TEF810X在chirp期间持续输出ADC样本,S32R的SPI以DMA方式接收,避免CPU逐字节搬运。配置要点包括:SPI接收FIFO阈值、DMA传输宽度(16位)、DMA源地址(SPI数据寄存器)、目的地址(雷达SRAM缓冲区)、传输长度(N×Nc×通道数)。

/* DMA搬运ADC数据的核心配置(示意) */
edma_config_t cfg;
EDMA_Init(DMA0, &cfg);
EDMA_SetChannelTransfer(DMA0, CH_ADC,
    (void*)&SPI0->RDR,          /* 源:SPI接收寄存器 */
    (void*)adc_buffer,          /* 目的:雷达SRAM */
    N * Nc * RX_CHANNELS,       /* 传输次数 */
    kEDMA_Width16Bit);
EDMA_EnableChannelRequest(DMA0, CH_ADC);
LPSPI_EnableDMA(SPI0, kLPSPI_RxDmaEnable);

搬运完成后,DMA产生传输完成中断,CPU在中断中置位帧就绪标志,通知后续处理任务。判断数据是否正常,可以观察三个点:一是DMA完成中断是否按帧周期稳定触发;二是缓冲区首尾样本是否有明显截断;三是用已知单音测试时,ADC数据的频谱峰值是否落在预期中频位置。

TEF810X配置与ADC数据搬运链路 S32R MCU SPI主机 LPSPI0 eDMA CH_ADC 雷达SRAM adc_buffer CPU中断 帧就绪标志 后续处理任务 TEF810X MMIC SPI从机 寄存器组 PLL + 斜率 chirp生成 TX / RX 4通道接收 ADC 16位采样 ADC数据输出 SPI写寄存器(配置) SPI读回(校验) ADC样本流(16位,N×Nc×4通道) 关键参数(示例) 带宽 B = 1 GHz → ΔR ≈ 0.15 m 斜率 S = 10 MHz/µs,Tc = 100 µs 采样率 fs = 10 MHz,N = 256 Nc = 64,帧周期 Tf = 10 ms 帧结构 Chirp 1 | Chirp 2 | ... | Chirp 64 每chirp:256采样点 × 4通道 帧周期 Tf = 10 ms,帧间留处理时间 数据校验三要点 ① DMA中断按帧周期触发 ② 首尾样本无截断 ③ 单音频谱峰值正确

五、配置顺序与常见问题

推荐的配置顺序是:上电复位 → 读回ID → 写静态寄存器 → 配置PLL与chirp → 使能TX/RX → 启动DMA → 触发帧。每一步都应保留读回校验。常见问题包括:SPI时钟过高导致寄存器写入失败;chirp间settle不足导致频谱展宽;DMA传输长度与帧结构不匹配导致缓冲区错位;采样率与中频带宽不匹配导致混叠。

判断配置是否成功,最直接的方法是用已知距离的角反射器做测试。若距离谱峰值位置与理论值一致、旁瓣正常、多帧之间峰值稳定,说明前端配置与ADC搬运链路基本正确。若峰值偏移或展宽,应优先回查chirp斜率、采样率和DMA搬运长度这三个参数。

TEF810X的寄存器写入后并非立即生效,部分PLL相关寄存器需要等待锁定指示。建议在关键配置后轮询锁定状态位,而不是固定延时后直接发chirp。

把上述流程固化后,S32R就能稳定地按帧获取原始ADC数据。下一阶段的距离FFT、多普勒FFT和CFAR都将建立在这批数据的正确性之上,因此前端配置与DMA搬运的可靠性,是整个雷达信号处理链路的第一道保障。