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 有本质区别。
接口选型的判断依据
面对一个具体传感器,可以按下面的顺序判断:先看数据率,雷达原始数据、音频流这类高吞吐场景优先 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 双缓冲以避免音频断流。三者的共同点是“配置—触发—读取—换算—输出”这条链路,只是每一环的具体寄存器、时序和缓冲策略不同。把这条链路在单传感器上走扎实,后续多传感器融合时的数据对齐和时序管理才有可靠基础。