3. 数字接口协议解析
XENSIV 系列传感器(如气压计 DPS368、CO₂ 传感器 PAS CO₂、雷达传感器 BGT60TR13C、霍尔传感器 TLI493D 等)对外暴露的寄存器与 FIFO 数据,几乎都通过 I²C、SPI 或 UART 三类数字接口访问。理解这三类接口的帧结构、时序约束与寄存器访问方式,是后续校准、补偿与数据采集的基础。本节不讨论协议的历史,而是聚焦“一帧数据长什么样、时钟与延时有什么硬约束、寄存器读写如何落到总线上”。
一、三类接口在 XENSIV 中的角色分工
I²C 是 XENSIV 传感器最通用的接口:DPS368、TLI493D、PAS CO₂ 均支持,采用两线(SCL/SDA)开漏结构,7 位从机地址,标准模式 100 kHz、快速模式 400 kHz、快速+模式 1 MHz。SPI 用于对吞吐率或时序确定性要求更高的场景,例如 BGT60TR13C 雷达前端以 SPI 读取高速采样数据,采用四线(SCLK、MOSI、MISO、CSN),支持 Mode 0~Mode 3。UART 在 XENSIV 中相对少见,主要用于部分模块化产品或调试通道,异步无时钟线,靠波特率对齐,典型 9600~115200 bps,帧含起始位、数据位、可选校验位与停止位。
选择接口时,关键不是“哪个更快”,而是“哪个能满足时序约束与寄存器访问语义”。I²C 的寄存器地址自动递增特性适合连续读 FIFO;SPI 的全双工与独立片选适合多传感器共享总线;UART 无地址概念,通常一对一连接。
二、I²C 帧结构与寄存器访问
一次 I²C 寄存器写由“起始 + 从机地址(写)+ 寄存器地址 + 数据 + 停止”构成;寄存器读则是“起始 + 从机地址(写)+ 寄存器地址 + 重复起始 + 从机地址(读)+ 数据 + 停止”。XENSIV 传感器普遍支持地址自动递增:写入首寄存器地址后连续读取,内部指针自动加一,因此读取 DPS368 的 6 字节压力/温度结果时,只需一次寻址即可连续读出。
时序上必须注意:标准/快速模式下 SDA 必须在 SCL 高电平期间保持稳定,仅在 SCL 低电平期间变化;总线电容(含走线与上拉)不得超过 400 pF,否则上升沿变缓导致误判。上拉电阻按总线速率选取,400 kHz 常用 2.2 kΩ~4.7 kΩ,1 MHz 需更小。此外,XENSIV 传感器在测量转换期间可能拉低 SCL 进行时钟拉伸(clock stretching),主机必须支持等待,不能强制超时。
三、SPI 帧结构与模式约束
SPI 没有统一的“帧”定义,帧边界由 CSN 片选决定:CSN 拉低开始,拉高结束。XENSIV SPI 通常采用“1 位读写标志 + 7 位寄存器地址 + 数据”的字节结构,读操作在发送地址后由 MISO 返回数据。BGT60TR13C 的 FIFO 读取则是在 CSN 有效期间连续移出多字节采样数据。
SPI 的核心约束是 CPOL/CPHA 决定的四种模式:Mode 0(CPOL=0, CPHA=0)在 SCLK 上升沿采样、下降沿更新;Mode 3(CPOL=1, CPHA=1)在下降沿采样、上升沿更新。主机与从机模式必须一致,否则数据错位。XENSIV 器件数据手册会明确支持的模式,配置前必须核对。SCLK 频率上限受器件限制,例如部分传感器最高 10 MHz,超频会导致读出错误。多从机共享总线时,未选中的 CSN 必须保持高电平,避免 MISO 冲突。
四、UART 帧结构与校验
UART 帧由起始位(低)、5~9 位数据(LSB 先发)、可选奇偶校验位、1~2 位停止位(高)组成。收发双方必须约定相同的波特率、数据位、校验与停止位,否则帧解析失败。XENSIV 模块的 UART 输出常带固定帧头与校验和,用于区分有效数据与噪声。由于无时钟线,波特率误差需控制在约 ±2% 以内,长线或高波特率下建议使用流控或降低速率。
五、配置寄存器访问的实操要点
无论哪种接口,配置寄存器访问都遵循“先读 ID 确认通信、再写配置、后读回验证”的闭环。以 DPS368 为例,上电后先读 WHO_AM_I(0x0D)应为 0x11,确认 I²C 地址与接线正确;随后写 PRS_CFG(0x06)设置压力测量速率与过采样,写 TMP_CFG(0x07)设置温度配置,再写 MEAS_CFG(0x08)启动连续测量。每一步写完后回读同一寄存器,确认写入值与预期一致,避免因总线干扰导致配置丢失。
SPI 访问 BGT60TR13C 时,需先通过配置寄存器设置 FIFO 水位与采样率,再以 CSN 有效期间连续读取 FIFO 数据。由于 SPI 无自动递增,读取多字节 FIFO 依赖器件内部的 FIFO 指针自动推进,而非地址递增,这一点与 I²C 不同,配置时需查阅数据手册确认。
UART 访问通常以命令帧形式下发,例如“帧头 + 命令码 + 参数 + 校验和”,传感器返回“帧头 + 数据 + 校验和”。解析时必须先校验帧头与校验和,再提取有效载荷,否则噪声会被误认为数据。
六、三类接口的对比与选型参考
| 维度 | I²C | SPI | UART |
|---|---|---|---|
| 线数 | 2(SCL/SDA) | 4(SCLK/MOSI/MISO/CSN) | 2(TX/RX) |
| 寻址 | 7位从机地址 | 片选CSN | 无,一对一 |
| 典型速率 | 100k/400k/1M | 1M~10M+ | 9.6k~115.2k |
| 寄存器递增 | 支持 | 通常不支持 | 命令字间接 |
| 时钟拉伸 | 支持,主机需等待 | 无 | 无 |
| XENSIV典型 | DPS368/TLI493D/PAS CO₂ | BGT60TR13C | 模块/调试口 |
选型时,若传感器数量多、走线受限、速率要求不高,优先 I²C;若需要高速 FIFO 读取或多器件并行、时序确定性强,选 SPI;若为模块化输出或仅需调试通道,UART 更简单。三者并非互斥,同一系统中可同时存在,但共享总线时必须处理好地址、片选与电平匹配。
掌握帧结构、时序约束与寄存器访问语义后,后续的校准系数读取、FIFO 数据采集与补偿计算才能建立在可靠的通信基础之上。实际工程中,建议把“读 ID—写配置—回读验证—读数据”固化为接口初始化流程,并在每次上电或复位后执行,以降低现场偶发通信异常带来的排查成本。