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对应的中频带宽,否则会混叠。
三、采样率与帧结构设置
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数据的频谱峰值是否落在预期中频位置。
五、配置顺序与常见问题
推荐的配置顺序是:上电复位 → 读回ID → 写静态寄存器 → 配置PLL与chirp → 使能TX/RX → 启动DMA → 触发帧。每一步都应保留读回校验。常见问题包括:SPI时钟过高导致寄存器写入失败;chirp间settle不足导致频谱展宽;DMA传输长度与帧结构不匹配导致缓冲区错位;采样率与中频带宽不匹配导致混叠。
判断配置是否成功,最直接的方法是用已知距离的角反射器做测试。若距离谱峰值位置与理论值一致、旁瓣正常、多帧之间峰值稳定,说明前端配置与ADC搬运链路基本正确。若峰值偏移或展宽,应优先回查chirp斜率、采样率和DMA搬运长度这三个参数。
把上述流程固化后,S32R就能稳定地按帧获取原始ADC数据。下一阶段的距离FFT、多普勒FFT和CFAR都将建立在这批数据的正确性之上,因此前端配置与DMA搬运的可靠性,是整个雷达信号处理链路的第一道保障。