2. XENSIV传感器硬件接口与数据采集基础

XENSIV 系列传感器覆盖雷达、压力、气体、磁场、麦克风等多种类型,但它们与主控 MCU 之间的物理连接方式,基本收敛在 SPI、I2C、UART、I2S 这四类接口上。理解每种接口在 XENSIV 传感器中的典型角色,是后续完成单传感器数据读取、串口可视化乃至多传感器融合的前提。本节先建立接口选型的判断依据,再以一块常见开发板为例,走通“接线—配置—读取—可视化”的完整链路。

四类接口在 XENSIV 传感器中的分工

接口选择不是随意的,它由传感器的数据率、寄存器访问方式、引脚预算和实时性要求共同决定。

SPI 是 XENSIV 雷达(如 BGT60 系列)和部分高数据率传感器的主力接口。它使用 SCLK、MOSI、MISO、CS 四线,全双工、时钟速率可达数十 MHz,适合连续读取雷达原始数据或 FIFO 突发读取。代价是每个从设备需要独立片选,多传感器时引脚消耗明显。

I2C 广泛用于 XENSIV 压力传感器(如 DPS368)、磁场传感器和环境传感器。它只需 SCL、SDA 两根线,支持多设备共享总线,通过 7 位地址区分从机。标准模式 100 kHz、快速模式 400 kHz、快速+ 模式 1 MHz。缺点是半双工、速率有限,且总线上拉电阻和电容会限制布线长度。

UART 在 XENSIV 中通常不作为传感器与 MCU 之间的主数据通道,而更多出现在传感器模组的固件升级、调试输出,或某些集成模组(如带串口输出的雷达评估板)上。它异步、点对点,需要约定波特率、数据位、停止位和校验位。

I2S 是 XENSIV 数字麦克风(如 IM69D 系列)的标准接口。它用 BCLK、WS(帧同步)、SD(数据)三线传输连续音频采样流,配合 PDM 或 I2S 格式,采样率通常为 16 kHz 或 48 kHz。I2S 面向的是“流式数据”,而不是寄存器读写,这一点与 SPI/I2C 有本质区别。

XENSIV 传感器接口选型与数据采集链路 主控 MCU / 开发板 SPI 主机 I2C 主机 UART TX/RX I2S 控制器 数据缓冲 / FIFO 串口格式化输出 定时采样调度 中断 / DMA 触发 串口可视化 (PC 上位机) SPI I2C UART I2S 雷达传感器 BGT60 SCLK/MOSI/MISO/CS · 高速 FIFO 压力传感器 DPS368 SCL/SDA · 地址 0x77 雷达评估模组 TX/RX · 115200 8N1 数字麦克风 IM69D BCLK/WS/SD · 16 kHz 数据采集与可视化 寄存器读取 / 原始数据 量程、ODR、分辨率配置 物理量换算 LSB → Pa / m/s / dBFS 串口格式化 CSV / 文本帧 · 115200 上位机波形显示 串口绘图 / 数据记录 选型依据:数据率 · 寄存器访问方式 · 引脚预算 · 实时性 · 是否流式数据

接口选型的判断依据

面对一个具体传感器,可以按下面的顺序判断:先看数据率,雷达原始数据、音频流这类高吞吐场景优先 SPI 或 I2S;再看访问方式,需要频繁读写配置寄存器且速率不高的,I2C 最省引脚;再看是否流式,麦克风输出的是连续采样流,用 I2S 而不是“读寄存器”;最后看引脚预算,多个 I2C 传感器可共享总线,而多个 SPI 从机需要多个片选。UART 则更多用于模组级通信或调试通道。

单传感器数据读取的实操链路

下面以 I2C 接口的 DPS368 压力传感器为例,走通一次完整采集。选择它是因为 I2C 接线简单、寄存器语义清晰,适合作为第一个跑通的传感器。

接线。开发板的 3.3 V 接传感器 VDD,GND 共地,SCL 接开发板 I2C 时钟,SDA 接数据线。DPS368 的 I2C 地址由 SDO 引脚决定:SDO 接地为 0x76,接 VDD 为 0x77。总线上需要 4.7 kΩ 上拉电阻,多数开发板已集成,若使用裸传感器需自行加上。

寄存器配置。DPS368 的关键寄存器包括:0x06 PRS_CFG(压力测量速率与过采样)、0x07 TMP_CFG(温度测量速率与过采样)、0x08 MEAS_CFG(测量模式)、0x00 PRS_B2 起始的压力数据寄存器。典型配置为:PRS_CFG 写入 0x26(16 倍过采样、4 次/秒),TMP_CFG 写入 0x80(外部传感器、16 倍过采样),MEAS_CFG 写入 0x07 启动连续压力和温度测量。

读取与换算。压力原始值为 24 位有符号数,分布在 PRS_B2、PRS_B1、PRS_B0 三个寄存器。读取后按下面的方式组合并换算:

// 读取 3 字节压力原始值(示例)
uint8_t buf[3];
i2c_read(0x77, 0x00, buf, 3);
int32_t raw = (int32_t)((buf[0] << 16) | (buf[1] << 8) | buf[2]);
if (raw & 0x800000) raw |= 0xFF000000;   // 符号扩展

// 换算为压力(Pa),比例因子随过采样率变化
// 16 倍过采样时,比例因子约为 1/524288
float pressure_pa = raw / 524288.0f;

温度原始值同样为 24 位,比例因子约为 1/1572864,换算后单位为摄氏度。注意比例因子与过采样配置绑定,改配置后必须同步更新换算系数,否则读数会整体偏移。

串口可视化。把换算结果按固定格式打印到串口,例如每 250 ms 输出一行:

P=101325.4 Pa, T=25.31 C
P=101326.1 Pa, T=25.32 C

上位机使用串口绘图工具,把 P 和 T 两列分别映射到两条曲线。判断采集是否正常,可以看三点:数值是否在合理范围(海平面附近约 101325 Pa)、曲线是否平滑无跳变、改变传感器高度或轻压传感器时数值是否随之变化。若读数恒为 0 或 0xFFFFFF,通常是地址错误或测量模式未启动;若数值剧烈跳动,检查过采样配置和电源去耦。

从单传感器到多接口协同

跑通一个 I2C 传感器后,可以按同样思路扩展到 SPI 雷达和 I2S 麦克风。区别在于:SPI 需要处理片选时序和 FIFO 突发读取,I2S 需要配置 DMA 双缓冲以避免音频断流。三者的共同点是“配置—触发—读取—换算—输出”这条链路,只是每一环的具体寄存器、时序和缓冲策略不同。把这条链路在单传感器上走扎实,后续多传感器融合时的数据对齐和时序管理才有可靠基础。

调试建议:先用逻辑分析仪或示波器确认 SCL/SDA 上确实有波形,再排查软件。很多“读不到数据”的问题,根源是上拉电阻缺失、地址写错或供电电压不匹配。